You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在另一个控制器中实例化依赖IConfiguration的ShippingRequestController

解决控制器实例化时的IConfiguration参数问题

首先明确:不要手动实例化控制器。ASP.NET Core依赖注入(DI)框架会负责控制器的创建和生命周期管理,手动new控制器会绕过DI机制,不仅违背设计原则,还可能导致后续依赖变更时出现维护问题。

正确的处理方式

把控制器里的业务逻辑抽成独立的服务类,避免控制器之间直接依赖:

  1. 创建一个服务类封装共享逻辑
public class ShippingRequestService
{
    private readonly IConfiguration _configuration;

    public ShippingRequestService(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    // 把原来ShippingRequestController里用到连接字符串的方法移到这里
    public string GetShipRequestConnectionString()
    {
        return _configuration.GetConnectionString("ShipRequestDBString");
    }
}
  1. 在Program.cs中注册这个服务
builder.Services.AddScoped<ShippingRequestService>();
  1. 在需要的控制器中注入这个服务,而不是实例化另一个控制器
public class AnotherController : Controller
{
    private readonly ShippingRequestService _shippingService;

    public AnotherController(ShippingRequestService shippingService)
    {
        _shippingService = shippingService;
    }

    // 直接调用服务方法即可
    public IActionResult SomeAction()
    {
        var connString = _shippingService.GetShipRequestConnectionString();
        // 后续逻辑
        return Ok();
    }
}

不推荐的临时方案(仅应急用)

如果暂时不想重构代码,可在当前控制器中注入IConfiguration,再传递给手动实例化的ShippingRequestController:

public class AnotherController : Controller
{
    private readonly IConfiguration _configuration;

    public AnotherController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public IActionResult SomeAction()
    {
        // 不推荐这种写法,仅临时使用
        var mySRControl = new ShippingRequestController(_configuration);
        // 后续逻辑
        return Ok();
    }
}

内容的提问来源于stack exchange,提问作者Matt R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:19:59