2008-09-12 8 views
3

После посещения недавней группы Alt.NET на IoC я подумал о доступных инструментах и ​​о том, как они могут работать. StructureMap в частности использует оба атрибута и понятия начальной загрузки для сопоставления запросов для IThing до ConcreteThing. Атрибуты автоматически меняют флаги для меня, что происходит либо рефлексия, либо инъекция IL. Кто-нибудь знает, как это работает (для StructureMap или других инструментов IoC) и какие связанные с этим накладные расходы могут быть либо во время выполнения, либо во время компиляции?Что такое накладные расходы, связанные с контейнерами IoC, такими как StructureMap?

ответ

1

Я не могу сказать много для других наборов инструментов IoC, но я использую Spring.Net и обнаружил, что при запуске есть одна начальная оценка производительности. После настройки контейнера приложение запускается без изменений.

+0

Спасибо. ..Я действительно не слышал о Spring.Net, вам это нравится? – 2008-09-12 00:29:11

0

Основная проблема заключается в том, что код становится трудно понять. Это может стать чистым магическим если один overuse IoC. Другая проблема - производительность. В большинстве случаев потеря производительности не заметна. Но когда вы начинаете создавать большинство своих объектов через контейнер IoC, он может внезапно опуститься ниже уровня океана.

+0

Насколько велика может быть потеря производительности? Что вы измерили? – Rookian 2010-07-23 20:22:45

1

Я использую Windsor от CastleProject и нашел его чрезвычайно полезным в уменьшении зависимостей. Я еще не заметил проблемы с производительностью, но одна вещь, которую я нахожу, заключается в том, что конфигурация может стать немного громоздкой. Чтобы помочь в этом отношении, я начинаю смотреть на Binsor, который является DSL для Windsor, написанным в boo.

Еще одна вещь, о которой стоит помнить, заключается в том, что при навигации по коду вы не сможете перейти к коду, который будет выполняться во время выполнения.

0

Я построил очень легкий и основной IOC, здесь:

http://blogs.microsoft.co.il/blogs/shay/archive/2008/09/30/building-custom-object-mapper.aspx

Это не альтернатива библиотекам вы упомянули, но если все, что Вам нужно, чтобы разрешить тип, давая его интерфейс это может быть идеальным решением.

Я не обрабатывать типы Инстанцирование (Singleton, преходящие, нить, бассейн ...), все объект будет экземпляр, как одиночек, вы называете это нравится:

IRepository _repository = ObjectFactory.BuildFactory<IRepository>(); 

Шей