Что такое контейнер IoC?
Что такое инфраструктура IoC/DI?
Зачем нужна инфраструктура для IoC/DI?
Есть ли какая-либо связь между IoC/DI и AOP?
Что такое Spring.net/ninject относительно IoC и AOP?
Что такое контейнер IoC?
Что такое инфраструктура IoC/DI?
Зачем нужна инфраструктура для IoC/DI?
Есть ли какая-либо связь между IoC/DI и AOP?
Что такое Spring.net/ninject относительно IoC и AOP?
JMSA,
Джеймс Ковач написал фантастическую статью, которая охватывает многие ваши вопросы, которые я бы рекомендовал прочитать. Здесь
Spring.Net, Ninject, Unity, Castle Windsor, Autofac - все контейнеры IOC, которые настраиваются по-разному, многие из них также поддерживают AOP.
Рамки для IOC/DI полезны, потому что они предоставляют стандартные механизмы, например, если вы нанимаете нового разработчика, гораздо проще сказать, мы используем эту структуру и передаем им ссылки на учебники/справочные руководства. В то же время эти рамки проверяются и тестируются крупным сообществом/компаниями.
Позвольте мне знать, останутся ли без ответа ваши вопросы после прочтения статьи и выше, и я сделаю все возможное, чтобы оказать дополнительную помощь.
С точки зрения семантики...
Зависимость Инъекция сама по себе подразумевает зависимость, то есть что-то, что требуется для построения/использования (основная проблема приложения). Например, автомобиль не автомобиль без двигателя.
Аспекты описываются как сквозные для основных задач приложения. Это означает, что как отдельные, так и не имеющие решающее значение для основных проблем (вы можете думать о них как о "хороших для имущих" ). Поскольку приложение может работать без каких-либо аспектов, являются ли они действительно зависимыми? Например, автомобиль по-прежнему остается автомобилем, даже без иммобилайзера.
(Конечно, это с теоретической точки зрения. В реальном мире такие вопросы, как безопасность, часто имеют решающее значение для существования товарного продукта, поскольку основное внимание касается самих себя.)
Итак, пока на практике DI может использоваться для реализации аспектов, я бы не назвал этот процесс истинным DI. Это происходит от тех, кто использует эксклюзивную конструкцию.
У Мартина Фаулера есть хорошая статья здесь о значении инверсии управления и инъекции зависимостей.
Spring Использование AOP в .NET подробно описано здесь. Я больше знаком с Java-версией Spring, поэтому я не могу с полной уверенностью сказать, что Spring.NET в настоящее время поддерживает только AOP на основе прокси.
То есть, класс, которому следует посоветовать, должен реализовать интерфейс. Spring создаст динамический прокси-сервер, который реализует этот интерфейс и делегирует исходный целевой экземпляр.
Хотя он имеет значение:
В будущей версии мы будем внедрять прокси-серверы с использованием наследования, что позволит вам также прокси-классы без интерфейсов, а также удалить некоторые из оставшихся исходных проблем, которые не могут быть решены с использованием прокси-серверов на основе состава.