繁体   English   中英

构造函数的依赖注入参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM