asp.net mvc - How pass different repository object with same interface to my service layer using Ninject? -
so i've run confusion in past, , got around not using ninject. i'm redoing site i'm @ point ninject seems handy again, i've got myself confused. again.
i have mvc3 project using repository pattern. currently, home controller creates few objects orderrepository.cs, customerrepository.cs , sends them service called orderservice.cs , customerservice.cs. have test project can use send in fakeorderrepository.cs , fakecustomerrepository.cs. handy unit testing go through project.
however, realise declaring repositories in controller , unit tests, i'm setting dependency on objects. have no repositories passed, , have service layer use ninject "oh look, iorderrepository in constructor, better go orderrepository".
the issue ran last time while can bind orderrepository instance or iorderrepository in contructor , bind 2 in global.ascx, seems leave unit tests high , dry. unless go in , switch every bind in global.ascx object want passed in (in case, fakeorderrepository.cs) every time run tests, real repository passed in. how can have test project , controller pass different repositories while using same iorderrepository interface?
whew, long explanation simple. have feeling i'm overthinking , missing few key understandings.
tldr: how can have constructor in service layer , pass in different repository objects controllers , unit tests using ninject.
it makes sense use constructor injection in service classes inject repositories , can set global.asax.
to unit tests working have couple of options:
setup bindings fake repositories in tests. in other words create different ninject module/kernel in test setup method. if these controller tests bindings in global.asax won't apply have set alternative bindings anyway or setup dependencies manually (which second option).
use constructor injection inject service classes controller , have ninject handle @ runtime overriding controller factory. in unit tests create service classes, , fake repositories manually , pass service objects controllers via constructors.
i found article helpful understand how integrate ninject mvc project: http://msdn.microsoft.com/en-us/magazine/dd942838.aspx
Comments
Post a Comment