Код вашего собственного контейнера МОК

Кто-нибудь там написал свой собственный контейнер IOC на C #? Или подавляющее большинство людей используют различные фреймворки, такие как Spring. Каковы за и против каждого?

 Joachim Sauer22 дек. 2008 г., 16:44
charkit: я думаю, что вопрос сам по себе довольно независим от платформы. Некоторые платформы могут заставить вас написать одну, так как у них нет ни одной существующей, но кроме этого ...
 chakrit22 дек. 2008 г., 16:37
язык / платформы?

Ответы на вопрос(11)

Ayende также написал о написании собственного контейнера IoC в своем блогеСоздание контейнера IoC из 15 строк кодаЯ верю, что он придерживается того же мнения, что и все остальные: не создавайте свое собственное мнение, если вам не нужно.

 Ruben Bartelink13 нояб. 2009 г., 10:11
 Ken Egozi22 февр. 2014 г., 08:59
Да, я определенно собираюсь потрясти их лодку!
 Ruben Bartelink20 февр. 2014 г., 22:06
@KenEgozi Ваши команды по продвижению, маркетингу и SEO должны действовать, я считаю: D
 Callum Watkins12 мар. 2017 г., 17:55
Мертвая ссылка, может быть исправлена ​​удалением косой черты с конца.
 Ruben Bartelink12 мар. 2017 г., 20:33
@callumWatkins спасибо за предупреждение; фиксированный. Если я увижу этот комментарий снова с подтверждением, а ваш пропал, я удалю это ...
 Ken Egozi20 февр. 2014 г., 20:29
Да, я не знаю, как я пропустил этот ответ :)

Если вы ищете легкий и высокопроизводительный контейнер IoC, то вам следует проверитьMunq

Автофак отлично.

Я написал один, используя менее 15 строк. Всего два метода расширения для словаря.

Джеймс Ковач представляет эпизод dnrTV на эту темуВот, Вот и написалстатья, Однако в статье он упоминает, что вы, вероятно, захотите использовать один из готовых. Так как их очень много. Ninject, StructureMap, Autofac используют свободный интерфейс. Spring, Castle Windsor и Unity более ориентированы на XML-конфигурацию. Замок Виндзор также может использовать Бу в качестве интерфейса. У многих есть привязки к другим фреймворкам, таким как Unity для EntLib или Castle Windsor для Monorail и остальная часть проекта Castle.

Так что, если вам действительно не нужно или не нужно что-то, что не предоставлено доступными структурами IOC, то почему бы не использовать одну из них.

Я создал свой собственный контейнер IoC, который делает еголегче отлаживать создание объекта (даже если у вас нет доступа к коду контейнера). Когда объект создан, нажимая Шаг в (F11), вы видите код для создания объекта. Полный код можно увидетьВот.

Если бы не было веской причины, я бы не стал изобретать велосипед и сам реализовывать контейнер IoC, особенно потому, что есть много хороших вариантов, таких какЕдинство, Ninject илиSpring.net.

Если вам нужно / хотите удалить зависимость от любого из этих контейнеров IoC, вы можете попробоватьОбщий Сервисный Локатор интерфейс.

Я написал IoC / DI-контейнер в C #, который реализует Common Service Locator. Я написал это в основном для учебных целей, но когда я закончил, я решил сделать его открытым исходным кодом. Если кто-то из вас хотел бы попробоватьIInject, он может скачатьВот.

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

 Pat12 нояб. 2010 г., 16:53
А затем прочитайте его продолжение о том, почему вы не должны делать свой собственный:ayende.com/Blog/archive/2007/10/20/...

Кто-то написал один на C #:http://ninject.org/.

Это открытый исходный код, так что вы можете получить код и посмотреть, как этот парень сделал это.

 PositiveGuy27 окт. 2010 г., 04:45
да, зачем писать свой. Просто используйте это. Фил Хаак (менеджер команды MVC) использует его также для подтекста.

Контейнер IOC написать несложно, это просто хорошо управляемая глобальная рекурсивная фабрика с некоторыми потенциальными дополнительными функциями. Использование словаря, отражения и делегата для регистрации и создания простого контейнера ...

Реальный вопрос в том, почему и как еще одна новая контейнерная структура МОК может принести пользу?

В большинстве случаев вы думаете, что вам нужно больше производительности? несуществующие функции? Но в большинстве случаев существующие фреймворки - это именно то, что вам нужно и достаточно, если только вы не осознаете всю ерунду, которую фреймворк заставил вас использовать.

Имея силу разочарования от всех реализаций фреймворка контейнера ioc, имеет функции, относящиеся к порядку антипаттерна, но также причудливые и ненадежные синтаксисы и, что еще хуже, в навязанных связях, я решил сам испытать это. Вот почему я сделал свой собственный (очень легкий) контейнер IOC в качестве открытого исходного кода.

Вы можете проверить это здесь:Puresharp API .net 4.5.2+

Ваш ответ на вопрос