在 .Net 5 及更早版本中,我們曾經有一個 startup.cs 檔案,里面有 ConfigureServices 和 Configure Method。在下面的函式中,我添加了 ILoggerManager 作為函式的引數,然后將其傳遞給 app.ConfigureExceptionHandler 函式。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerManager logger)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.ConfigureExceptionHandler(logger);
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
但是 .Net 6 沒有 startup.cs 檔案,只有 program.cs 檔案。program.cs 中沒有 ConfigureService 或 Configure 方法,所有方法或函式都以程序方式呼叫,沒有任何類或方法宣告,如下所示:
var builder = WebApplication.CreateBuilder(args);
var logger = new LoggerManager();
builder.Services.AddControllers();
builder.Services.AddDbContext<DocumentDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DocumentStore")));
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSingleton<ILoggerManager, LoggerManager>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.ConfigureExceptionHandler(<how to pass dependency here>);
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
我的問題是如何將依賴項傳遞給 .Net 6 中的 app.ConfigureExceptionHandler() 函式。我找不到關于它的任何檔案。
uj5u.com熱心網友回復:
由于您正在創建LoggerManager自己 ( var logger = new LoggerManager();),您可以簡單地執行以下操作:
app.ConfigureExceptionHandler(logger);
如果您更喜歡使用 DI,您可以使用IServiceProvider通過WebApplication.Services屬性公開:
var resolvedLoggerManager = app.Services.GetRequiredService<ILoggerManager>();
app.ConfigureExceptionHandler(resolvedLoggerManager);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/349450.html
標籤:C# asp.net asp.net核心 asp.net-core-webapi .net-6.0
上一篇:比較2個pandas.DataFrames,獲取差異并僅列印與第一個更改的行
下一篇:EF不會從多對多關系加載資料
