在ConfigureServices中根据环境获取连接字符串
根据环境自动切换EF Core连接字符串
很简单,你只需要通过注入IWebHostEnvironment(.NET Core 3.0及以上版本使用这个接口,旧版本是IHostingEnvironment)来判断当前运行环境,然后动态选择对应的连接字符串即可。下面是具体实现步骤:
1. 在ConfigureServices中注入环境对象
修改你的ConfigureServices方法,添加IWebHostEnvironment作为参数——ASP.NET Core会自动帮你注入这个对象:
public void ConfigureServices(IServiceCollection services, IWebHostEnvironment env) { // 这里编写服务配置逻辑 }
2. 根据环境选择连接字符串
在方法内部,通过环境对象的判断方法,选择对应的连接字符串名称,再从配置中取出实际的连接字符串:
public void ConfigureServices(IServiceCollection services, IWebHostEnvironment env) { // 按环境匹配对应的连接字符串名称 string connStringName = env.IsDevelopment() ? "Default" // 本地开发环境用Default : env.IsEnvironment("Container") ? "Container" // Docker开发环境用Container(需要你设置对应的环境变量) : "Production"; // 默认用生产环境的连接字符串 // 从配置中获取实际的连接字符串 string connectionString = Configuration.GetConnectionString(connStringName); // 配置DbContext时传入选中的连接字符串 services.AddDbContext<ApplicationDbContext>(options => { options.UseSqlServer(connectionString); }); // 其他服务配置代码... }
3. 确保环境变量正确设置
要让这个逻辑生效,你需要确保不同环境下的ASPNETCORE_ENVIRONMENT环境变量设置正确:
- 本地开发:可以在
launchSettings.json里把ASPNETCORE_ENVIRONMENT设为Development - Docker容器:启动容器时通过环境变量参数设置
ASPNETCORE_ENVIRONMENT=Container - 生产环境:设置
ASPNETCORE_ENVIRONMENT=Production
补充说明
- 如果你的Docker环境用的是默认的
Development环境名称,那可以直接合并到env.IsDevelopment()的判断里,不用单独写IsEnvironment - 最后兜底用
Production是为了避免意外环境下连接字符串为空,保证生产环境的安全性
内容的提问来源于stack exchange,提问作者Mike Hawkins
相关产品推荐
相关产品推荐

