如何实例化CachedDataAnnotationsModelMetadata?

时间:2015-08-13 23:43:04

标签: c# asp.net model-binding

我正在尝试测试自定义模型绑定器。作为该过程的一部分,我创建了一个新的ModelBindingContext以传递到自定义绑定器的BindModel方法。问题是我需要将MetaData的{​​{1}}属性设置为ModelBindingContext对象,但老实说我不确定如何实例化该对象。

CachedDataAnnotationsModelMetadata对象的签名是:

CachedDataAnnotationsModelMetadata

有没有人有一个原型和modelAccessor参数应该是什么的例子?

以下是非功能代码的片段。

public CachedDataAnnotationsModelMetadata(
    CachedDataAnnotationsModelMetadata prototype,
    Func<object> modelAccessor
)

我在网上发现了一些例子,人们正在与这个类进行交互,但没有实现它的具体例子。

提前致谢!

更新

想出 // Assemble var formCollection = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string> ("SomeRequiredProperty", "SomeValue") }; var valueProvider = new System.Web.Http.ValueProviders.Providers.NameValuePairsValueProvider(formCollection, null); var metadata = new System.Web.Http.Metadata.Providers.CachedDataAnnotationsModelMetadata(????, ????) var bindingContext = new ModelBindingContext { ModelName = "ClaimsModelBinderInputModel", ValueProvider = valueProvider, ModelMetadata = metadata }; var actionContext = new HttpActionContext(); var httpControllerContext = new HttpControllerContext(); httpControllerContext.Request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/someUri"); actionContext.ControllerContext = httpControllerContext; var cmb = new ClaimsModelBinder(); // Act cmb.BindModel(actionContext, bindingContext); // Assert... ,它只是用来延迟访问实际模型,直到访问模型属性。 https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http/Metadata/ModelMetadata.cs#L103

如果有人可以提供帮助,我仍在努力提供原型对象。

1 个答案:

答案 0 :(得分:0)

所以我最终完全回避了这个问题。

在检查继承模型后,我意识到在这种情况下,我可以使用DataAnnotationsModelMetadataProvider而不是CachedDataAnnotationsModelMetadata。后者并不需要设置缓存所需的参数,因为我不需要缓存来测试我正在测试的内容,所以标准DataAnnotationsModelMetadataProvider就足够了。

我能够确定在阅读元数据命名空间的源代码后我可以采取不同的方法。

https://github.com/ASP-NET-MVC/aspnetwebstack/tree/master/src/System.Web.Http/Metadata

那就是说,如果其他人可以提供我原始问题的一些线索,我宁愿尽可能使用缓存的模型对象。