2009-02-23 2 views
4

У меня есть проект ASP.net MVC в работе на данный момент, и мне интересно, возможно ли следующее: У меня есть собственный класс ModelBinder, который имеет ссылку на службы (по существу, получателя) в качестве зависимости. Я хочу, чтобы зависимость была введена с использованием контейнера IoC (в настоящее время Ninject), но, похоже, нигде в цепочке методов я не могу подключить что-то, что говорит о загрузке привязки модели из моего контейнера IoC.Ввод зависимости в пользовательский ModelBinder

Моя первая мысль состоит в том, чтобы иметь универсальное связывание объектов, которое затем пытается извлечь конкретный ModelBinder из контейнера, возвращая null, если не найден, а затем stetting это как связующее, то есть что-то вроде: ModelBinders.Binders. Добавить (TYPEOF (объект), TypeOf (NinjectModelBinder));

, но я не уверен

  • а) если это будет работать
  • б), если это действительно то, что нужно сделать

Я не мог отказаться от решения сложного объекта до метод действия, но было бы более чистым и более желательным обеспечить сложный объект (который по существу загружен и построен с уровня доступа к данным) в качестве параметра для действия.

Любые мысли/помощь оцениваются.

+1

Я лично думаю ModelBinders, которые создаются с помощью ModelBinderAttribute должен быть инъекционным тоже. Я думаю, что это ошибка дизайна текущей версии MVC. – CVertex

ответ

3

Я думаю, вам нужно будет сделать вызов локатора службы либо в привязке модели, либо создать связующее устройство модели, либо и то, и другое.

ModelBinders.Binders.Add(typeof(Customer), Resolve<CustomerBinder>()); 
+0

Да, я понял, что это может быть так. – buildmaster

1

Я лично использую инъекцию setter в моем сценарии, подобном вашему. После поиска, NInject вызывает эту инъекцию свойств. Он работает и выполняет свою работу.

0

Внутри вашего ModelBinder вы можете назвать что-то вроде этого

IMyFetcher db = DependencyResolver.Current.GetService<IMyFetcher>();