如何在统一的XML配置中将一个单例注册到不同的接口?

时间:2011-10-21 00:29:46

标签: c# .net unity-container

这里解释如何在代码中执行此操作: 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>());

如何在XML配置中执行此操作?

2 个答案:

答案 0 :(得分:12)

我个人喜欢在别名中拼出名称空间和程序集。所以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>

代码:

IUnityContainer container = new UnityContainer().LoadConfiguration();

答案 1 :(得分:0)

我还没有使用配置文件进行统一,但根据文档说明它是

<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>