8

Nessuno dei costruttori trovati con 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' del tipo 'LMS.Services.Security.EncryptionService 'può essere richiamato con i servizi ei parametri disponibili: non può risolvere parametro 'LMS.Models.SecuritySettings IMPOSTAZIONIDISICUREZ' di costruttore '.ctor Void (LMS.Models.SecuritySettings)'Autofac Nessuno dei costruttori trovati con 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'

Ecco i file di codice

Classe di servizio

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

Bootstrapper

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)); 
} 

Si stava lavorando in precedenza. Ma quando ho introdotto l'implementazione EncryptionService, sto ricevendo l'errore precedente. Ecco l'altra implementazione del codice a lavorare come segue

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 
} 

risposta

8

Quando Autofac provare a risolvere EncryptionService si tenta di risolvere un servizio SecuritySettings ma Autofac non è a conoscenza di una tale registrazione.

Per risolvere questo errore, è necessario registrare un'implementazione SecuritySettings.

Ad esempio:

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

Grazie mille Cyril Durand. Funziona ora. – pbhalchandra

0

È inoltre possibile regolare il comportamento di Autofac a funzionare come originariamente previsto [e allinearsi con le impostazioni di default di alcuni altri contenitori] aggiungendo il AnyConcreteTypeNotAlreadyRegisteredSource (vedi the docs for Sources): -

Ho usato questo schema insieme a delegate factories e implicit Relationship Types per rimuovere praticamente la registrazione esplicita da una suite di app ma come sembra che tu abbia intrapreso la strada dell'esplicito (boilerpla ty: P) registrazione mi piacerebbe googling AnyConcreteTypeNotAlreadyRegisteredSource per vedere se uno schema più ampio può adattarsi a ciò che stai cercando meglio.

0

nel mio caso non ho registrato il contesto. Ho registrato il contesto e ha funzionato per me

builder.RegisterType<JComDbEntities>().AsSelf().As<DbContext>().InstancePerLifetimeScope(); 
Problemi correlati