是否有可能以不同的接口绑定到实现所有这些类的同一个实例?(Is it possible to bin

2019-06-23 17:25发布

我有以下的(简化)的情况:我有两个接口

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使用的同一个实例IAmAnImplementationIAmAnInterface以及IAmAnInterfaceToo

Answer 1:

它使用V3.0.0是很容易的

Bind<I1, I2, I3>().To<Impl>().InSingletonScope();


文章来源: Is it possible to bind different interfaces to the same instance of a class implementing all of them?