可以将一种类型注册到多个接口吗?
我有类实现两个接口
MyService : IService1, IServier2 {}
我想为这两个接口注册这种类型。
container.RegisterType<IService1, MyService>(CreateLifetime());
container.RegisterType<IService2, MyService>(CreateLifetime());
不幸的是,在解决之后,我有两个不同的实例。我试过使用共同的生命,但后来我收到了消息,我不能。
我经常写这个:
.RegisterType<MyService>(CreateLifeTime())
.RegisterType<IService1, MyService>()
.RegisterType<IService2, MyService>();
当然,使用TransientLifetimeManager,您仍将获得两个不同的MyService实例。
上面的代码适用于PerResolveLifetimeManager
,PerResolveLifetimeManager
,PerThreadLifetimeManager
。
您也可以通过配置执行此操作:
<register type="MyService" name="MyServiceName">
<lifetime type="singleton" />
</register>
<register type="IService1" mapTo="MyService" />
<register type="IService2" mapTo="MyService" />
我的答案基于@StephenTunney's answer,但我无法让他上班。
您也可以通过配置执行此操作:
<register type="MyService" name="MyServiceName">
<lifetime type="singleton" />
</register>
<register type="IService1" mapTo="MyService">
<lifetime type="singleton" />
</register>
<register type="IService2" mapTo="MyService">
<lifetime type="singleton" />
</register>
请注意,name="MyServiceName"
是可选的,只有在您计划进行named instances时才需要。