Ken*_*nto 5 c# dependency-injection .net-core asp.net-core
是否有可能通过某种方式获取对 IServiceProvider 或可以解决依赖关系的某个类的引用来动态获取依赖关系?例如,在处理异常以UseExceptionHandler向客户端输出一些有意义的内容时,我还想做一些自定义日志记录以记录有关抛出的异常的一些内容。
例如,假设我在ASP.net Core 项目Configure的Startup类中的方法中有此代码:
app.UseExceptionHandler(
builder =>
{
builder.Run(
async context =>
{
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.ContentType = "text/html";
var error = context.Features.Get<IExceptionHandlerFeature>();
if (error != null)
{
// TODO Log Exception. Would like to do something like this:
// var logger = ServiceProvider.Resolve<ILogger>();
// logger.LogCritical("Unhandled Error :"error.Error.ToString());
await context.Response.WriteAsync($"<h1>Error: {error.Error.Message}</h1>").ConfigureAwait(false);
}
});
});
Run Code Online (Sandbox Code Playgroud)
当我没有传入 ILogger 的构造函数时,如何获取 ILogger 的实例?
您可以访问ServiceProvider在builder.ApplicationServices。从那里您选择 an 的实例,ILoggerFactory然后logger为您的异常处理程序创建。
app.UseExceptionHandler(
builder =>
{
builder.Run(
async context =>
{
...
var lf = builder.ApplicationServices.GetService<ILoggerFactory>();
var logger = lf.CreateLogger("myExceptionHandlerLogger");
logger.LogDebug("I am a debug message");
...
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1684 次 |
| 最近记录: |