溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET中怎么注入 Configuration

發(fā)布時間:2021-07-24 13:41:52 來源:億速云 閱讀:204 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關ASP.NET中怎么注入 Configuration,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

 

咨詢區(qū)

LP13

我已經(jīng)通讀了 MSDN 上關于 Configuration 的相關內(nèi)容,文檔說可實現(xiàn)在 application 的任意位置訪問 Configuration .

下面是 Startup.cs 的模板代碼。


public class Startup
{
    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);

        if (env.IsEnvironment("Development"))
        {
            // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
            builder.AddApplicationInsightsSettings(developerMode: true);
        }

        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container
    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddApplicationInsightsTelemetry(Configuration);

        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseApplicationInsightsRequestTelemetry();

        app.UseApplicationInsightsExceptionTelemetry();

        app.UseMvc();
    }
}

 

我知道可以通過 DI 的方式將 Configuration 注入到 Controller,Service,Repository 等地方,但在真實項目中,會有很多類是在這三塊之外的。

請問我如何在這三大塊之外實現(xiàn) Configuration 的注入呢?換句話說:可以在任意類中實現(xiàn) Configuration 的注入... ????

 

回答區(qū)

Mayer Spitzer

在 .NET Core 中你可以將 IConfiguration 作為參數(shù)直接注入到 Class 的構造函數(shù)中,這本身就是可以的,如下代碼所示:


public class MyClass 
{
    private IConfiguration configuration;
    public MyClass(IConfiguration configuration)
    {
        ConnectionString = new configuration.GetValue<string>("ConnectionString");
    }
}

 

接下來要做的就是 new MyClass(),很顯然這樣做是不行的,因為你的構造函數(shù)還需要一個 IConfiguration 類型的參數(shù),所以你需要將 new MyClass() 塞入到 Asp.NET Core 的 DI 鏈中。

思路也很簡單。

  • 將 MyClass 注入到 ServiceCollection 容器中

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<MyClass>();
            services.AddControllers();
        }

 
  • 生成 MyClass 實例

在 MyClass 的調(diào)用方處通過 DI 生成實例,這里以 Controller 處為例,如下代碼所示:


public class MyController : ControllerBase
{
    private MyClass _myClass;

    public MyController(MyClass myClass)
    {
        _myClass = myClass;
    }
}

 

這樣是不是就完美的實現(xiàn)了在 MyClass 中使用 Configuration 了?

還有一種更簡單粗暴的做法,無需注入, 只需定義一個靜態(tài)的類,在 Startup 中將 IConfiguration 賦值給該靜態(tài)類保存即可,參考代碼如下:


public static class MyAppData
{
    public static IConfiguration Configuration;
}


public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    MyAppData.Configuration = configuration;
}

 

然后就可以在項目的各處訪問 MyAppData.Configuration 啦。

 

點評區(qū)

在 Asp.Net 時代,讀取配置文件真的是一點都不需要操心,一個 ConfigurationManager 走天下????????????,比如下面的代碼:

    private static string AppKey = ConfigurationManager.AppSettings["AppKey"];

關于ASP.NET中怎么注入 Configuration就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI