【发布时间】:2011-09-17 04:27:56
【问题描述】:
这可能只是一个新手问题,但我有以下问题:
public class FooSettings {}
public class BarSettings {}
public class DohSettings {}
// There might be many more settings types...
public interface IProcessor { ... }
public class FooProcessor
: IProcessor
{
public FooProcessor(FooSettings) { ... }
}
public class BarProcessor
: IProcessor
{
public BarProcessor(BarSettings) { ... }
}
public class DohProcessor
: IProcessor
{
public DohProcessor(DohSettings) { ... }
}
// There might be many more processor types with matching settings...
public interface IProcessorConsumer {}
public class ProcessorConsumer
: IProcessorConsumer
{
public ProcessorConsumer(IProcessor processor) { ... }
}
FooSettings 或 BarSettings 的实例是从外部来源提供的,即:
object settings = GetSettings();
现在我想基于注入现有设置实例来解析 ProcessorConsumer,例如:
container.RegisterAssemblyTypes(...); // Or similar
container.Inject(settings);
var consumer = container.Resolve<IProcessorConsumer>();
也就是说,如果提供了 FooSettings 的实例,则会创建一个 FooProcessor 并将其注入到 ProcessorConsumer 中,然后解析该实例。
我无法弄清楚如何在 StructureMap、Ninject 或 Autofac 中执行此操作...可能是因为我是 IoC 容器的新手。因此,非常感谢所有这些或其他容器的答案,以便它们可以进行比较。
更新:我正在寻找一种可以轻松添加新设置和处理器的解决方案。此外,还有从设置类型到处理器类型的一对一映射。但这也允许基于其构造函数参数将其他实例/服务注入给定的处理器类型。 IE。某些处理器可能需要 IResourceProvider 服务或类似服务。这里只是一个例子。
理想情况下,我想要类似的东西
container.For<IProcessor>.InjectConstructorParameter(settings)
或类似的。从而引导IoC容器使用与注入的构造函数参数实例相匹配的处理器类型。
【问题讨论】:
-
应该
public Foo(FooSettings) { ... }是public FooProcessor(FooSettings) { }和public Foo(BarSettings) { ... }是public BarProcessor(BarSettings) { }? -
可能重复的问题 - stackoverflow.com/questions/6373122/…
标签: c# ioc-container ninject structuremap autofac