tengo el siguiente (simplificado) situación: Tengo dos interfaces¿Es posible vincular diferentes interfaces a la misma instancia de una clase que las implementa?
interface IAmAnInterface
{
void DoSomething();
}
y
interface IAmAnInterfaceToo
{
void DoSomethingElse();
}
y una clase de aplicación tanto:
class IAmAnImplementation: IAmAnInterface, IAmAnInterfaceToo
{
public IAmAnImplementation()
{
}
public void DoSomething()
{
}
public void DoSomethingElse()
{
}
}
Ahora obligar a la misma clase de ambas interfaces usan Ninject. Como quiero la misma instancia de IAmAnImplementation
siendo utilizada para IAmAnInterface
y IAmAnInterfaceToo
, está claro que necesito algún tipo de singleton. Jugué con ninject.extensions.namedscope y InScope()
pero no tuve éxito. Mi último intento fue:
Bind<IAmAnImplementation>().ToSelf().InSingletonScope();
Bind<IAmAnInterface>().To<IAmAnImplementation>().InSingletonScope();
Bind<IAmAnInterfaceToo>().To<IAmAnImplementation>().InSingletonScope();
Pero por desgracia, cuando solicito una instancia de mi clase de prueba a través de kernel.Get<IDependOnBothInterfaces>();
que, 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 una manera de Ninject decirle a utilizar la misma instancia de IAmAnImplementation
para IAmAnInterface
, así como IAmAnInterfaceToo
?
relacionados: Ver [esta pregunta V2 de la era] (http://stackoverflow.com/questions/3147996/binding-singleton-to-multiple-services -in-ninject) para discusiones demasiado detalladas de antiguos enfoques inválidos –