如何从 appsetting.json 获取 ConnectionString 值到核心 WebAPI 中的存储库

How to get ConnectionString Value from appsetting.json into Repository in Core WebAPI

我是 Net Core Web 的新手API,我正在开发没有 EF 的 Core Web API。我卡住了,因为我无法从 appsetting.json 获取连接字符串到我的存储库

我创建了 CommonRepository 的构造函数并使用 IConfiguration 获取连接字符串值

public CommonRepository(IConfiguration configuration)
    {
        _configuration = configuration;
    }
    private readonly IConfiguration _configuration;

但是在创建公共存储库的对象时出现错误

CommonRepository commonRepository =new CommonRepository();

There is no argument given that corresponds to the required formal parameter 'configuration' of 'CommonRepository.CommonRepository(IConfiguration)'

这通常是使用依赖注入完成的,应该在 startup.cs 文件中设置。因此:

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

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<IConfiguration>(Configuration);
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        ...
    }
}

ASP.Net 将自动从主机将配置传递给此 class。我们使用它来创建一个单例,它将配置注入所有使用 IConfiguration 作为参数的构造函数。解释 Here

您可以参考以下代码来创建和使用CommonRepository,然后获取连接字符串。

公共存储库:

public interface ICommonRepository
{
    string GetConnectionstring();
}

public class CommonRepository : ICommonRepository
{
    private readonly IConfiguration _configuration;
    public CommonRepository(IConfiguration configuration)
    {
        _configuration = configuration;
    }
    public string GetConnectionstring()
    {
        return _configuration.GetConnectionString("DefaultConnection");
    }
}

在Startup.ConfigureServices方法中注册上述仓库:

    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddScoped<ICommonRepository, CommonRepository>();
    }

控制器:

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;
    private readonly ICommonRepository _commonRepositoty;

    public HomeController(ILogger<HomeController> logger, ICommonRepository commonRepository)
    {
        _logger = logger;
        _commonRepositoty = commonRepository;
    }

    public IActionResult Index()
    {
        var str = _commonRepositoty.GetConnectionstring();
        return View();
    }

结果是这样的:

更多详细信息,请参阅Dependency injection in ASP.NET Core