Я пытаюсь использовать контейнер Autofac Di для построения зависимостей вместо .netcore по умолчанию IServiceCollection
. Мне нужно ввести IHostedService
. IServiceCollection
имеет метод AddHostedService
, но я не могу найти альтернативный метод в Autofac ContainerBuilder
.
Документация Autofac говорит, что вы можете заполнить ContainerBuilder
из IServiceCollection
, поэтому одним из решений было бы добавить IHostedService в IServiceCollection, а затем заполнить из него ContainerBuilder, но у меня есть несколько AutofacModule, некоторые из которых регистрируют друг друга, и каждый из них несет ответственность для их услуг и для внедрения какой-либо службы из ChildModule непосредственно в автозагрузке не представляется правильным.
public class ParentModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterModule(new ChildModule());
}
}
public class ChildModule : Module
{
protected override void Load(ContainerBuilder builder)
{
//TODO Add hosted service here.
}
}
public class Startup
{
...
...
public IServiceProvider ConfigureServices(IServiceCollection services)
{
var container = new ContainerBuilder();
container.RegisterModule(new ParentModule());
return new AutofacServiceProvider(container.Build());
}
...
...
}
В конце концов я хочу упаковать ParentModule в пакет и загрузить его в собственный NugetServer, чтобы я мог просто добавить ParentModule, где бы он мне ни понадобился, не забывая добавлять некоторые сервисы в IServiceCollection.
Мои модули очень сложны и имеют многоуровневую глубину, поэтому простой метод расширения для IServiceCollection для добавления дополнительных зависимостей невозможен.