我目前正在使用这个覆盖 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,并且一切看起来都很好,构造函数在我认为的第二页加载时被调用,但它从不调用我GetMetadataForProperty()
的 MetadataProvider 的功能。现在我知道当我在 Global.asax 中设置它时会正确调用它,但是每次我尝试使用 IoC 实现相同的结果时,我都会看到在我的类上调用了构造函数,仅此而已。我尝试将 .Singleton() 添加到类型的 StrctureMap 注册中,这会导致我的构造函数更快地被调用,但它在构造后仍然从未真正使用过该对象。
我错过了什么吗?