簡體   English   中英

訪問靜態類上的配置/設置 - Asp Core

[英]Access Configuration/Settings on static class - Asp Core

我有3個解決方案。 Project.Web,Project.Core(Business)和Project.Layer(Models)。

在Project.Core中,我有一個靜態文件,我可以像這樣調用Business.GetAllData(); 來自Project.Web.Controller。

這會調用DAL / EF文件並獲取數據( BusinessDal.GetData() )。

        using (DBContext db = new DBContext())
        {
            return db.GetAllData().ToPOCO();
        }

在我的配置/ DbContext.cs上,我有這個:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    #if DEBUG
        optionsBuilder.UseSqlServer(@"connstring");
    #else
        optionsBuilder.UseSqlServer(@"connstring");
    #endif
    // How do I access configuration here? Configuration["ConnectionString"]
}

我想要做的是從我的appsettings.json讀取設置。 我確保在startup.cs上正確加載了設置

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();
}

但現在是什么?... MS Document顯示了如何從控制器讀取它。 這部分工作正常,我可以在控制器上讀取我的設置。 但是,我不知道如何將它傳遞給另一個項目,仍然可以從靜態類中調用它。

我覺得這可能比必要的工作更多,但我很匆忙所以這就是我到目前為止所做的事情。 隨時可以發布其他解決方案。

我創建了另一個靜態類AppSettingsProvider.cs

public static class AppSettingsProvider
{
    public static string DbConnectionString { get; set; }
    public static bool IsDevelopment { get; set; }
}

然后我將它們設置在我的Startup.cs上

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    BuildAppSettingsProvider();
}
private void BuildAppSettingsProvider()
{
    AppSettingsProvider.ConnectionString = Configuration.GetConnectionString("DBContext");
    AppSettingsProvider.IsDevelopment = Configuration["IsDev"];
}

然后我可以從我的DbContext.cs中調用它

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    string connString = AppSettingsProvider.ConnectionString;
}

PS我嘗試將依賴注入方法引入DbContext(通過使用構造函數)。 但是,這對我不起作用,因為我從靜態文件調用DbContext,所以DbContextOptions丟失了。

基於與上述相同原理的略短版本:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    StaticConfig = configuration;
}
public static IConfiguration StaticConfig { get; private set; }

要在另一個static類中使用:

string connString = Startup.StaticConfig.GetConnectionString("DefaultConnection");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM