asp.net mvc - Model (ViewModel) binding when model needs dependencies injected -
i'm using ninject dependency injecting in asp.net mvc application (this first project using ninject or di @ matter).
i'm opting using model-view-viewmodel pattern. view model provide properties i'll bind actual view, need access database things such lists of data. eg:
public class creategetincidentviewmodel { private idbcontext _dbcontext = null; [required] public employeetype employeetype { get; set; } [required] [stringlength(50)] public string department { get; set; } / public ienumerable<selectlistitem> getemployeetypeselectlist() { // simplified brevity var employeetypes = _dbcontext.employetypes.where().... // go select employee types var employeetypeselectlist = new list<selectlistitem>(); foreach(var employeetype in employeetypes){ employeetypeselectlist.add(new selectlistitem(){ // set select list properties }); } return employeetypeselectlist; } }
my problem is:
- idbcontext registered dependency within ninject. accessing concrete type directly instantiating no-no.
- i must somehow dependency injected class or somehow access dependency through other class has dependency resolved.
given viewmodel hydrated asp.net mvc automatically through model binding, how dependency viewmodel?
there multiple ways i've through seem dirty. (but don't want to)
- implement service locator pattern resolve idbcontext dependency within viewmodel.
- resolve idbcontext within controller , pass viewmodel upon manual construction of viewmode i.e.
new creategetincidentviewmodel(dbcontext);
- this doesn't solve problem of view model being hydrated mvc though when model being posted action
suggestions?
given viewmodel hydrated asp.net mvc automatically through model binding, how dependency viewmodel?
you write custom model binder inject dependency view model constructor.
this being said, using mvvm pattern in asp.net mvc imho wrong approach beginning , if go way must prepared lots of suffering. ready that?
if not, here's recommend you:
controller -> domain model -> view model -> view
in pattern have controller knowing repository (dbcontext
- being injected automatically di framework).
flow 1:
- the controller receives request user
- the controller uses repository query 1 or more domain models
- the controller uses mapping layer map domain models view model
- the controller passes (single) view model view rendering
flow 2:
- the controller receives request view (form submit example)
- the model binder automatically binds request body single view model controller action taking argument
- the controller using mapping layer map view model 1 or more domain models
- the controller using repository update domain models.
in examples view model doesn't know repository or data access or dbcontexts. view model representation of view. mapping between domain model , view responsibility of controller (which delegated mapping layer). use automapper
perform mapping between domain models , view models.
Comments
Post a Comment