una que poo objetos metodos interfaz interfaces implementacion ejemplos clases clase abstracta c# dependency-injection inversion-of-control ninject ninject-3

c# - poo - ¿Es posible vincular diferentes interfaces a la misma instancia de una clase que las implementa?



interfaz poo (1)

Tengo la siguiente situación (simplificada): tengo dos interfaces

interface IAmAnInterface { void DoSomething(); }

y

interface IAmAnInterfaceToo { void DoSomethingElse(); }

y una clase implementando ambos:

class IAmAnImplementation: IAmAnInterface, IAmAnInterfaceToo { public IAmAnImplementation() { } public void DoSomething() { } public void DoSomethingElse() { } }

Ahora enlace la misma clase a ambas interfaces usando Ninject. Como quiero utilizar la misma instancia de IAmAnImplementation para IAmAnInterface y IAmAnInterfaceToo , está claro que necesito algún tipo de singleton. ninject.extensions.namedscope con ninject.extensions.namedscope e InScope() pero no tuve éxito. Mi último intento fue:

Bind<IAmAnImplementation>().ToSelf().InSingletonScope(); Bind<IAmAnInterface>().To<IAmAnImplementation>().InSingletonScope(); Bind<IAmAnInterfaceToo>().To<IAmAnImplementation>().InSingletonScope();

Pero desafortunadamente cuando solicito una instancia de mi clase de prueba a través de kernel.Get<IDependOnBothInterfaces>(); de hecho, utiliza diferentes instancias de IAmAnImplementation .

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

¿Hay alguna manera de decirle a Ninject que use la misma instancia de IAmAnImplementation para IAmAnInterface y IAmAnInterfaceToo ?


Es muy fácil de usar V3.0.0

Bind<I1, I2, I3>().To<Impl>().InSingletonScope();