如何在StructureMap中注入实现特定通用接口的对象列表?

时间:2020-04-23 13:43:25

标签: c# structuremap

我有两个界面:

public interface IResult
{}

public interface IDataFetcher<T> where T : IResult
{
   T Fetch();
}

在我的处理程序中,我想注入实现IDataFetcher<T>的服务:

public class MyHandler
{
    public MyHandler(IEnumerable<IDataFetcher<IResult>> fetchers)
    {
        // etc.
    }
}

我目前正在按以下方式注册IDataFetchers

public MyRegistry()
{
    Scan(scan =>
    {
        scan.Assembly("name_of_assembly_containg_all_the_classes");
        scan.AddAllTypesOf<IResult>();
        scan.ConnectImplementationsToTypesClosing(typeof(IDataFetchers<>));
    });
}

当我在MyHandler的构造函数中设置断点时,fetchers变量为空(不为null)

该如何解决?要确保抓取程序充满了IDataFetcher的实现?

1 个答案:

答案 0 :(得分:1)

经过数小时的尝试和谷歌搜索,我找到了答案。除了一件事情,我一切都做对了:使IDataFetcher协变:

public interface IDataFetcher<out T> where T : IResult
{}

这很合理,因为我在泛型类型中使用了具体类型:

public class SomeClass : IResult
{
}

public class ConcreteFetcher : IDataFetcher<SomeClass>
{
    public SomeClass Fetch()
    {
        // do something
    }
}

干杯!

相关问题