开放通用类型上的 StructureMap GetAllInstances

StructureMap GetAllInstances on Open Generic Types

我是 StructureMap 的新手,正在尝试一个简单的场景

我扫描基本文件夹中的所有程序集并查找实现我的开放通用接口的类型。

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

这行得通,我可以看到它注册了所有此类类型,但是在获取所有类型的列表时,我遇到了以下语句 returns null.

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

但是,我可以毫无问题地使用具体类型名称获取类型

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

所以我想要得到的是实现 IHandler<> 的所有类型的列表,因为我不知道具体的类型名称并稍后在每个对象上调用接口方法以确定要使用的正确对象。

不确定是否可能,但如果 StructureMap 允许我调用接口方法并仅获取那些 return 例如作为方法调用的结果为真。

谢谢, 周杰伦

不确定你想要完成什么,所以我将只参考这部分:

So what I want to get is a list of all types that implement IHandler<>

您可以像这样访问容器的元数据并查询实现开放通用类型的所有实例:

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