开放式泛型类型StructureMap GetAllInstances(StructureMap G

2019-10-22 06:25发布

我是新来StructureMap和尝试一个简单的场景

我扫描的基础文件夹的所有组件,并查找类型实现我的开放通用接口。

Scan(
    scan => {
        scan.AssembliesFromApplicationBaseDirectory();
        scan.AddAllTypesOf(typeof(IHandler<>));
    });

这工作,我可以看到它注册的所有这样的类型,但是当涉及到让所有类型的列表,我对着下面的地方语句返回空值的问题。

var list = container.GetAllInstances(typeof(IHandler<>));

不过,我可以用具体的类型名称没有任何问题获得类型

var obj = container.GetInstance(typeof(IHandler<ConcreteHandler>));

所以,我想的是,实现IHandler <>所有类型的列表,因为我不知道具体的类型名称和后来调用每个对象的接口方法找出正确的对象使用。

不知道如果有可能,但更重要的是,如果StructureMap让我调用接口方法,并得到只有那些作为方法调用的结果返回例如:true类型。

谢谢,周杰伦。

Answer 1:

不知道你要完成的任务,所以我会参考,仅这部分的内容:

所以,我想的是,实现IHandler所有类型的列表<>

您可以访问容器的元数据和查询实现您的开放式泛型类型这样的所有实例:

var handlerTypes =
                container.Model.AllInstances.Where(
                    i =>
                    i.PluginType.IsGenericType && i.PluginType.GetGenericTypeDefinition() == typeof(IHandler<>))
                    .Select(m => m.ConcreteType)
                    .ToArray();


文章来源: StructureMap GetAllInstances on Open Generic Types