我不断收到错误消息,说我在类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;
}
}
我在做什么错了?
谢谢。
答案 0 :(得分:0)
对不起,删除了我之前的答案,但保留您的评论:
我一直得到的错误是:不能使用可用的服务和参数调用类型为“ WindowsService.Service”的“ Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数:无法解析参数“ Microsoft” .Extensions.DependencyInjection.IServiceScopeFactory serviceScopeFactory'的构造函数'Void .ctor(Microsoft.Extensions.DependencyInjection.IServiceScopeFactory,Microsoft.Extensions.Configuration.IConfiguration)'
我有一个类似的项目,并添加了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;