我目前正在使用下面的代码覆盖Global.asax文件中的默认ModelMetadataProvider
ModelMetadataProviders.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注册中,这会导致我的构造函数被调用得更快,但在构造之后它仍然没有实际使用过该对象。
我是不是遗漏了什么?
发布于 2011-04-22 00:11:38
我在另一个问题中解决了这个问题。Setting up DependancyResolver in MVC3 using StructureMap for ModelMetadataProvider & ModelValidatorProvider
如果您在这方面也遇到问题,请查看它。
发布于 2011-03-16 01:43:28
您需要实现IMvcServiceLocator并调用MvcServiceLocator.SetCurrent()来告诉MVC使用StructureMap:http://bradwilson.typepad.com/blog/2010/07/service-location-pt2-controllers.html
https://stackoverflow.com/questions/5279894
复制相似问题