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