【发布时间】:2011-11-23 11:32:24
【问题描述】:
我希望能够检索已在 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);
}
我知道我可以打电话给ObjectFactory.GetAllInstances<IProcessor>(),然后枚举测试每一个,看看它是否是正确的名字,但这听起来很浪费。
// 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);
}
【问题讨论】:
-
StructureMap 不支持多个同名实例。您将不得不在它之上实现自己的机制。如果您需要按名称对实例进行分组,您提出的解决方案可以正常工作。如果您描述了您要解决的问题,除了按名称分组之外,可能还有其他解决方案。
标签: .net configuration structuremap