如何从 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。
我是 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。