Я пытаюсь протестировать заказное связующее устройство. В рамках этого процесса я создаю новый ModelBindingContext
, чтобы перейти к методу BindModel
пользовательского связующего. Проблема в том, что мне нужно установить свойство MetaData
объекта ModelBindingContext
как объект CachedDataAnnotationsModelMetadata
, но, честно говоря, я не уверен, как создать экземпляр объекта.Как создать экземпляр CachedDataAnnotationsModelMetadata?
Сигнатура для CachedDataAnnotationsModelMetadata
объекта:
public CachedDataAnnotationsModelMetadata( CachedDataAnnotationsModelMetadata prototype, Func<object> modelAccessor )
Кто-нибудь есть пример того, что прототип и параметры 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...
Я нашел несколько примеров вокруг сети и SO людей, взаимодействующих с этим классом, но не конкретный пример реализации.
Заранее благодарен!
Update
Разобрался ModelAccessor
, это просто используется для задержки доступа к фактической модели, пока свойство модели не доступно. https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http/Metadata/ModelMetadata.cs#L103
Я все еще работаю над поставкой объекта-прототипа, если кто-то может помочь с этим.