Autofac没有使用'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'找到的构造函数

pbh*_*dra 15 c# dependency-injection ioc-container inversion-of-control autofac

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

这是代码文件

服务类

public class EncryptionService : IEncryptionService
{
    private readonly SecuritySettings _securitySettings;
    public EncryptionService(SecuritySettings securitySettings)
    {
        this._securitySettings = securitySettings;
    }
}
Run Code Online (Sandbox Code Playgroud)

引导程序

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));
}
Run Code Online (Sandbox Code Playgroud)

它早先工作了.但是当我介绍EncryptionService实现时,我收到了上述错误.以下是其他工作代码实现

public class CourseService : ICourseService
{
    #region Fields

    private readonly IRepository<Course> _courseRepository;
    private readonly IUnitOfWork _unitOfWork;

    #endregion

    #region ctor

    public CourseService(IRepository<Course> courseRepository, IUnitOfWork unitOfWork)
    {
        _courseRepository = courseRepository;
        _unitOfWork = unitOfWork;
    }
    #endregion
}
Run Code Online (Sandbox Code Playgroud)

Cyr*_*and 16

Autofac尝试解决EncryptionService它时尝试解析SecuritySettings服务但Autofac不知道这样的注册.

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

例如 :

builder.RegisterType<SecuritySettings>()
       .As<SecuritySettings>(); 
Run Code Online (Sandbox Code Playgroud)