c# - Unity, injecting instances to controller gives seemingly unrelated exception -


this want able (passing interface(s) controllers):

public class testcontroller : controller {     // get: test     [httpget]     public actionresult index(itestservice service)     {         var test = new testmodel();         test.greeting = "yo" + service.getstring();         test.name = "nils";          return view(test);      } } 

this have put in global.asax.cs in application_start() try make work:

        // create new unity dependency injection container         var unity = new unitycontainer();           unity.registertype<itestservice,testservice>();          // finally, override default dependency resolver unity         dependencyresolver.setresolver(new ioccontainer(unity)); 

i have also, can see, created ioccontainer class looks follows:

public class ioccontainer : idependencyresolver {     private readonly iunitycontainer _container;     public ioccontainer(iunitycontainer container)     {         _container = container;     }      public object getservice(type servicetype)     {         if (_container.isregistered(servicetype))             return _container.resolve(servicetype);          return null;      }      public ienumerable<object> getservices(type servicetype)     {         if (_container.isregistered(servicetype))             return _container.resolveall(servicetype);          return new list<object>();     }      public void dispose()     {         _container.dispose();     } } 

when try access "http://humptidumptiurl/test" tells me:

a public action method 'login' not found on controller 'companyname.product.web.controllers.testcontroller'. 

now... thought should resolve itestservice.. not bother different controller? other controllers not use unity yet, work have done....

inputs on how achieve desired solution appriciated

edit:

thank you! of course injects through constructor... should have thought of that... gives me error message:

{"an error occurred when trying create controller of type 'stimline.xplorer.web.controllers.testcontroller'. make sure controller has parameterless public constructor."} 

edited testcontroller:

public class testcontroller : controller {     private readonly itestservice _testservice;      public testcontroller(itestservice service)     {         _testservice = service;     }      // get: test     [httpget]     public actionresult index()     {         var test = new testmodel();         test.greeting = "yo" + _testservice.getstring();         test.name = "nils";          return view(test);     } } 

you're injecting dependency action method.

when using idependencyresolver in manner tend inject dependencies constructor.

try changing controller this:

public class testcontroller : controller {     private readonly itestservice service;      public testcontroller(itestservice service)     {         this.service = service;     }      // get: test     [httpget]     public actionresult index()     {         var test = new testmodel();         test.greeting = "yo";         test.name = "nils";          // todo itestservice         // this.service.dosomethingcool()          return view(test);     }  

}


Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -