私は(簡体字)以下の状況がある:私は2つのインターフェイス異なるインターフェースをすべて実装するクラスの同じインスタンスにバインドすることは可能ですか?
interface IAmAnInterface
{
void DoSomething();
}
と
interface IAmAnInterfaceToo
{
void DoSomethingElse();
}
との両方を実装するクラスがあります
class IAmAnImplementation: IAmAnInterface, IAmAnInterfaceToo
{
public IAmAnImplementation()
{
}
public void DoSomething()
{
}
public void DoSomethingElse()
{
}
}
を今はに同じクラスに結合します両方のインタフェースはNinjectを使用します。 同じインスタンスのIAmAnImplementation
をIAmAnInterface
とIAmAnInterfaceToo
と同じように使用したいと思うので、何らかのシングルトンが必要であることは明らかです。私はninject.extensions.namedscopeと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
}
}
方法IAmAnInterface
などIAmAnInterfaceToo
ためIAmAnImplementation
の同じインスタンスを使用するようにNinjectを伝えるはありますか?
関連を使用して非常に簡単です:[このV2時代の質問](http://stackoverflow.com/questions/3147996/binding-singleton-to-multiple-servicesを参照してください。 -in-ninject)古い無効なアプローチの詳細な議論のために –