ASP.Net MVC пользовательский модельбиндер для типа с аргументом универсального типа

#c# #asp.net #asp.net-mvc #model-binding #custom-model-binder

#c# #asp.net #asp.net-mvc #привязка к модели #custom-model-binder

Вопрос:

У меня есть struct такой:

 public struct MyStructlt;Tgt; where T: struct, IComparable {  //... }  

Я хочу написать привязку модели, которая работает для любого типа T , передаваемого в качестве аргумента универсального типа, в MyStructlt;Tgt;

Вот модель связующего, которую я написал до сих пор:

 public class MyStructModelBinder : IModelBinder {  public static readonly Type[] SUPPORTED_TYPES = new Type[] { typeof(MyStructlt;gt;) };  public Task BindModelAsync(ModelBindingContext bindingContext)  {  if (bindingContext == null)  {  throw new ArgumentNullException(nameof(bindingContext));  }   if (!SUPPORTED_TYPES.Contains(bindingContext.ModelType))  {  return Task.CompletedTask;  }   if (!(bindingContext.ModelType.IsGenericType amp;amp; bindingContext.ModelType.GetGenericTypeDefinition() == typeof(MyStructlt;gt;)))  {  return Task.CompletedTask;  }   var modelName = bindingContext.BinderModelName ?? bindingContext.ModelName;   var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);  if (valueProviderResult == ValueProviderResult.None)  {  return Task.CompletedTask;  }   bindingContext.ModelState.SetModelValue(modelName, valueProviderResult);   var stringToParse = valueProviderResult.FirstValue;   if (string.IsNullOrEmpty(stringToParse))  {  return Task.CompletedTask;  }   /*  * This is the problematic part  var interval = MyStruct.TryParselt;gt;(bindingContext, intervalToParse);  if (interval == null)  {  return Task.CompletedTask;  }   bindingContext.Result = ModelBindingResult.Success(interval);  */   return Task.CompletedTask;  } }  

Проблема в том, что я не знаю, как передать аргумент типа синтаксическому анализатору. На самом деле это T может быть что угодно, может иметь свои собственные связующие. Как я могу создать экземпляр T , не зная, что это такое? или как я могу перейти T к синтаксическому анализатору внутри ModelBinder?