混淆使用 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 以获得完整的实施。
经过大量的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 以获得完整的实施。