2015-08-13 3 views
0

Я пытаюсь протестировать заказное связующее устройство. В рамках этого процесса я создаю новый 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

Я все еще работаю над поставкой объекта-прототипа, если кто-то может помочь с этим.

ответ

0

Так что я в конечном итоге обошел эту проблему полностью.

После проверки модели наследования я понял, что в этом случае я могу уйти с использованием DataAnnotationsModelMetadataProvider, а не CachedDataAnnotationsModelMetadata. Последнее из них не требует параметров, необходимых для настройки кэширования, и поскольку мне не нужно кэшировать, чтобы проверить, что я тестирую, достаточно стандартного DataAnnotationsModelMetadataProvider.

Я смог определить, что я мог бы использовать другой подход после прочтения исходного кода для пространства имен метаданных.

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

Тем не менее, если кто-то может дать некоторые ключи к моему первоначальному вопросу, я бы предпочел использовать кэшированные модели объекта, если это возможно.