ASP.NET 核心依赖注入
ASP.NET Core Dependency Injection
在我的 asp.net 核心解决方案中,我有 2 个项目:asp.net 应用程序和带有包含模式存储库的模型层的库。
我请应用中的DI实现我的接口
services.AddTransient<IRepositrory, Repository>();
但是!存储库构造函数有参数
public Repository(string connectionString)
{
_appDBContext = new AppDBContext(connectionString);
}
如何正确配置 DI 以使用来自 appsettings.json
(asp.net 应用程序)的特定字符串创建存储库?
存在接受实现工厂的重载
services.AddTransient<IRepository>(isp => new Repository(conn));
您可以使用
获取连接字符串
Configuration.GetConnectionString("DefaultConnection")
你也可以使用AddInstance
方法:
var connectionString=Configuration.GetConnectionString("DefaultConnection");
services.AddInstance<IRepository>(new Repository(connectionString));
但我同意@MikeSW 他在上面的评论中所说的话。您应该注册 DbContext
并将其用作存储库构造函数中的参数:
services.AddDbContext<AppDBContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
你的构造函数将是:
public Repository(AppDBContext context)
{
_appDBContext = context;
}
您应该将服务放在 Startup.cs
的 ConfigureServices 方法中
public Startup()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
public IConfiguration Configuration { get; set; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<MyDbContext>(
options => options.UseSqlServer(Configuration["database:connection"]));
}
其中 appsettings.json:
{
"database": {
"connection": "Data Source=(localdb)\mssqllocaldb;Initial Catalog=MyDb"
}
}
services.AddTransient<IRepository>(isp => new Repository(connection));
使用这个来接受一个实现工厂并检索连接字符串使用这个:-
Configuration.GetConnectionString("DefaultConnection")
在我的 asp.net 核心解决方案中,我有 2 个项目:asp.net 应用程序和带有包含模式存储库的模型层的库。
我请应用中的DI实现我的接口
services.AddTransient<IRepositrory, Repository>();
但是!存储库构造函数有参数
public Repository(string connectionString)
{
_appDBContext = new AppDBContext(connectionString);
}
如何正确配置 DI 以使用来自 appsettings.json
(asp.net 应用程序)的特定字符串创建存储库?
存在接受实现工厂的重载
services.AddTransient<IRepository>(isp => new Repository(conn));
您可以使用
获取连接字符串Configuration.GetConnectionString("DefaultConnection")
你也可以使用AddInstance
方法:
var connectionString=Configuration.GetConnectionString("DefaultConnection");
services.AddInstance<IRepository>(new Repository(connectionString));
但我同意@MikeSW 他在上面的评论中所说的话。您应该注册 DbContext
并将其用作存储库构造函数中的参数:
services.AddDbContext<AppDBContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
你的构造函数将是:
public Repository(AppDBContext context)
{
_appDBContext = context;
}
您应该将服务放在 Startup.cs
的 ConfigureServices 方法中 public Startup()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
public IConfiguration Configuration { get; set; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<MyDbContext>(
options => options.UseSqlServer(Configuration["database:connection"]));
}
其中 appsettings.json:
{
"database": {
"connection": "Data Source=(localdb)\mssqllocaldb;Initial Catalog=MyDb"
}
}
services.AddTransient<IRepository>(isp => new Repository(connection));
使用这个来接受一个实现工厂并检索连接字符串使用这个:-
Configuration.GetConnectionString("DefaultConnection")