Мне трудно понять, когда следует внедрить зависимость. Давайте рассмотрим простой пример из моего проекта:
class CompanyDetailProvider : ICompanyDetailProvider {
private readonly FilePathProvider provider;
public CompanyDetailProvider(FilePathProvider provider) {
this.provider = provider;
}
public IEnumerable<CompanyDetail> GetCompanyDetailsForDate(DateTime date) {
string path = this.provider.GetCompanyDetailFilePathForDate(date);
var factory = new DataReaderFactory();
Func<IDataReader> sourceProvider = () => factory.CreateReader(
DataFileType.FlatFile,
path
);
var hydrator = new Hydrator<CompanyDetail>(sourceProvider);
return hydrator;
}
}
(Не качество продукции!)
ICompanyDetailProvider
отвечает за предоставление экземпляров CompanyDetail
для потребителей. Конкретная реализация CompanyDetailProvider
делает это путем гидратации экземпляров CompanyDetail
из файла с помощью Hydrator
, который использует отражение для заполнения экземпляров T
получен из IDataReader
. Очевидно, что CompanyDetailProvider
зависит от DataReaderFactory
(который возвращает экземпляры OleDbDataReader
с указанием пути к файлу) и Hydrator
. Следует ли вводить эти зависимости? Правильно ли вводить FilePathProvider
? Какие качества я проверяю, чтобы решить, следует ли им делать инъекции?