我需要使用内置的Ioc容器在.net core 2.1应用程序中注册两个DbContext
类。第二个上下文的连接细节存储在第一个上下文的数据库中,因此注册看起来像
new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services
.AddDbContext<Context1>()
.AddDbContext<Context2>( /* Connection string from context1 here */ )
.AddHostedService<MyHostedService>();
});
我有没有办法注册Context1
,获取值,然后用它来注册Context2
?
使用一个重载,它将允许您访问服务提供商
new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services
.AddDbContext<Context1>()
.AddDbContext<Context2>((serviceProvider, options) => {
var context1 = serviceProvider.GetService<Context1>();
var connectionString = /* get Connection string from context1 here */
options.UseSqlServer(connectionString);
})
.AddHostedService<MyHostedService>();
});
参考AddDbContext<TContext>(IServiceCollection, Action<IServiceProvider,DbContextOptionsBuilder>, ServiceLifetime, ServiceLifetime)