指定类的ninject绑定

时间:2014-03-21 12:49:02

标签: ninject bind

如果我有接口interfaceA

public interface IInterfaceA
{
    void MethodA();
    void MethodB();

}

我有classA

class ClassA:IInterfaceA
{
    public void MethodA()
    {      
    }  
    public void MethodB()
    {
    }
}

我可以使用ninject的绑定,但是当我有一个叫做MethodC的方法时,我认为该方法应该只存在于classA中(仅适用于classA),不应该是在InterfaceA中定义,所以如何在调用时使用ninject' bind:

var a = _kernel.get<IInterfaceA>()

我应该将结果转换为ClassA吗? (这是一个糟糕的习惯吗?)还是有另一种解决方案

1 个答案:

答案 0 :(得分:1)

通常,当您需要接口分离但需要两个接口由同一对象实现时,这是必需的,因为它保存与两个接口相关的数据。如果不是这种情况,您可以完全分离接口 - 然后您应该这样做。 为简单起见,我将使用Singleton Scope,但您也可以使用任何其他范围。

改为创建两个接口:

public interface IInterfaceA {
{
     void MethodA();
}

public interface IInterfaceC {
     void MethodC();
}

public class SomeClass : IInterfaceA, IInterfaceC {
   ....
}


IBindingRoot.Bind<IInterfaceA, IInterfaceB>().To<SomeClass>()
    .InSingletonScope();


var instanceOfA = IResolutionRoot.Get<IInterfaceA>();
var instanceOfB = IResolutionRoot.Get<IInterfaceB>();

instanceOfA.Should().Be(instanceOfB);

这会回答你的问题吗?