Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ankitvijay/18fbbe16bf1cd5c26244c409f50471a1 to your computer and use it in GitHub Desktop.
Save ankitvijay/18fbbe16bf1cd5c26244c409f50471a1 to your computer and use it in GitHub Desktop.
Part 3 Enumeration classes - EnumerationQueryParameterModelBinderProvider
public class EnumerationQueryStringModelBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
var fullyQualifiedAssemblyName = context.Metadata.ModelType.FullName;
if (fullyQualifiedAssemblyName == null)
{
return null;
}
var enumType = context.Metadata.ModelType.Assembly.GetType
(fullyQualifiedAssemblyName, false);
if (enumType == null || !enumType.IsSubclassOf(typeof(Enumeration)))
{
return null;
}
var methodInfo = typeof(EnumerationQueryStringModelBinder)
.GetMethod("CreateInstance"
, BindingFlags.Static | BindingFlags.Public);
if (methodInfo == null)
{
throw new InvalidOperationException("Invalid operation");
}
var genericMethod = methodInfo.MakeGenericMethod(enumType);
var invoke = genericMethod.Invoke(null, null);
return invoke as IModelBinder;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment