当SomeClass作为一个类型传递</t> </t>时如何获取某些类的<t> <t>

时间:2014-07-01 14:26:37

标签: asp.net-mvc generics model-binding

我尝试使用模型绑定提供程序对绑定建模。

GetBinder方法被点击时,我想根据传入的内容提供模型绑定器。

我有一个通用模型IBaseModel<T> where T : IEntity

我可以从类型中抓取BaseModel,但我真正想要的是<T> BaseModel<T>上的IEntity

public IModelBinder GetBinder(Type modelType)
{
    Type baseModel = modelType.GetInterface(typeof(IBaseModel<>).Name);

     if (baseModel != null)
     {
         if (baseModel.IsGenericType)
         {
            //want to get <T> (IEntity) here.        
         }
  }

提前致谢

1 个答案:

答案 0 :(得分:0)

我知道您希望获得通用参数的类型,您可以尝试这样做:

    public static Type GetBinder(Type modelType)
    {
        Type baseModel = modelType.GetInterface(typeof (IBaseModel<>).Name);

        if (baseModel != null)
        {
            if (baseModel.IsGenericType)
            {
                var interfacesTypes = modelType.GetInterfaces();
                var typeGeneric = interfacesTypes.FirstOrDefault(x => x.IsGenericTypeDefinition);
                if (typeGeneric != null)
                {
                    return typeGeneric.GetGenericArguments().First();
                }

            }
        }
        return null;
    }

    public interface IBaseModel<T> where T : IEntity
    {

    }

    public class Musica : IBaseModel<Artista>
    {

    }

    public class Artista : IEntity
    {

    }