没有从“类型”到“接口”的隐式引用转换

时间:2018-10-31 08:28:38

标签: c# ninject

我有三个界面:

internal interface IAmAnInterfaceOne
{
    int PropertyOne { get; set; }
}

internal interface IAmAnInterfaceTwo
{
    int PropertyTwo { get; set; }
}

internal interface IAmAnInterfaceCombiningOneAndTwo : IAmAnInterfaceOne, IAmAnInterfaceTwo
{
}

实施课程:

internal class Myimplementation : IAmAnInterfaceOne, IAmAnInterfaceTwo
{
    public int PropertyOne { get; set; }
    public int PropertyTwo { get; set; }
}

当我尝试将接口IAmAnInterfaceCombiningOneAndTwo绑定到Myimplementation时,出现错误:

  

没有从“类型”到“接口”的隐式引用转换

class AppModule : NinjectModule
{
    public override void Load()
    {
        Bind<IAmAnInterfaceCombiningOneAndTwo>().To<Myimplementation>().InSingletonScope();
    }
}

我想像这样在构造函数中使用它:

public class MyClass
{
    private readonly IAmAnInterfaceCombiningOneAndTwo _param;

    public MyClass(IAmAnInterfaceCombiningOneAndTwo param)
    {
        _param = param;
    }
}

如何正确绑定接口? 谢谢。

1 个答案:

答案 0 :(得分:1)

这不是Ninject错误。

Myimplementation

上面的代码无法编译。为什么?因为IAmAnInterfaceCombiningOneAndTwo未实现IAmAnInterfaceOne。它实现了IAmAnInterfaceTwoIAmAnInterfaceCombiningOneAndTwo

IAmAnInterfaceOne要求实现这两个,但是仅仅实现它们并不意味着实现者实现组合接口。从技术上讲,这是完全不同的界面。实际上,您可以向IAmAnInterfaceTwoMyimplementation都不包含的组合界面添加更多要求。

最简单的解决方案是更改internal class Myimplementation : IAmAnInterfaceCombiningOneAndTwo 以显式声明它实现了组合接口(或者,或者只是该接口-最终效果是相同的):

 alert('Deleting.. \n\ This action is irreversible!');