.net Structuremap:按名称检索给定接口的所有具体类

.net Structuremap:按名称检索给定接口的所有具体类,.net,configuration,structuremap,.net,Configuration,Structuremap,我希望能够检索在Structuremap中以给定名称配置的特定接口的所有实例 我已经在项目中使用Structuremap进行构造函数注入,这似乎是我应该能够用它完成的事情 例如:我有一个接口IProcessor,许多具体类都实现了这个接口。每个具体类都有一个名称,有些类共享相同的名称。对于给定的名称,我希望能够返回IProcessor的所有具体实例 IEnumerable<IProcessor> processors = ProcessorsByName("foo"); Proce

我希望能够检索在Structuremap中以给定名称配置的特定接口的所有实例

我已经在项目中使用Structuremap进行构造函数注入,这似乎是我应该能够用它完成的事情

例如:我有一个接口
IProcessor
,许多具体类都实现了这个接口。每个具体类都有一个名称,有些类共享相同的名称。对于给定的名称,我希望能够返回
IProcessor
的所有具体实例

IEnumerable<IProcessor> processors = ProcessorsByName("foo");

ProcessorsByName(string name)
{
    // Some Structuremap magic here
    // Ideally something like (which I know doesn't exist)
    return ObjectFactory.GetAllNamedInstances<IProcessor>(name);
}
IEnumerable processors=ProcessorsByName(“foo”);
ProcessorsByName(字符串名称)
{
//这里有一些结构图魔术
//理想情况下,类似的东西(我知道不存在)
返回ObjectFactory.GetAllNamedInstances(名称);
}
我知道我可以调用
ObjectFactory.GetAllInstances()
,然后对每个实例进行枚举测试,看看它是否是正确的名称,但这听起来很浪费

// Possible solution
interface IProcessor
{
    string Name { get; }
}

IEnumerable<IProcessor> processors = ProcessorsByName("foo");

ProcessorsByName(string name)
{
    // Having a dog and barking yourself
    return ObjectFactory.GetAllInstances<IProcessor>().Where(p => p.Name == name);
}
//可能的解决方案
接口处理器
{
字符串名称{get;}
}
IEnumerable processors=ProcessorsByName(“foo”);
ProcessorsByName(字符串名称)
{
//养狗和自己吠叫
返回ObjectFactory.GetAllInstances(),其中(p=>p.Name==Name);
}
单向:

public sealed class MyRegistry : Registry
{
    public MyRegistry()
        : base()
    {

        For<IProcessor>()
            .Use<FooProcessor>().Named("Foo");
公共密封类MyRegistry:Registry
{
公共注册处()
:base()
{
For()
.Use().Named(“Foo”);

我需要能够得到一个
IEnumerable
而不一定只是一个给定名称的名称我的错..我误解了这个问题。你可以总是正确地使用自己的扩展方法来获取“名称”param或修改source.StructureMap不支持具有相同名称的多个实例。您必须在其上实现自己的机制。如果需要按名称对实例进行分组,则建议的解决方案可以正常工作。如果您描述了试图解决的问题,除按名称分组外,可能还有其他解决方案。