2016-12-02 83 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; 
    } 
相關問題