Зависимость от AutoFac

#c# #autofac

#c# #autofac

Вопрос:

Я продолжаю получать сообщение об ошибке, в котором говорится, что для параметров конструктора, которые я создал в классе, нет доступных конструкторов Service .

Вот код:

Main.cs

 public static void Main(string[] args)
{
        ContainerBuilder containerBuilder = new ContainerBuilder();
        containerBuilder.RegisterType<Service>().AsSelf().InstancePerLifetimeScope();

        containerBuilder.RegisterAssemblyTypes(typeof(IServiceScopeFactory).Assembly).As<IServiceScopeFactory>();
        containerBuilder.RegisterAssemblyTypes(typeof(IConfiguration).Assembly).As<IConfiguration>();

        IContainer container = containerBuilder.Build();

        HostFactory.Run(configure =>
        {
            configure.Service<Service>(s =>
            {
                s.ConstructUsing(hostSettings => container.Resolve<Service>());
                s.WhenStarted(tc => tc.Start());
                s.WhenStopped(tc => tc.Stop());
            });
        });
}
  

Service.cs:

 public class Service
{
    private readonly IServiceScopeFactory _serviceScopeFactory;
    private readonly IConfiguration _configuration;

    public Service(IServiceScopeFactory serviceScopeFactory, IConfiguration configuration)
    {
        _serviceScopeFactory =   serviceScopeFactory ?? throw new ArgumentNullException(nameof(serviceScopeFactory));
        _configuration = configuration;
    }
}
  

Что я здесь делаю не так?

Спасибо.

Ответ №1:

Извините, удалил мой предыдущий ответ, но сохранил ваш комментарий:

Ошибка, которую я продолжаю получать: ни один из конструкторов не найден с помощью ‘Autofac.Core.Активаторы.Отражение.DefaultConstructorFinder’ on type’WindowsService.Сервис’ может быть вызван с доступными службами и параметрами: не удается разрешить параметр ‘Microsoft.Расширения.DependencyInjection.IServiceScopeFactory serviceScopeFactory’ конструктора ‘Void .ctor(Microsoft.Расширения.DependencyInjection.IServiceScopeFactory, Microsoft.Расширения.Конфигурация.Настройка значков)’

У меня был похожий проект, я добавил IServiceScopeFactory и сумел воспроизвести проблему. Я также считаю, что нашел решение для этого. Так что попробуйте это, пожалуйста:

     public static void Main(string[] args)
    {
        ContainerBuilder containerBuilder = new ContainerBuilder();
        containerBuilder.RegisterType<Service>().AsSelf().InstancePerLifetimeScope();
 containerBuilder.RegisterAssemblyTypes(typeof(IServiceScopeFactory).Assembly).As<IServiceScopeFactory>();
        containerBuilder.RegisterAssemblyTypes(typeof(IConfiguration).Assembly).As<IConfiguration>();

           // Add these
           var serviceCollection = new ServiceCollection();
           containerBuilder.Populate(serviceCollection);
           containerBuilder.RegisterType<Service>().AsSelf();

           ....
}
  

Мне также нужно было установить некоторые пакеты:

 using Microsoft.Extensions.DependencyInjection;
using Autofac.Extensions.DependencyInjection;