混淆使用 Ninject 使用 asp.net c#

Confusion over using Ninject using asp.net c#

经过大量的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;
    }

处理程序class:

  public readonly IOperations _ioperation;

    public Handeler(IOperations _ioperation)
    {


        this._ioperation = _ioperation;

    }

绑定class:

 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,对我来说它看起来很奇怪,在我的控制器中如果你看到我正在使用 "new" 关键字并实例化它据我所知,我们不应该那样做,否则 DI 有什么意义?有人能解释一下吗?

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