私は次の(単純化された)状況にあります:私は2つのインターフェースを持っています
interface IAmAnInterface
{
void DoSomething();
}
と
interface IAmAnInterfaceToo
{
void DoSomethingElse();
}
および両方を実装するクラス:
class IAmAnImplementation: IAmAnInterface, IAmAnInterfaceToo
{
public IAmAnImplementation()
{
}
public void DoSomething()
{
}
public void DoSomethingElse()
{
}
}
次に、Ninjectを使用して同じクラスを両方のインターフェイスにバインドします。同じビーイングのインスタンスを使用したいので、ある種のシングルトンが必要なことは明らかです。ninject.extensions.namedscopeを試してみましたが、成功しませんでした。私の最後の試みは:IAmAnImplementation
IAmAnInterface
IAmAnInterfaceToo
InScope()
Bind<IAmAnImplementation>().ToSelf().InSingletonScope();
Bind<IAmAnInterface>().To<IAmAnImplementation>().InSingletonScope();
Bind<IAmAnInterfaceToo>().To<IAmAnImplementation>().InSingletonScope();
しかし、残念ながら、それを介してテストクラスのインスタンスを要求するkernel.Get<IDependOnBothInterfaces>();
と、実際にはの異なるインスタンスが使用されます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
}
}
NinjectにIAmAnImplementation
forIAmAnInterface
と同じインスタンスを使用するように指示する方法はありますIAmAnInterfaceToo
か?