我有以下的(簡化)的情況:我有兩個接口是否有可能將不同的接口綁定到實現它們的類的同一個實例?
interface IAmAnInterface
{
void DoSomething();
}
和
interface IAmAnInterfaceToo
{
void DoSomethingElse();
}
和類實現兩個:
class IAmAnImplementation: IAmAnInterface, IAmAnInterfaceToo
{
public IAmAnImplementation()
{
}
public void DoSomething()
{
}
public void DoSomethingElse()
{
}
}
現在我同班綁定兩個接口都使用Ninject。因爲我想要相同的實例的IAmAnImplementation
beeing用於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
}
}
有沒有辦法告訴Ninject使用的IAmAnImplementation
相同的實例爲IAmAnInterface
以及IAmAnInterfaceToo
?
相關:參見[這V2時代的問題(http://stackoverflow.com/questions/3147996/binding-singleton-to-multiple-services -in-ninject)對舊的無效方法進行過於詳細的討論 – 2012-11-30 11:23:13