2012-06-20 14 views
11

È possibile registrare un tipo su più interfacce?Registrare lo stesso tipo su più interfacce

devo classe che implementa due interfacce

MyService : IService1, IServier2 {} 

Vorrei registrare questo tipo per entrambe le interfacce.

container.RegisterType<IService1, MyService>(CreateLifetime()); 
container.RegisterType<IService2, MyService>(CreateLifetime()); 

Sfortunatamente durante la risoluzione ho due istanze diverse. Ho provato a usare la vita comune ma poi ho ricevuto un messaggio che non potevo.

+0

[Domanda simile] (http://stackoverflow.com/a/9075733/750065). Se si utilizza un 'ContainerControlledLifetimeManager' è sufficiente registrare la prima mappatura' IService1' -> 'MyService' con quella durata. –

risposta

14

Io di solito scrivo questo:

 .RegisterType<MyService>(CreateLifeTime()) 
     .RegisterType<IService1, MyService>() 
     .RegisterType<IService2, MyService>(); 

Naturalmente con un TransientLifetimeManager, è ancora otterrà due diverse istanze di MyService.

Il codice sopra funziona con PerResolveLifetimeManager, PerResolveLifetimeManager, PerThreadLifetimeManager.

+1

Funziona anche con HierarchicalLifetimeManager. –

+0

Puoi fornire l'equivalente nella sintassi XML app.config? –

0

È possibile fare questo config così:

<register type="MyService" name="MyServiceName"> 
    <lifetime type="singleton" /> 
</register> 
<register type="IService1" mapTo="MyService" /> 
<register type="IService2" mapTo="MyService" /> 
+1

Non funziona Risolvi () e Risolvi () restituisce 2 istanze diverse. – abreneliere

0

Ho basato la mia risposta su @StephenTunney's answer, ma non ho potuto ottenere la sua per lavorare.

È possibile farlo da config così:

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

Si noti che il name="MyServiceName" è facoltativo ed è necessario solo se si ha intenzione di fare named instances.

Problemi correlati