我有三个界面:
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;
}
}
如何正确绑定接口? 谢谢。
答案 0 :(得分:1)
这不是Ninject错误。
Myimplementation
上面的代码无法编译。为什么?因为IAmAnInterfaceCombiningOneAndTwo
未实现IAmAnInterfaceOne
。它实现了IAmAnInterfaceTwo
和IAmAnInterfaceCombiningOneAndTwo
。
IAmAnInterfaceOne
要求实现这两个,但是仅仅实现它们并不意味着实现者实现组合接口。从技术上讲,这是完全不同的界面。实际上,您可以向IAmAnInterfaceTwo
和Myimplementation
都不包含的组合界面添加更多要求。
最简单的解决方案是更改internal class Myimplementation : IAmAnInterfaceCombiningOneAndTwo
以显式声明它实现了组合接口(或者,或者只是该接口-最终效果是相同的):
alert('Deleting.. \n\ This action is irreversible!');