【发布时间】:2012-04-29 16:00:58
【问题描述】:
我有以下(简化的)情况:我有两个接口
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
}
}
有没有办法告诉 Ninject 为 IAmAnInterface 和 IAmAnInterfaceToo 使用相同的 IAmAnImplementation 实例?
【问题讨论】:
-
相关:请参阅this V2-era question,了解有关旧无效方法的过于详细的讨论
标签: c# dependency-injection inversion-of-control ninject ninject-3