i have following error:
exceptionmessage=none of constructors found 'autofac.core.activators.reflection.defaultconstructorfinder' on type 'restapi.developerscontroller' can invoked available services , parameters: cannot resolve parameter 'services.developersservice userservice' of constructor 'void .ctor(services.developersservice)'.
global.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> 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(); } how can fix it?
this error message occurs when autofac try instantiate developerscontroller. in order create new developerscontroller have provide instance developersservice none of them registered in autofac.
eeven if following piece of code
builder.registerassemblytypes(assembly.load("services")) .where(t => t.name.endswith("service")) .asimplementedinterfaces() .instanceperlifetimescope(); register developersservice in autofac, doesn't register developersservice implemented interfaces (ie iservice<user>)
in order fix issue, can change registration register service itself
builder.registerassemblytypes(assembly.load("services")) .where(t => t.name.endswith("service")) .asimplementedinterfaces() .asself() .instanceperlifetimescope(); or change developerscontroller not rely on developersservice on iservice<user>
public class developerscontroller : apicontroller { private iservice<user> _userservice; public developerscontroller(iservice<user> userservice) { _userservice= userservice; _userservice.setidentity(httpcontext.current.request.logonuseridentity.name.tostring().substring(4)); } i recommend solution.
Comments
Post a Comment