2016-12-02 102 views
0

我发现这个answer到我的问题的第一部分。但它也正在返回我的集体中的界面。获取通用接口的所有具体实现

我试图得到一个接口

public interface IPermissionAccessDetails<T,TZ> 
{ 
    List<PermissionAccessDetails<T,TZ>> AccessDetails { get; } 
} 

这里的所有具体实现是唯一的具体实现(到目前为止):

public class BillingPermissionAccessDetails : IPermissionAccessDetails<BillingPermission, EBilling> 
    { 
     public List<PermissionAccessDetails<BillingPermission, EBilling>> AccessDetails => Config(); 
    } 

这里是我用找到的所有代码的实现(几乎是逐字)从上面引用的答案。

public static List<Type> GetImplementations(Type desiredType) 
    { 
     return Assembly.GetExecutingAssembly().GetTypes() 
        .Where(type => DoesTypeSupportInterface(type, desiredType)).ToList(); 
    } 

    static bool DoesTypeSupportInterface(Type type, Type inter) 
    { 
     if (inter.IsAssignableFrom(type)) 
      return true; 
     if (type.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == inter)) 
      return true; 
     return false; 
    } 


var allPermissionAccessTypeDetails = HelperMethods.GetImplementations(typeof(IPermissionAccessDetails<,>)); 

我的问题是allPermissionAccessTypeDetails应该只有集合中的1项 - 但它也包括IPermissionAccessDetails类型。我如何排除?

回答

0

找到它。修改帮手方法:

 static bool DoesTypeSupportInterface(Type type, Type inter) 
    { 
     if (type.IsInterface) 
      return false; 
     if (inter.IsAssignableFrom(type)) 
      return true; 
     if (type.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == inter)) 
      return true; 
     return false; 
    }