.net核心通用主机构建器在后续上下文DI注册中使用来自一个上下文的连接字符串

时间:2018-11-22 01:15:59

标签: c# .net .net-core

我需要使用内置的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

1 个答案:

答案 0 :(得分:3)

使用过载之一,它将使您能够访问服务提供商

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)