У меня следующая (упрощенная) ситуация: у меня есть два интерфейса
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().ToSelf().InSingletonScope();
Bind().To().InSingletonScope();
Bind().To().InSingletonScope();
Но, к сожалению, когда я запрашиваю экземпляр своего тестового класса через kernel.Get
, он на самом деле использует разные экземпляры 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
?