在启动时获取单例服务实例

Eut*_*rpy 6 c# dependency-injection dbcontext entity-framework-core asp.net-core

我有以下情况:

启动.cs

services.AddSingleton<IConfigurationManager, ConfigurationManager>();
ConfigurationManager configurationManager = new ConfigurationManager();
services.AddDbContext<MyContext>(options => 
    options.UseSqlServer(configurationManager.DatabaseConnectionString));
Run Code Online (Sandbox Code Playgroud)

因此,为了创建我的上下文,我需要它configurationManager提供给我的连接字符串。但是,我仍然想保留ConfigurationManager即服务。

有没有一种方法可以在不显式实例化的情况下执行此操作,configurationManager或者是否可以像这样保留它?

pan*_*ohn 1

你也可以做类似的事情。我不熟悉您如何使用配置管理器来提供准确的答案。

基本上,您可以在 Program.cs 中进行预配置。

在这里构建您的配置。正如你所看到的,我正在路过IConfigurationBuilder

Program.cs

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(AddDbConfiguration)
        .UseStartup<Startup>();


private static void AddDbConfiguration(WebHostBuilderContext context, IConfigurationBuilder builder)
{
    var configuration = builder.Build(); // you could instantiate you Configuration manager here and append to the configuration.
    var connectionString = configuration.GetConnectionString("Database");
    builder.AddDemoDbProvider(options => options.UseSqlServer(connectionString));
}
Run Code Online (Sandbox Code Playgroud)

来源:https ://medium.com/@dneimke/custom-configuration-in-net-core-2-193ff6f02046