C# 依赖性AutoFac注入

C# 依赖性AutoFac注入,c#,autofac,C#,Autofac,我一直收到一个错误,说我在classService中创建的构造函数参数没有任何可用的构造函数 代码如下: Main.cs 我做错了什么 谢谢。抱歉,删除了我以前的答案,但保留了您的评论: 我经常遇到的错误是:在类型“WindowsService.Service”上找不到具有“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数,这些构造函数都不能用可用的服务和参数调用:无法解析的参数“Microsoft.Extensi

我一直收到一个错误,说我在class
Service
中创建的构造函数参数没有任何可用的构造函数

代码如下:

Main.cs

我做错了什么


谢谢。

抱歉,删除了我以前的答案,但保留了您的评论:

我经常遇到的错误是:在类型“WindowsService.Service”上找不到具有“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数,这些构造函数都不能用可用的服务和参数调用:无法解析的参数“Microsoft.Extensions.DependencyInjection.IServiceScopeFactory”构造函数“Void.ctor(Microsoft.Extensions.DependencyInjection.IServiceScopeFactory,Microsoft.Extensions.Configuration.IConfiguration)”

我有一个类似的项目,添加了IServiceScopeFactory,并设法重现了这个问题。我也相信找到了解决办法。所以请试试这个:

publicstaticvoidmain(字符串[]args)
{
ContainerBuilder ContainerBuilder=新的ContainerBuilder();
containerBuilder.RegisterType().AsSelf().InstancePerLifetimeScope();
RegisterAssemblyTypes(typeof(IServiceScopeFactory.Assembly).As();
RegisterAssemblyTypes(typeof(IConfiguration.Assembly).As();
//加上这些
var servicecolection=新servicecolection();
containerBuilder.Populate(serviceCollection);
containerBuilder.RegisterType().AsSelf();
....
}
我还需要安装一些软件包:

使用Microsoft.Extensions.DependencyInjection;
使用Autofac.Extensions.DependencyInjection;
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());
            });
        });
}
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;
    }
}