2012-06-20 14 views
11

¿Es posible registrar un tipo en múltiples interfaces?Registre el mismo tipo en múltiples interfaces

que tienen clase que implementar dos interfaces

MyService : IService1, IServier2 {} 

me gustaría registrar este tipo para ambas interfaces.

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

Desafortunadamente, después de la resolución tengo dos instancias diferentes. Intenté utilizar el uso común de por vida, pero luego recibí un mensaje de que no puedo.

+0

[Pregunta similar] (http://stackoverflow.com/a/9075733/750065). Si usa un 'ContainerControlledLifetimeManager' es suficiente registrar la primera asignación' IService1' -> 'MyService' con esa duración. –

Respuesta

14

suelo escribir esto:

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

Por supuesto, con un TransientLifetimeManager, usted seguirá recibiendo dos instancias diferentes de MyService.

El código anterior funciona con PerResolveLifetimeManager, PerResolveLifetimeManager, PerThreadLifetimeManager.

+1

También funciona con HierarchicalLifetimeManager. –

+0

¿Puedes dar el equivalente en la sintaxis XML de app.config? –

0

Usted puede hacer esto mediante la configuración así:

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

No funciona Resolver () y Resolver () devuelve 2 instancias diferentes. – abreneliere

0

basé mi respuesta en @StephenTunney's answer, pero no pude conseguir su trabajar.

Usted puede hacer esto mediante la configuración así:

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

Tenga en cuenta que la name="MyServiceName" es opcional y sólo es necesario si usted planea en hacer named instances.

Cuestiones relacionadas