É possível associar diferentes interfaces à mesma instância de uma classe implementando todas elas?
Eu tenho a seguinte situação (simplificada): eu tenho duas interfaces
<code>interface IAmAnInterface { void DoSomething(); } </code>
e
<code>interface IAmAnInterfaceToo { void DoSomethingElse(); } </code>
e uma classe implementando ambos:
<code>class IAmAnImplementation: IAmAnInterface, IAmAnInterfaceToo { public IAmAnImplementation() { } public void DoSomething() { } public void DoSomethingElse() { } } </code>
Agora eu vinculo a mesma classe a ambas as interfaces usando o Ninject. Desde que eu quero omesma instância doIAmAnImplementation
beeing usado paraIAmAnInterface
assim comoIAmAnInterfaceToo
É claro que preciso de algum tipo de singleton. Eu brinquei comninject.extensions.namedscope assim comoInScope()
mas não teve sucesso. Minha última tentativa foi:
<code>Bind<IAmAnImplementation>().ToSelf().InSingletonScope(); Bind<IAmAnInterface>().To<IAmAnImplementation>().InSingletonScope(); Bind<IAmAnInterfaceToo>().To<IAmAnImplementation>().InSingletonScope(); </code>
Mas infelizmente quando eu solicito uma instância da minha classe de teste viakernel.Get<IDependOnBothInterfaces>();
na verdade, usa diferentes instâncias deIAmAnImplementation
.
<code>class IDependOnBothInterfaces { private IAmAnInterface Dependency1 { get; set; } private IAmAnInterfaceToo Dependency2 { get; set; } public IDependOnBothInterfaces(IAmAnInterface i1, IAmAnInterfaceToo i2) { Dependency1 = i1; Dependency2 = i2; } public bool IUseTheSameInstances { get { return Dependency1 == Dependency2; } // returns false } } </code>
Existe uma maneira de dizer Ninject para usar a mesma instância deIAmAnImplementation
paraIAmAnInterface
assim comoIAmAnInterfaceToo
?