我有一堆数据读取器,它们都具有几乎相同的签名。唯一不同的是返回类型。返回类型指定为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>
实现。我正在寻找一种从StructureMap检索IDataFetcher<T>
的所有注册的方法。
我对实现相同结果的其他所有设计都持开放态度,即不将每个实现都注入构造函数中。