Вам необходимо использовать этот пакет:
Autofac.Extensions.DependencyInjection
В вашем файле program.cs просто используйте следующие строки кода:
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureServices(services => services.AddAutofac());
}
В вашем файле startup.cs создайте метод с именем
public void ConfigureContainer(ContainerBuilder builder)
{
}
и используйте «builder» для регистрации того, что вы хотите.Autofac сам найдет этот метод.
Вам больше не нужно вызывать builder.Build()
.
После замечаний, чтобы выполнить рекуррентный код с введенными значениями, вам нужнодобавить :
public void ConfigureServices(IServiceCollection services)
{
...
services.AddHostedService<MyHostedService>();
...
}
public class MyHostedService : IHostedService
{
private Timer _timer;
private IInjectedService _myInjectedService;
public MyHostedService(IServiceProvider services)
{
var scope = services.CreateScope();
_myInjectedService = scope.ServiceProvider.GetRequiredService<IInjectedService>();
}
public Task StartAsync(CancellationToken cancellationToken)
{
_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(5));
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
private async void DoWork(object state)
{
_myInjectedService.DoStuff();
}
}