简体   繁体   English

如何从appsettings.json中读取

[英]How to simply read from appsettings.json

I have appsettings.json 我有appsettings.json

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },

  "ConnectionString": "Server=...;Database=...;Trusted_Connection=True;"

}

and Database class 数据库

public class Database : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            => optionsBuilder.UseSqlServer(@"Server=...;Database=...;Trusted_Connection=True;");

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Material>().ToTable("vw_Material", schema: "query");
        }

        public virtual DbSet<Material> Material { get; set; }
    }

My question is, how to replace this line 我的问题是,如何更换这条线

optionsBuilder.UseSqlServer(@"Server=...;Database=...;Trusted_Connection=True;");

with value from appsettings ? 从appsettings的价值?

You can use DI for this purpose. 您可以将DI用于此目的。 To do that you need to register Configuration in Startup.cs: 为此,您需要在Startup.cs中注册Configuration:

public void ConfigureServices(IServiceCollection services)
{
   ...    
   services.AddSingleton<IConfiguration>(Configuration);
}

Then you can inject it to Database constructor: 然后你可以将它注入到数据库构造函数中:

private readonly IConfiguration configuration;

public Database(IConfiguration config) 
{
    configuration = config;
}

and access it on configuring: 并在配置时访问它:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder.UseSqlServer(configuration.GetConnectionString("ConnectionString"));

Another option is to use Options pattern. 另一种选择是使用选项模式。 In this case you have to create a class with the property which you need: 在这种情况下,您必须使用所需的属性创建一个类:

public class ConnectionStringConfig
{
    public string ConnectionString { get; set; }
}

Register it on Startup: 在Startup上注册:

public void ConfigureServices(IServiceCollection services)
{
   ...    
   services.Configure<ConnectionStringConfig>(Configuration);
}

Inject to Database constructor: 注入数据库构造函数:

private readonly ConnectionStringConfig configuration;

public Database(IOptions<ConnectionStringConfig> config) 
{
    configuration = config.Value;
}

and access it on configuring: 并在配置时访问它:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder.UseSqlServer(configuration.ConnectionString);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM