是否可以将不同的接口绑定到实现所有这些接口的类的同一实例

本文关键字:接口 所有这些 实现 实例 绑定 是否 | 更新日期: 2023-09-27 18:31:25

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

interface IAmAnInterface
{
    void DoSomething();
}

interface IAmAnInterfaceToo
{
    void DoSomethingElse();
}

以及实现两者的类:

class IAmAnImplementation: IAmAnInterface, IAmAnInterfaceToo
{
    public IAmAnImplementation()
    {
    }
    public void DoSomething()
    {
    }
    public void DoSomethingElse()
    {
    }
}

现在我使用 Ninject 将同一个类绑定到两个接口。由于我想要用于IAmAnInterfaceIAmAnInterfaceToo的相同IAmAnImplementation蜂实例,因此很明显我需要某种单例。我玩了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 对IAmAnInterfaceIAmAnInterfaceToo使用相同的IAmAnImplementation实例?

是否可以将不同的接口绑定到实现所有这些接口的类的同一实例

使用 V3.0.0 非常容易

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