#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;