IoC, AOP и многое другое - PullRequest
12 голосов
/ 03 июня 2009

Что такое контейнер IoC?

Что такое инфраструктура IoC / DI?

Зачем нам нужна платформа для IoC / DI?

Есть ли связь между IoC / DI и AOP?

Что такое Spring.net/ninject по отношению к IoC и AOP?

Ответы [ 3 ]

4 голосов
/ 03 июня 2009

JMSA,

Джеймс Ковач написал фантастическую статью, которая охватывает многие ваши вопросы, я бы рекомендовал прочитать ее Здесь

Spring.Net, Ninject, Unity, Castle Windsor, Autofac - это все контейнеры IOC, которые можно настраивать различными способами, многие из них также поддерживают AOP.

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

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

3 голосов
/ 22 апреля 2011

С семантической точки зрения ...

Внедрение зависимостей само подразумевает зависимость , то есть то, что требуется для построения / использования ("основные проблемы" приложения). Например, автомобиль - это не автомобиль без двигателя.

Аспекты описываются как сквозные для основных задач приложения. Это означает, что они не связаны с основными проблемами и не имеют решающего значения (вы можете думать о них как о «хороших»). Поскольку приложение может работать без аспектов, действительно ли они являются зависимостями? Например, автомобиль все еще остается автомобилем даже без иммобилайзера.

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

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

2 голосов
/ 03 июня 2009

У Мартина Фаулера есть хорошая статья здесь о значении инверсии контроля и инъекции зависимостей.

Использование Spring.NET AOP подробно описано здесь . Я более знаком с Java-версией Spring, поэтому не могу с полной уверенностью сказать, что Spring.NET в настоящее время поддерживает только AOP на основе прокси.

То есть рекомендуемый класс должен реализовывать интерфейс. Spring создаст динамический прокси, который реализует этот интерфейс и делегирует исходный целевой экземпляр.

Хотя в нем говорится:

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

...