У меня есть куча сборщиков данных, у всех почти одинаковая подпись. Единственное, что отличается, это тип возвращаемого значения. Тип возврата указан как T:
У меня есть этот интерфейс:
public interface IDataFetcher<T>
{
T FetchData(MyObject data);
}
Далее у меня есть около 10 реализаций этого интерфейса. В коде вызова я хочу сделать что-то вроде этого:
public class FetchCommandHandler
{
private readonly IEnumerable<IDataFetcher<T>> _fetchers;
public FetchCommandHandler(IEnumerable<IDataFetcher<T>> fetchers) // this of course does not work
{
_fetchers = fetchers;
}
public MyResult Handle()
{
var myObj = new MyObject(); // get object from database
foreach(var fetcher in _fetchers)
{
var result = fetcher.FetchData(myObj);
// do something with result
}
}
}
Итак, в конце концов, мне не нужно вставлять каждую реализацию DataFetcher<T>
в конструктор. Я ищу способ получить все регистрации IDataFetcher<T>
из StructureMap.
Я открыт для любого другого проекта, который достигает того же результата, ie, а не для внедрения каждой реализации в конструктор.