Autofac Exception: Impossible de résoudre le paramètre de constructeur " Void .ctor
J'ai l'erreur suivante:
ExceptionMessage=Aucun des constructeurs trouvé avec
'Autofac.De base.Activateurs.De la réflexion.DefaultConstructorFinder " sur le type
'RestAPI.DevelopersController " peut être invoquée avec le
les services et les paramètres: paramètre Ne peut pas résoudre
De Services.DevelopersService userService' de constructeur " Void
.ctor(Services.DevelopersService)'.
Mondiale.asax.cs
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AutoMapperConfig.RegisterMappings();
var builder = new ContainerBuilder();
builder.RegisterModule(new ServiceModule());
builder.RegisterModule(new ORMModule());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
var container = builder.Build();
var resolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
}
ServiceModule.cs
public class ServiceModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterAssemblyTypes(Assembly.Load("Services"))
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
}
}
ORMModule.cs
public class ORMModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType(typeof(DatabaseContext)).As(typeof(DbContext)).InstancePerLifetimeScope();
}
}
DevelopersController
public class DevelopersController : ApiController
{
private DevelopersService _developersService;
public DevelopersController(DevelopersService userService)
{
_developersService = userService;
_developersService.SetIdentity(HttpContext.Current.Request.LogonUserIdentity.Name.ToString().Substring(4));
}
DevelopersService.cs
public class DevelopersService : IService<User>
{
private DatabaseContext _db;
public DevelopersService(DatabaseContext db)
{
_db = db;
}
public void SetIdentity(string username)
{
}
public User Create(User entity)
{
return new User();
}
public User Read(User Id)
{
return new User();
}
public void Update(User user)
{
}
public void Delete(User Id)
{
}
public IEnumerable<User> GetAll()
{
return _db.Users.AsEnumerable();
}
}
IService.cs
public interface IService<T> where T : BaseEntity
{
void SetIdentity(string identity);
T Create(T entity);
T Read(T Id);
void Update(T entity);
void Delete(T Id);
IEnumerable<T> GetAll();
}
Comment puis-je résoudre ce problème?
sont ServiceModule.cs et DevelopersService.cs dans la même assembly/au projet ? si oui pouvez-vous simplement le module de quelque chose comme cela et essayer. générateur de rapports.RegisterType<DevelopersService>() .AsImplementedInterfaces() .Instance unique();
OriginalL'auteur Ricardo | 2015-07-17
Vous devez vous connecter pour publier un commentaire.
Cette message d'erreur se produit lorsque Autofac essayer d'instancier un
DevelopersController
. Afin de créer une nouvelleDevelopersController
il faut fournir une instanceDevelopersService
mais aucun d'entre eux sont inscrits dans Autofac.Eeven si le morceau de code suivant
enregistrer un
DevelopersService
dans Autofac, il n'a pas l'enregistrer commeDevelopersService
mais aussi mis en œuvre des interfaces (c'est à direIService<User>
)Dans le but de résoudre votre problème, vous pouvez modifier votre inscription sur le service en lui-même
ou modifier votre
DevelopersController
de ne pas s'appuyer surDevelopersService
mais surIService<USer>
Je recommande cette solution.
OriginalL'auteur Cyril Durand
OK, donc je suis en utilisant nopcommerce, et dans ma dépendance greffier j'ai un type
Avait tapé:
Censé être
Avis de la
I
dans le dernier client du service de retours. Elle est reliée à l'interface du service.OriginalL'auteur chris c
espère que ma réponse encore de l'aide, je pense que le problème est l'absence de référence à la DevelopersService classe qui peut être situé à un autre projet. Essayez le code ci-dessous.
OriginalL'auteur pampi