Как я могу получить IComponentContext AutoFac от HostBuilder - PullRequest
0 голосов
/ 04 января 2019

Я использую HostedService с AutoFac в качестве контейнера. Однако IServiceProvider .NET не может разрешать службы с использованием ключей в отличие от AutoFac.

//autofac
componentContext.ResolveKeyed<ISampleService>("debug");

//not available in .NET HostBuilder even if I used autofac as container
host.Services.GetService<ISampleService>();

Я попытался получить IComponentContext, но он возвращает ноль

host.Services.GetService<IComponentContext>();

Так я зарегистрировал услуги.

 var builder = new HostBuilder()
   .UseServiceProviderFactory(new AutofacServiceProviderFactory())
   .ConfigureContainer<ContainerBuilder>((context, builder) =>
   {
      builder.RegisterType<FakeDatabase>().Named<IDatabase>("debug");
      builder.RegisterType<HostedService>().Named<IHostedService>("debug");
      builder.RegisterType<ActualDatabase>().As<IDatabase>();
      builder.RegisterType<HostedService>().As<IHostedService>();
   });

1010 * ТИА *

1 Ответ

0 голосов
/ 05 января 2019

Попробуйте разрешить ILifetimeScope - это даст вам область Autofac, из которой вы сможете затем разрешить ключевые вещи. Помните, что это местоположение службы, а не DI, но оно будет работать.

...