我将ASP.NET多层项目迁移到ASP.NET Core。我在我的旧项目中使用了Ninject for DI,因此在我的BLL中可以这样称呼它。
public void IamMethodInBll()
{
...
//i could call ninject like this.
var prodCalcManager = Const.NinjectKernel.Get<IProdCalcService>();
prodSurr.CalculatedPrice = prodCalcManager.GetMyMethod()
..
}
现在,我当然使用ASP Net Core的DI系统。但是,如何在业务层中为ASP.NET Core调用服务定位器?我需要您的样品和建议。
在Startup.cs中
services.AddScoped<IProdCalcService,ProdCalcManager>();
在BLL中
public void IamMethodInBll()
{
...
//What's the proper way to call another service in BLL
//How can i get the service provider in BLL
var prodCalcManager = _serviceProvider.GetService<IProdCalcService>();
prodSurr.CalculatedPrice = prodCalcManager.GetMyMethod()
..
}
正确的答案是:不要使用ServiceLocator。使用services.AddScoped<T>
类似的方式注册服务,然后将其添加到要在其中使用的类的构造函数。
像这样:
services.AddScoped<IProdCalcService,ProdCalcManager>();
然后您的课程如下所示:
public class MyClass()
{
private IProdCalcService calcService;
public MyClass(IProdCalcService calcService)
{
this.calcService = calcService;
}
public void IamMethodInBll()
{
//...
prodSurr.CalculatedPrice = calcService.GetMyMethod();
//...
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句