您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關ASP.NET中怎么注入 Configuration,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
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 的注入... ????
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 鏈中。
思路也很簡單。
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<MyClass>();
services.AddControllers();
}
在 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
啦。
在 Asp.Net 時代,讀取配置文件真的是一點都不需要操心,一個 ConfigurationManager 走天下????????????,比如下面的代碼:
private static string AppKey = ConfigurationManager.AppSettings["AppKey"];
關于ASP.NET中怎么注入 Configuration就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。