【发布时间】:2016-04-28 12:10:06
【问题描述】:
我有一个继承自另一个接口的接口
public interface ISpecificHandler : IHandler
使用 Simple Injector 我注册了我的类型和实现
container.RegisterSingleton<ISpecificHandler, SpecificHandlerImpl>();
但是我怎样才能解决IHandler 而不是ISpecificHandler?
//Expect SpecificHandlerImpl as handler
IHandler handler = ServiceLocator.GetInstance<IHandler>(); //error
这会抛出一个InvalidOperationException,表明 IHandler 类型未注册
【问题讨论】:
-
为什么要这样做?你有多少个
IHandler实现? -
这只是一个示例场景。无论如何,我可以有多个实现。如果我可以将
SpecificHandlerImpl转换为IHandler为什么不通过 IOC 容器解决它们!? -
“为什么不通过 IOC 容器也解决它们!?”。因为这很容易导致您的代码和设计出现歧义。在没有更具体的情况下,没有人可以真正建议您解决此问题的最佳方法。所以我建议发布完整的
IHandler和ISpecificHandler定义,描述你有多少其他实现,并展示一些你期望如何使用这个IHandler的例子。
标签: c# ioc-container simple-injector