I mają następujące (uproszczonych) Położenie: mam dwa interfejsyCzy można powiązać różne interfejsy z tym samym wystąpieniem klasy implementującej je wszystkie?
interface IAmAnInterface
{
void DoSomething();
}
i
interface IAmAnInterfaceToo
{
void DoSomethingElse();
}
a klasą wykonawczych zarówno:
class IAmAnImplementation: IAmAnInterface, IAmAnInterfaceToo
{
public IAmAnImplementation()
{
}
public void DoSomething()
{
}
public void DoSomethingElse()
{
}
}
Teraz wiążą ten sam klasę oba interfejsy używają programu Ninject. Ponieważ chcę, aby sama instancja z IAmAnImplementation
była używana dla IAmAnInterface
, a także IAmAnInterfaceToo
, jasne jest, że potrzebuję jakiegoś singletonu. Grałem z ninject.extensions.namedscope, a także InScope()
, ale nie udało mi się. Moja ostatnia próba była:
Bind<IAmAnImplementation>().ToSelf().InSingletonScope();
Bind<IAmAnInterface>().To<IAmAnImplementation>().InSingletonScope();
Bind<IAmAnInterfaceToo>().To<IAmAnImplementation>().InSingletonScope();
Ale niestety, kiedy poprosić o wystąpienie mojej klasie testowej poprzez kernel.Get<IDependOnBothInterfaces>();
go w rzeczywistości wykorzystuje różne instancje 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
}
}
Czy istnieje sposób powiedzieć Ninject używać tej samej instancji IAmAnImplementation
dla IAmAnInterface
jak również IAmAnInterfaceToo
?
powiązane: Patrz [V2-era to pytanie] (http://stackoverflow.com/questions/3147996/binding-singleton-to-multiple-services -in-ninject) dla zbyt szczegółowych dyskusji na temat starych nieważnych podejść. –