如何简单地从appsettings.json文件中读取数据

3

我有一个appsettings.json

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

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

}

数据库

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; }
    }

我的问题是,如何替换这行代码。
optionsBuilder.UseSqlServer(@"Server=...;Database=...;Trusted_Connection=True;");

从appsettings中获取值?
1个回答

5
你可以使用 DI 来实现此目的。为此,需要在 Startup.cs 中注册 Configuration:
public void ConfigureServices(IServiceCollection services)
{
   ...    
   services.AddSingleton<IConfiguration>(Configuration);
}

然后您可以将其注入到数据库构造函数中:
private readonly IConfiguration configuration;

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

并且可以在配置时进行访问:

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

另一种选择是使用Options模式。在这种情况下,您需要创建一个包含所需属性的类:

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

注册为开机启动项:

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

注入到数据库构造函数:

private readonly ConnectionStringConfig configuration;

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

并在配置时访问它:

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

谢谢,我尝试了第一个解决方案,它有效了。我只需要使用configuration["ConnectionString"]而不是configuration.GetConnectionString("ConnectionString")就可以让它工作了。 - Muflix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接