Вы пытались создать интерфейсный подход для регистрации функции Asyn c, как показано ниже:
public interface IStartupAction
{
Task ExecuteAsync(CancellationToken cancellationToken = default);
}
И метод регистрации задач запуска с контейнером DI:
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddStartupTask<T>(this IServiceCollection services)
where T : class, IStartupTask
=> services.AddTransient<IStartupAction, T>();
}
Наконец, мы добавляем метод расширения, который находит все зарегистрированные IStartupAction
при запуске приложения, запускает их по порядку и затем запускает IWebHost
:
public static class StartupTaskWebHostExtensions
{
public static async Task RunWithTasksAsync(this IWebHost webHost, CancellationToken cancellationToken = default)
{
// Load all tasks from DI
var startupTasks = webHost.Services.GetServices<IStartupAction>();
// Execute all the tasks
foreach (var startupTask in startupTasks)
{
await startupTask.ExecuteAsync(cancellationToken);
}
// Start the tasks as normal
await webHost.RunAsync(cancellationToken);
}
}
За подробными инструкциями вы можете обратиться к этому do c.
Надеюсь, это поможет.