Использование внедрения зависимостей в ASP.NET MVC3 Model Binder
Я работаю над сайтом 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?