Одним из основных преимуществ использования 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)))
);