.NET反射。按属性名称获取方法

时间:2012-04-11 00:58:09

标签: asp.net-mvc-3 reflection

在我的MVC 3项目中,我有方法,在dll和一些负载下扫描文件夹bin。然后我过滤并获得列表Controller类。然后我过滤并尝试获取返回ActionResult的方法列表。但我得到了重复方法。我尝试按属性过滤。但没有得到任何东西

private void GetControllers()
{
        IEnumerable<FileInfo> files = this.GetFileList();

        foreach (var fileInfo in files)
        {
            if (fileInfo.Name != "SGN.Framework.dll" && fileInfo.Name != "SGN.Controls.dll")
            {
                Assembly assembly = Assembly.LoadFile(fileInfo.FullName);
                AssemblyName asamName = assembly.GetName();
                IList<Type> myType =
                    assembly.GetTypes().Where(item => item.Name.Contains("Controller")).Where(
                        item => item.Name != "AdminsController" && item.Name != "ModuleController").ToList();

                foreach (var type in myType)
                {
                    var m =
                        type.GetMethods().Where(
                            item =>
                            item.ReturnType == typeof(ActionResult)).Except(type.GetCustomAttributes(true).Where(i => i != typeof(ActionInfoAttribute)));
                }
            }
        }
}

1 个答案:

答案 0 :(得分:1)

我知道这个问题已经过时了。但也许我的回答会帮助别人。 对于这种情况,以下代码将起作用:

type.GetMethods().Where(
    item =>
    item.ReturnType == typeof(ActionResult) && item.IsDefined(typeof(ActionInfoAttribute), false));