问题
How to do it in code is explained here: Unity Register two interfaces as one singleton
_container.RegisterType<EventService>(new ContainerControlledLifetimeManager());
_container.RegisterType<IEventService, EventService>();
_container.RegisterType<IEventServiceInformation, EventService>();
bool singleton = ReferenceEquals(_container.Resolve<IEventService>(), _container.Resolve<IEventServiceInformation>());
How to do it in the XML config?
回答1:
Personally I like to spell out namespaces and assemblies in aliases. So xml:
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="Event_Interface" type="Mynamespace.IEventService, MyAssembly"/>
<alias alias="EventService_Interface" type="Mynamespace.IEventServiceInformation, MyAssembly"/>
<alias alias="Event_Class" type="Mynamespace.EventService, MyAssembly"/>
<container>
<register type="Event_Interface" mapTo="Event_Class">
<lifetime type="singleton"/>
</register>
<register type="EventService_Interface" mapTo="Event_Class">
<lifetime type="singleton"/>
</register>
</container>
</unity>
code:
IUnityContainer container = new UnityContainer().LoadConfiguration();
回答2:
I didn't work with configuration files for unity yet, but according to the documentation it is
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<namespace name="MyApp.Implementations" />
<assembly name="MyApp" />
<container>
<register type="IEventService" mapTo="EventService" />
<register type="IEventServiceInformation" mapTo="EventService" />
</container>
</unity>
来源:https://stackoverflow.com/questions/7843811/how-can-i-register-one-singleton-to-different-interfaces-in-unity-xml-config