我有以下的(简化)的情况:我有两个接口
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
?