Возможно ли получить зависимость на лету, как-то получить ссылку на IServiceProvider или какой-либо класс, который может разрешать зависимости? Например, при обработке исключения с UseExceptionHandler
для вывода чего-либо значимого для клиента, я также хотел бы сделать некоторые пользовательские протоколирования, чтобы отметить некоторые сведения об исключении, которое было выбрано.Инъекция зависимостей на лету в ASP.net Core
Например, предположим, что у меня есть этот код в методе Configure
в Startup
классе моего проекта ASP.net Core:
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);
}
});
});
Как я могу получить экземпляр ILogger, когда у меня нет конструктор, который пройдет в ILogger?
Какая структура DI вы используете? –
Я использую встроенный каркас DI для asp.net. – Kento