Подтвердить что ты не робот

Введите свой собственный контейнер IOC

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

4b9b3361

Ответ 1

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

Autofac отлично.

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

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

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

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

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

Ответ 12

Я использовал следующую инфраструктуру IOC Container для своих проектов.

https://marcusts.com/2018/12/26/smart-di-container/

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

PS. Я не связан с компанией, которая написала это. Я просто пользователь.