我目前正在使用此
覆盖Global.asax文件中的默认ModelMetadataProviderModelMetadataProviders.Current = new RedSandMetadataProvider(ModelMetadataProviders.Current);
这完美无缺。但我想使用MVC3的IDependancyResolver功能让IoC提供ModelMetadataProvider实现。我正在使用StructureMap来做它(只是使用NuGet将它安装到项目中)但由于某种原因它没有按预期运行。
x.For<ModelMetadataProvider>().Use(new RedSandMetadataProvider(ModelMetadataProviders.Current));
我在RedSandMetadataProvider()
的构造函数上放了一个断点,它正在受到攻击。我还在自动添加的SmDependencyResolver.cs文件的GetServices()
函数上设置了一个断点,以确保它是调用我的构造函数的IoC,一切似乎都很好,构造函数在第二页加载时调用我认为,但它从不调用我的MetadataProvider的GetMetadataForProperty()
函数。现在,我知道当我在Global.asax中设置它时,它会被严格调用,但每次我尝试使用IoC实现相同的结果时,我都会看到在我的类上调用构造函数,就是这样。我尝试将.Singleton()添加到类型的StrctureMap注册中,这会导致我的构造函数被更快地调用,但它仍然没有在构造之后实际使用该对象。
我错过了什么吗?
答案 0 :(得分:1)
您需要实现IMvcServiceLocator并调用MvcServiceLocator.SetCurrent()告诉MVC使用StructureMap:http://bradwilson.typepad.com/blog/2010/07/service-location-pt2-controllers.html
答案 1 :(得分:0)
我在另一个问题中解决了这个问题。 Setting up DependancyResolver in MVC3 using StructureMap for ModelMetadataProvider & ModelValidatorProvider
如果您遇到问题,请查看。