我正在 MVC3 网站上工作,尝试使用 Ninject 来解决我的依赖关系。我有以下情况:
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;
}
}
注意到注释的代码行了吗?
我确实将活页夹注册Global.asax
为
ModelBinders.Binders[typeof(User)] = new UserModelBinder();
所以我不能真正通过施工进行注射。
UserDataService
有一个依赖链:UserDataService -> UserRepository -> Context
. 所以在这里使用 Ninject 会很好。
问题是,当我取消注释[Inject]
上面的userData
声明并尝试让 Ninject 将对象作为参数注入时,由于某种原因它不起作用:我得到空引用异常。
(可能是UserDataService
没有接口,我将对象绑定到自身:kernel.Bind<UserDataService>().ToSelf();
??)
我在代码中有另一行注释:
userDataService = DependencyResolver.Current
.GetService<UserDataService>();
当取消注释时,设置有效,我插入了正确的对象,但现在我们依赖于 DependencyResolver,这并不比说好多少userDataService = new UserDataService()
我错过了什么吗?是否有另一种方法可以将对象作为参数注入而不引入对 Ninject 或 DependencyResolver 的依赖?