Ninguno de los constructores encontrados con 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' en el tipo 'LMS.Services.Security.EncryptionService' se puede invocar con los servicios y parámetros disponibles: No se puede resolver el parámetro 'LMS.Models.SecuritySettings securitySettings' de constructor 'Void .ctor(LMS.Models.SecuritySettings)'
Aquí están los archivos de código.
Clase de servicio
public class EncryptionService : IEncryptionService { private readonly SecuritySettings _securitySettings; public EncryptionService(SecuritySettings securitySettings) { this._securitySettings = securitySettings; } }Arrancador
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)); } Estaba funcionando antes. Pero cuando presenté la implementación de EncryptionService , recibo el error anterior. Aquí está la otra implementación del código de trabajo de la siguiente manera
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 }Cuando Autofac intenta resolver EncryptionService , intenta resolver un servicio de configuración de SecuritySettings , pero Autofac no tiene conocimiento de dicho registro.
Para resolver este error, debe registrar una implementación de SecuritySettings .
Por ejemplo :
builder.RegisterType<SecuritySettings>() .As<SecuritySettings>();en mi caso no he registrado el contexto. Registré el contexto y funcionó para mí.
builder.RegisterType<JComDbEntities>().AsSelf().As<DbContext>().InstancePerLifetimeScope();También puede ajustar el comportamiento de Autofac para que funcione como lo anticipó originalmente [y alinearlo con los valores predeterminados de algunos otros contenedores] agregando AnyConcreteTypeNotAlreadyRegisteredSource (consulte los documentos para Fuentes ):
var builder = new ContainerBuilder(); builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource()); Utilicé este esquema junto con fábricas de delegados y tipos de relación implícitos para eliminar prácticamente el registro explícito de un conjunto de aplicaciones, pero como parece que se ha ido por el camino del registro explícito (calendario: P), le recomiendo buscar en Google AnyConcreteTypeNotAlreadyRegisteredSource para ver si un esquema más amplio puede ajustarse mejor a lo que está buscando.