I'm working on MVC3 website, trying to use Ninject to resolve my dependencies. I have the following scenario:
public class UserModelBinder : IModelBinder
{
//[Inject]
public UserDataService userData { get; set; }
public object BindModel(
ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
Guid UserID =
(Guid)Membership.GetUser().ProviderUserKey;
//userDataService = DependencyResolver.Current
// .GetService<UserDataService>();
User user = userDataService.GetUser(UserID);
return user;
}
}
noticed the commented lines of code?
I do register the binder in Global.asax
as
ModelBinders.Binders[typeof(User)] = new UserModelBinder();
So I can't really do injection through the construction.
UserDataService
has a chain of dependencies: UserDataService -> UserRepository -> Context
. So it would be good to use Ninject here.
The problem is, when I uncomment [Inject]
above userData
declaration, and try getting Ninject to inject object as a parameter, it does not work for some reason: I get null reference exceptions.
(could it be that UserDataService
does not have an interface and I'm binding the object to itself: kernel.Bind<UserDataService>().ToSelf();
??)
I have another commented line in the code:
userDataService = DependencyResolver.Current
.GetService<UserDataService>();
When this is uncommented, the set up works, I get correct objects inserted, but now we depend on DependencyResolver and that is not much better than saying userDataService = new UserDataService()
Am I missing something? Is there another way to inject an object as a parameter and not introducing dependency on Ninject or DependencyResolver?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…