В настоящее время я переопределяю модель 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, и это заставляет мой конструктор вызываться гораздо раньше, но он все равно фактически никогда не использует объект после его создания.
Я что-то упустил?