C# Autofac未找到具有';Autofac.Core.Activators.Reflection.DefaultConstructorFinder';

C# Autofac未找到具有';Autofac.Core.Activators.Reflection.DefaultConstructorFinder';,c#,dependency-injection,inversion-of-control,autofac,ioc-container,C#,Dependency Injection,Inversion Of Control,Autofac,Ioc Container,在类型“LMS.Services.Security.EncryptionService”上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数中,没有一个可以使用可用的服务和参数调用: 无法解析构造函数“Void.ctor(LMS.Models.SecuritySettings)”的参数“LMS.Models.SecuritySettings SecuritySettings” 下面是代码文件 服务等级 pu

在类型“LMS.Services.Security.EncryptionService”上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数中,没有一个可以使用可用的服务和参数调用: 无法解析构造函数“Void.ctor(LMS.Models.SecuritySettings)”的参数“LMS.Models.SecuritySettings SecuritySettings”

下面是代码文件

服务等级

public class EncryptionService : IEncryptionService
{
    private readonly SecuritySettings _securitySettings;
    public EncryptionService(SecuritySettings securitySettings)
    {
        this._securitySettings = securitySettings;
    }
}
引导程序

private static void SetAutofacContainer()
{
    var builder = new ContainerBuilder();
    builder.RegisterControllers(Assembly.GetExecutingAssembly());
    builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerRequest();
    builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerRequest();

    builder.RegisterAssemblyTypes(typeof(CourseRepository).Assembly)
           .Where(t => t.Name.EndsWith("Repository"))
           .AsImplementedInterfaces()
           .InstancePerRequest();

    builder.RegisterAssemblyTypes(typeof(CourseService).Assembly)
           .Where(t => t.Name.EndsWith("Service"))
           .AsImplementedInterfaces()
           .InstancePerRequest();

    builder.RegisterFilterProvider();
    var container = builder.Build();
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
当Autofac尝试解析
EncryptionService
时,它尝试解析
SecuritySettings
服务,但Autofac不知道这样的注册

要解决此错误,您应该注册一个
SecuritySettings
实现

例如:

builder.RegisterType<SecuritySettings>()
       .As<SecuritySettings>(); 
builder.RegisterType()
.As();

您还可以通过添加
AnyConcreteTypeNotAlreadyRegisteredSource
(请参阅):-


我将此方案与一套应用程序结合使用,并且几乎从中删除了显式注册,但您似乎已经走上了显式注册的道路(样板文件:p)注册我建议谷歌搜索
AnyConcreteTypeNotAlreadyRegisteredSource
,看看更广泛的方案是否更适合您的需求。

就我而言,我还没有注册上下文。我注册了上下文,它对我有效

builder.RegisterType<JComDbEntities>().AsSelf().As<DbContext>().InstancePerLifetimeScope();
builder.RegisterType().AsSelf().As().InstancePerLifetimeScope();
var builder = new ContainerBuilder();
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
builder.RegisterType<JComDbEntities>().AsSelf().As<DbContext>().InstancePerLifetimeScope();