Внедрение зависимости в пользовательский ModelBinder - PullRequest
4 голосов
/ 24 февраля 2009

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

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

но я не уверен

  • а) если это сработает
  • б) если это действительно правильно

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

Любые мысли / помощь приветствуется.

Ответы [ 3 ]

4 голосов
/ 24 февраля 2009

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

    ModelBinders.Binders.Add(typeof(Customer), Resolve<CustomerBinder>());
1 голос
/ 02 апреля 2012

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

IMyFetcher db = DependencyResolver.Current.GetService<IMyFetcher>();
1 голос
/ 24 февраля 2009

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

...