如何依赖注入在其构造函数中采用数据库设置的数据访问层?
How to Dependency inject Data Access Layer which takes database settings in it's constructor?
我编写了一个带有通用 CRUD 操作的简单数据访问接口,因此每个数据库存储库都必须实现此接口。现在我为一个数据库实现了这个接口,比如 SQL。 SQL 数据库的实现将数据库设置(连接字符串和其他详细信息)作为其构造函数中的参数。
见下面的代码:
namespace MyDataAccessInterfaces
{
public interface IDataAccess
{
read();
create();
update();
delete();
}
}
namespace MyDataAccessImplementations
{
public class SQLAccess
{
SQLAccess(Settings settings){
//do something to get DB context
}
//some properties here
read(){//some code
}
create(){//some code
}
update(){//some code
}
delete(){//some code
}
}
}
现在我想将其依赖注入到服务控制器中。我在这里查看构造函数依赖注入。如果我如下所示在控制器构造函数中将 SQL 实现作为依赖项传递并在启动 class->ConfigureServie 方法中添加它,如何传递它的设置?
public class HomeController : APIController
{
private readonly IDataAccess _dataAccess;
public HomeController(IDataAccess dataAccess)
{
_dataAccess= dataAccess;
}
public IActionResult Index()
{
//do something and set result
return Ok(result);
}
}
下面是我在 startup.cs class
中的 ConfigureService 方法
public void ConfigureServices(IServiceCollection services)
{
// Add application services.
services.AddSingleton<IDataAccess, SQLAccess>();
}
问题是,如何在 API 的配置服务方法中传递构造函数参数和 属性 值?
public void ConfigureServices(IServiceCollection services)
{
// Add application services.
services.AddSingleton<IDataAccess, SQLAccess>(opt=> { new SQLAccess(new
Settings(){
//Set Settings object properties here
});
});
}
我编写了一个带有通用 CRUD 操作的简单数据访问接口,因此每个数据库存储库都必须实现此接口。现在我为一个数据库实现了这个接口,比如 SQL。 SQL 数据库的实现将数据库设置(连接字符串和其他详细信息)作为其构造函数中的参数。
见下面的代码:
namespace MyDataAccessInterfaces
{
public interface IDataAccess
{
read();
create();
update();
delete();
}
}
namespace MyDataAccessImplementations
{
public class SQLAccess
{
SQLAccess(Settings settings){
//do something to get DB context
}
//some properties here
read(){//some code
}
create(){//some code
}
update(){//some code
}
delete(){//some code
}
}
}
现在我想将其依赖注入到服务控制器中。我在这里查看构造函数依赖注入。如果我如下所示在控制器构造函数中将 SQL 实现作为依赖项传递并在启动 class->ConfigureServie 方法中添加它,如何传递它的设置?
public class HomeController : APIController
{
private readonly IDataAccess _dataAccess;
public HomeController(IDataAccess dataAccess)
{
_dataAccess= dataAccess;
}
public IActionResult Index()
{
//do something and set result
return Ok(result);
}
}
下面是我在 startup.cs class
中的 ConfigureService 方法public void ConfigureServices(IServiceCollection services)
{
// Add application services.
services.AddSingleton<IDataAccess, SQLAccess>();
}
问题是,如何在 API 的配置服务方法中传递构造函数参数和 属性 值?
public void ConfigureServices(IServiceCollection services)
{
// Add application services.
services.AddSingleton<IDataAccess, SQLAccess>(opt=> { new SQLAccess(new
Settings(){
//Set Settings object properties here
});
});
}