Я ищу информацию о том, как динамически внедрить службы в метод класса с помощью внедрения зависимостей в ASP.Net Core.
Например, в промежуточном программном обеспечении ASP вы можете внедрить любое количество служб вметод Invoke
, в отличие от конструктора. В этой документации объясняется, как вы можете внедрить сервисы с областями действия в метод Middeware Invoke
:
public class CustomMiddleware
{
private readonly RequestDelegate _next;
public CustomMiddleware(RequestDelegate next)
{
_next = next;
}
// IMyScopedService is injected into Invoke
public async Task Invoke(HttpContext httpContext, IMyScopedService svc)
{
svc.MyProperty = 1000;
await _next(httpContext);
}
}
Я хотел бы повторить то же поведение в своем собственном коде, но не могу найти какой-либоДокументация объясняет, как этого добиться.В настоящее время я создаю область, используя IServiceProvider.CreateScope
и передаю полученный IServiceProvider
в качестве параметра моей функции, определенной ниже:
public async Task DoWork(IServiceProvider services, CancellationToken cancellationToken)
{
var logger = services.GetRequiredService<ILogger<RoomController>>();
logger.LogInformation("Starting Room Controller.");
while (!cancellationToken.IsCancellationRequested)
{
logger.LogInformation("Room still running");
Thread.Sleep(5000);
}
}
Я бы хотел, чтобы моя функция выглядела примерно так:
public async Task DoWork(CancellationToken cancellationToken, ILogger<RoomController> logger)
{
logger.LogInformation("Starting Room Controller.");
while (!cancellationToken.IsCancellationRequested)
{
logger.LogInformation("Room still running");
Thread.Sleep(5000);
}
}
Есть идеи?