Мне нравится внедрение в конструктор для внедрения зависимостей.Он вызывает четкое объявление проблем от типа и помогает с тестируемостью.
Мне нравится внедрение в конструктор, в большинстве местах ...
В качестве примера, где яне нравится.Если у меня есть базовый класс, от которого наследуются многие другие классы, и я хочу, чтобы все эти классы использовали экземпляр моего ILogger (или чего-то еще), и мне не нужна статическая фабрика (Logger.Instance) ... Яя не хочу объявлять конструктор для каждого подкласса, который принимает ILogger.
Итак, я мог бы попросить мой базовый класс объявить регистратор как свойство и сделать его таким образом
public class MyBaseClass
{
public ILogger Logger { get; set; }
}
... но
- Это не гарантирует мне, что Logger на самом деле вводится и не является нулевым.
- Не знаюнапример, иметь ILogger с открытым набором
Итак ... какие еще варианты у меня есть?(Я использую Castle Windsor).
Я думал о создании интерфейса
public interface IInitializable<T>
{
void Initialize(T instance);
}
public class MyBaseClass : IInitializable<ILogger>, ...could have other IInitializables too...
{
protected ILogger Logger { get; private set; }
public void Initialize(ILogger instance)
{
Logger = instance;
}
}
Затем в моем контейнере будет средство, которое автоматически вызывает все реализации IInitializable<T>
при построении типа...
Но мне интересно, что думают другие люди, прежде чем идти этим путем ...