查找具有特定属性的所有类

时间:2009-04-06 03:10:36

标签: c# .net reflection .net-3.5

我有一个.NET库,我需要找到所有具有我在其上定义的自定义属性的类,我希望能够在应用程序运行时即时找到它们。使用我的库(即 - 我不想在某个地方使用配置文件来说明程序集和/或类名)。

我在看AppDomain.CurrentDomain,但我并不过分熟悉它,也不确定这些权限需要多少才能消失(我希望能够以最少的信任在Web应用程序中运行库如果可能的话,但信任度越低,我就越幸福。我还想记住性能(这是一个.NET 3.5库,所以LINQ完全有效!)。

AppDomain.CurrentDomain是我最好/唯一的选择,然后循环遍历所有程序集,然后在这些程序集中键入?还是有另一种方式

2 个答案:

答案 0 :(得分:80)

IEnumerable<Type> GetTypesWith<TAttribute>(bool inherit) 
                              where TAttribute: System.Attribute
 { return from a in AppDomain.CurrentDomain.GetAssemblies()
          from t in a.GetTypes()
          where t.IsDefined(typeof(TAttribute),inherit)
          select t;
 }

答案 1 :(得分:0)

Mark发布了一个很好的答案,但如果您愿意,可以使用linq免费版本:

    public static IEnumerable<Type> GetTypesWith<TAttribute>(bool inherit) where TAttribute : Attribute
    {
        var output = new List<Type>();

        var assemblies = AppDomain.CurrentDomain.GetAssemblies();

        foreach (var assembly in assemblies)
        {
            var assembly_types = assembly.GetTypes();

            foreach (var type in assembly_types)
            {
                if (type.IsDefined(typeof(TAttribute), inherit))
                    output.Add(type);
            }
        }

        return output;
    }