2012-06-20 20 views
11

Możliwe jest zarejestrowanie jednego typu dla wielu interfejsów?Zarejestruj ten sam typ dla wielu interfejsów.

Mam klasy, które implementują dwa interfejsy

MyService : IService1, IServier2 {} 

Chciałbym zarejestrować tego typu dla obu interfejsów.

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

Niestety podczas po rozwiązaniu mam dwie różne instancje. Próbowałem używać wspólnego życia, ale dostałem wiadomość, której nie mogę.

+0

[Podobne pytanie] (http://stackoverflow.com/a/9075733/750065). Jeśli używasz 'ContainerControlledLifetimeManager' wystarczy zarejestrować pierwsze odwzorowanie' IService1' -> 'MyService' z tym czasem życia. –

Odpowiedz

14

zazwyczaj piszę to:

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

Oczywiście z TransientLifetimeManager, nadal dostanie dwa różne instancje MyService.

Powyższy kod działa z PerResolveLifetimeManager, PerResolveLifetimeManager, PerThreadLifetimeManager.

+1

Działa również z HierarchicalLifetimeManager. –

+0

Czy możesz podać odpowiednik w składni app.config XML? –

0

Można to zrobić poprzez config, a także:

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

To nie działa Resolve () i Resolve () zwraca 2 różne wystąpienia. – abreneliere

0

oparłem moją odpowiedź na @StephenTunney's answer, ale nie mogłem się jego pracy.

Można to zrobić poprzez config, a także:

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

Należy pamiętać, że name="MyServiceName" jest opcjonalny i wymagany tylko jeśli masz zamiar robić named instances.

Powiązane problemy