[英]Dependency Injection pass parameters by constructor
我们有一个需要使用DI和ASP Core的项目。 我对此很陌生,有一个问题。
我有一个名为HomeController的控制器,如下所示:
public class HomeController : BaseController {
private IOrderService _orderService;
public HomeController(IOrderService orderService) {
_orderService = orderService;
}
public IActionResult Index() {
var orders = _orderService.GetMyOrders();
return View(orders);
}
}
代码如下:
public class OrderService : BaseService, IOrderService {
public OrderService(IDataContextService dataContextService) {
_dataContextService = dataContextService;
}
public List<Orders> GetMyOrders() {
var orders = // do my code here which works fine!;
// here i need some code do check orders for delivery so
DeliveryService deliveryService = new DeliveryService(_dataContextService);
// update my orders and return these orders
return orders;
}
}
public class DeliveryService : BaseService, IDeliveryService {
public DeliveryService(IDataContextService dataContextService) {
_dataContextService = dataContextService;
}
public void MyMethod() {
}
}
public class BaseService {
protected IDataContextService _dataContextService;
}
我几乎所有的服务都有一个诸如OrderService和DeliveryService之类的构造函数。 我的问题是,我是否必须每次都传递_dataContextService,还是在依赖模式中有解决方案?
如果我正确理解您的要求,那么您正在寻找IoC容器。 .NET Core内置了对依赖项注入的支持。 基本上,您只是指出请求接口时应提供哪种实现。 然后容器将为您实例化类型。 参见例如https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/dependency-injection 。
希望能有所帮助
您应该按照自己的方式保存它,并且asp.net核心IoC会为您注入它,但是请确保为每个请求注入它,这将有助于使每个请求仅隐含一个上下文,并在请求被处理后进行处置。
您可以在Startup
类内的ConfigureServices
方法中注册上下文和服务,如下所示
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
// Add application services.
services.AddTransient<HomeController>();
services.AddTransient<IOrderService , OrderService >();
services.AddTransient<IDeliveryService, DeliveryService>();
services.AddScoped<IDataContextService , YourDataContextService >();
}
AddScoped
方法将为每个HTTP请求仅创建对象的一个实例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.