使用asp.net c#使用Ninject的困惑

时间:2018-06-05 08:24:01

标签: c# asp.net-mvc ninject

经过DI的大量努力,我终于可以找出基础知识,但只要我知道到目前为止,在控制器中实例化或使用NEW关键字意味着我们仍然不满足DI,我创造了一个小的项目指出我的问题:

public  interface IOperations
{
    int mul(int a, int b);
}

我的界面的实现:

 public class Operations:IOperations
{

  public  int mul(int a,int b){


        return a * b;

}
 }

在我的控制器中,我创建了我的构造函数:

private IOperations _ioperations;

    public HomeController(IOperations _ioperations)
    {


        this._ioperations = _ioperations;
    }

处理程序类:

  public readonly IOperations _ioperation;

    public Handeler(IOperations _ioperation)
    {


        this._ioperation = _ioperation;

    }

绑定类:

 public class Binding:NinjectModule
{

    public override void Load()
    {


        Bind<IOperations>().To<Operations>();


        }
    }
}

最后我的控制器:

 var kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());
        var _operation = kernel.Get<IOperations>();


        var handler = new Handeler(_operation);
        var result=handler._ioperation.mul(5, 2);

我已经从一个如何使用Ninject的网站上复制了这些,对我而言,看起来很奇怪,如果你看到我正在使用&#34; new&#34;关键词并实例化,据我所知,我们不应该这样做,否则说明DI的意义?有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

而不是在控制器中进行初始化,您应该使用Global.asax文件中的Application_Start()方法来注册绑定,因为我们不必为每个控制器执行相同的操作。有关完整的实施,请参阅此link