8 Stimmen

Wie kann ich ein Singleton für verschiedene Schnittstellen in Unity registrieren, XML-Konfiguration?

Wie man das im Code macht, wird hier erklärt: Unity Zwei Schnittstellen als ein Singleton registrieren

_container.RegisterType<EventService>(new ContainerControlledLifetimeManager());
_container.RegisterType<IEventService, EventService>();
_container.RegisterType<IEventServiceInformation, EventService>();

bool singleton = ReferenceEquals(_container.Resolve<IEventService>(),   _container.Resolve<IEventServiceInformation>());

Wie kann man das in der XML-Konfiguration tun?

12voto

ErnieL Punkte 5745

Ich persönlich buchstabiere Namespaces und Assemblies gerne in Aliasen aus. Also 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();

1voto

juandimr Punkte 86

Interessanterweise hat die akzeptierte Lösung bei mir nicht funktioniert... Es würde am Ende zwei Singletons hehe, eine pro Schnittstelle erstellen. Bei mir hat es funktioniert, indem ich zuerst den Typ registriert habe, um eine Lebensdauer von Singleton zu haben, und dann die eigentlichen Zuordnungen ohne Lebensdauer hinzugefügt habe. Etwa so:

<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_Class"> 
    <lifetime type="singleton"/>
  </register>
  <register type="Event_Interface" mapTo="Event_Class"/>
  <register type="EventService_Interface" mapTo="Event_Class"/>
</container>

0voto

PVitt Punkte 11132

Ich habe noch nicht mit Konfigurationsdateien für Unity gearbeitet, aber laut der Dokumentation ist es

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X