Код вашего собственного контейнера МОК - PullRequest
29 голосов
/ 22 декабря 2008

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

Ответы [ 11 ]

15 голосов
/ 22 декабря 2008

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

6 голосов
4 голосов
/ 22 декабря 2008

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

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

2 голосов
/ 14 сентября 2010

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

2 голосов
/ 06 августа 2010

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

2 голосов
/ 22 декабря 2008

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

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

1 голос
/ 14 сентября 2010

Autofac отлично.

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

1 голос
/ 23 декабря 2008

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

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

0 голосов
/ 15 августа 2018

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

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

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

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

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

0 голосов
/ 17 февраля 2014

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

...