Что для вас делает структура внедрения зависимостей? - PullRequest
4 голосов
/ 19 марта 2009

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

Но я не понимаю, как эту концепцию можно применить к каркасу? Что делает для вас инфраструктура Dependency Injection и когда вы должны ее использовать?

Ответы [ 5 ]

5 голосов
/ 19 марта 2009

Фреймворк подключает все для вас на основе своего рода конфигурации (будь то код, файл XML и т. Д.).

В основном это сантехника.

Многие DI-структуры также включают в себя Аспектно-ориентированное программирование, управление жизненным циклом объектов и т. Д., Но основы DI состоят в том, чтобы ваше приложение работало с объектами, взаимодействующими друг с другом.

Другой способ выразить это: DI-фреймворк - это фрагмент кода, который вызывает конструкторы и сообщает всем, что нужно выполнить, когда все будет готово:)

1 голос
/ 19 марта 2009

Главное, для чего я его использую, это то, что он позволяет мне подключать новые реализации объекта без перекомпиляции. Я могу просто изменить файл конфигурации, и мои объекты будут правильно соединены вместе.

0 голосов
/ 20 марта 2009

Одним из основных преимуществ использования DI / IOC является уменьшение связи между различными классами.

Когда вы используете подход, вы должны настроить иерархию объектов, которые выражают зависимости, которые вы извлекли из их кода. Это может превратиться в много кода. Даже если вы используете кодовую часть инфраструктуры DI, это может значительно уменьшить объем конфигурации, позволяя настраивать ее более выразительно:

  • Когда требуется ILogger, используйте FileLogger.
  • Вы можете пойти еще дальше с соглашения, всякий раз, когда
    I [Имя] Контроллер запрашивается
    замените его на [Имя] контроллера.
  • Вы можете настроить управление синглтоном. объекты для вас. Итак, ваш код так же, как и с любым другим
    зависимость, но DI удостоверяется вы получаете один и тот же экземпляр все время

Несколько конфигураций структуры карты, которые я использую:

    ForRequestedType<ILogger>().TheDefaultIsConcreteType<NLogLogger>();
    //the following injects any property that has a type 
    //that implements IController. (overcomes a regular asp.net limitation with DI)
    SetAllProperties(
         p => p.TypeMatches(t => t.IsConcreteAndAssignableTo(typeof(IController)))
    );
0 голосов
/ 20 марта 2009

Одна вещь, которая мне действительно нравится в AOP, это то, что действительно легко перемещаться между версией разработки и производственной версией. Вы можете создать очень подробное ведение журнала, а затем переключить xml-переключатель, и он исчезнет.

0 голосов
/ 19 марта 2009

Лучший способ узнать, насколько они полезны, - попробовать несколько. Я хотел попробовать Spring.NET , это похоже на хорошую реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...