Использование IoC для предоставления пользовательского ModelMetadataProvider в MVC3 - PullRequest
1 голос
/ 12 марта 2011

В настоящее время я переопределяю модель ModelMetadataProvider по умолчанию в файле Global.asax, используя этот

ModelMetadataProviders.Current = new RedSandMetadataProvider(ModelMetadataProviders.Current);

, и это прекрасно работает.Но я бы хотел использовать функцию IDependancyResolver в MVC3, чтобы позволить IoC предоставлять реализацию ModelMetadataProvider.Я использую StructureMap, чтобы сделать это (просто установил его в проект, используя NuGet), но по какой-то причине он работает не так, как ожидалось.

x.For<ModelMetadataProvider>().Use(new RedSandMetadataProvider(ModelMetadataProviders.Current));

Я поставил точку останова на конструкторе RedSandMetadataProvider(), и этополучает удар.И я также установил точку останова на функцию GetServices() автоматически добавленного файла SmDependencyResolver.cs, чтобы убедиться, что именно IoC вызывал мой конструктор, и все выглядит нормально, конструктор вызывается при загрузке второй страницы, я думаю, ноон никогда не вызывает мою GetMetadataForProperty() функцию моего MetadataProvider.Теперь я ЗНАЮ, что это вызывается корректно, когда я настраиваю его в Global.asax, но каждый раз, когда я пытаюсь достичь того же результата с помощью IoC, я вижу конструктор, вызываемый в моем классе, и все.Я попытался добавить .Singleton () к регистрации типа StrctureMap, и это заставляет мой конструктор вызываться гораздо раньше, но он все равно фактически никогда не использует объект после его создания.

Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Вам необходимо реализовать IMvcServiceLocator и вызвать MvcServiceLocator.SetCurrent (), чтобы сообщить MVC об использовании StructureMap: http://bradwilson.typepad.com/blog/2010/07/service-location-pt2-controllers.html

0 голосов
/ 21 апреля 2011

Я решил свою проблему с этим вопросом в другом вопросе. Настройка DependancyResolver в MVC3 с использованием StructureMap для ModelMetadataProvider и ModelValidatorProvider

Пожалуйста, проверьте это, если у вас также возникают проблемы с этим.

...