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

如何将连接字符串注入外部程序集(项目)的控制器?

解决外部项目控制器注入主Web API连接字符串的问题

这个场景我碰到过好几次,核心就是要让主项目的依赖注入(DI)容器能“看见”外部项目里的控制器,同时把主项目的连接字符串注册成可注入的服务。下面是具体的实现步骤:

第一步:确保主项目的连接字符串配置正确

先检查你的主Web API项目的appsettings.json,确保连接字符串已经配置好,比如:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=.;Database=YourDbName;Trusted_Connection=True;TrustServerCertificate=True"
  }
}

第二步:在主项目中注册外部控制器和连接字符串

.NET 6+(Program.cs)

在主项目的Program.cs里,需要做两件事:一是让DI容器发现外部项目的控制器,二是把连接字符串注册为可注入的服务:

var builder = WebApplication.CreateBuilder(args);

// 关键:将外部项目的程序集添加到控制器发现列表中
builder.Services.AddControllers()
    .AddApplicationPart(typeof(MyExternalController).Assembly);

// 提取连接字符串并注册为单例服务
var defaultConnStr = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddSingleton(defaultConnStr);

var app = builder.Build();

// 常规中间件配置
app.UseHttpsRedirection();
app.UseAuthorization();

app.MapControllers();

app.Run();

.NET Framework/老版本.NET(Startup.cs)

如果是用Startup.cs的项目,配置逻辑类似,放在ConfigureServices方法里:

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers()
            .AddApplicationPart(typeof(MyExternalController).Assembly);

        var connStr = Configuration.GetConnectionString("DefaultConnection");
        services.AddSingleton(connStr);
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 中间件配置...
        app.UseRouting();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

第三步:验证外部控制器的注入逻辑

你写的外部控制器代码是没问题的,只要构造函数是public的,DI容器就会自动把注册好的连接字符串注入进去:

public class MyExternalController : Controller 
{ 
    private string _connStr; 
    public MyExternalController(string connStr) 
    { 
        _connStr = connStr; 
    } 
    // 你的Action方法... 
}

可能踩的坑

  • 要确保主Web API项目已经引用了外部控制器所在的类库项目,不然程序集找不到。
  • 如果外部控制器所在的项目有自己的DI配置,别和主项目的配置冲突,优先以主项目的配置为准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:03:59