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

.NET Core 6.0 Minimal API如何向仓储传递连接字符串?

解决方案:修复仓储的依赖注入问题

问题根源是手动实例化仓储类绕过了.NET Core的依赖注入容器,导致IConfiguration无法自动注入到仓储中。以下是具体修复步骤:

1. 规范仓储接口定义(可选但推荐)

确保仓储接口包含所有业务需要的方法,命名更具语义性(原IMovie建议改为IMovieRepository):

namespace MinimalJwt.Repositories
{
    public interface IMovieRepository
    {
        Movie CreateNewMovie(Movie movie);
        IList<Movie> GetMovies();
        // 其他仓储方法按需添加
    }
}

若已使用IMovie接口,只需确保它包含对应方法即可,无需强制改名。

2. 修改MovieService,通过构造函数注入仓储接口

移除手动实例化的MovieRepository,改为注入仓储接口,让DI容器管理依赖:

namespace MinimalJwt.Services
{
    public class MovieService : IMovieService
    {
        private readonly IMovieRepository _movieRepository;

        // 构造函数注入仓储接口
        public MovieService(IMovieRepository movieRepository)
        {
            _movieRepository = movieRepository;
        }

        public Movie Create(Movie movie)
        {
            return _movieRepository.CreateNewMovie(movie);
        }
    }
}

3. 在Program.cs中注册服务与仓储到DI容器

在builder.Build()之前,添加服务注册代码,让DI容器知晓接口与实现类的映射:

var builder = WebApplication.CreateBuilder(args);

// 注册服务层和仓储层(Scoped生命周期适配Web请求场景)
builder.Services.AddScoped<IMovieService, MovieService>();
builder.Services.AddScoped<IMovieRepository, MovieRepository>();

// 原有配置(如JWT认证等)保留
// ...

var app = builder.Build();

// 端点定义保留
// ...

生命周期说明:AddScoped表示每个HTTP请求创建一个实例,是Web项目的常规选择;若有特殊需求,可替换为AddTransient(每次请求创建新实例)或AddSingleton(全局单例)。

4. 优化仓储类的字段访问修饰符(可选)

将仓储类的_configuration字段改为private readonly,符合C#编码规范:

namespace MinimalJwt.Repositories
{
    public class MovieRepository : IMovieRepository
    {
        private readonly IConfiguration _configuration;
        
        public MovieRepository(IConfiguration config)
        {
            _configuration = config;
        }

        // 原有GetMovies方法不变
        public IList<Movie> GetMovies()
        {
            // ... 原代码可正常读取连接字符串
        }

        // 实现CreateNewMovie方法
        public Movie CreateNewMovie(Movie movie)
        {
            // 使用_configuration.GetConnectionString("MoviesContextDb")获取连接字符串,编写ADO.NET创建逻辑
        }
    }
}

修复原理

.NET Core的依赖注入容器会自动处理依赖链:当API端点请求IMovieService时,容器会创建MovieService实例,同时自动创建依赖的MovieRepository实例;而MovieRepository需要的IConfiguration,容器已默认从appsettings.json加载并注册,因此会自动注入到仓储中,最终解决连接字符串无法读取的问题。

内容的提问来源于stack exchange,提问作者paula.em.lafon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:41:19