Можно ли связать разные интерфейсы с одним и тем же экземпляром класса, реализующего их все?

У меня следующая (упрощенная) ситуация: у меня есть два интерфейса

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?

38
задан mipe34 18 December 2012 в 13:54
поделиться