.net 用反射獲取當前運行的程序集中的所有Controller與Action


public string InitPermission()
        {
            // 通過反射加載程序集
            // var baseType = Assembly.LoadFile(@"G:\testproject\ConsoleApp28\WebApplication1\bin\WebApplication1.dll");

            // 獲取當前運行的程序集的反射對象
            var assembly = System.Reflection.Assembly.GetExecutingAssembly();

            List<Permission> permissions = new List<Permission>();

            // 所有類型的集合
            foreach (var type in assembly.GetTypes())
            {
                // 不屬於controller的跳過
                if (!typeof(IController).IsAssignableFrom(type))
                {
                    continue;
                }
                
                // 處理Areas,無法直接獲取到區域名稱,只能根據命名空間處理
                string[] namespaceSplit = type.Namespace.Split('.');

                Dictionary<string, int> dic = new Dictionary<string, int>();

                // 獲取區域名稱,限制Areas后面跟區域,不允許再深入
                string areaName = string.Empty;

                for (int i = 0; i < namespaceSplit.Length; i++)
                {
                    if (namespaceSplit[i] == "Areas")
                    {
                        areaName = namespaceSplit[i + 1];
                    }
                }

                string controllerName = type.Name.Replace("Controller","");

                var members = type.GetMembers();

                foreach (var member in members)
                {
                    // 不是方法時,跳過
                    if (member.MemberType != MemberTypes.Method)
                    {
                        continue;
                    }

                    // member.ReturnType,調試時可以看到,但實際是沒有ReturnType屬性的,所以采用以下判斷
                    // 方法返回值為Void的跳過
                    if (member.ToString().IndexOf("Void") == 0)
                    {
                        continue;
                    }

                    Permission permission = new Permission();
                    permission.AreaName = areaName;
                    permission.ControllerName = controllerName;
                    permission.ActionName = member.Name;

                    permission.PermissionCode = Transfer.GetUniqueID();

                    permission.CreateTime = DateTime.Now;
                    permission.UpdateTime = DateTime.Now;

                    permissions.Add(permission);
                }
            }

            MyWebCache.InsertPermissions(permissions);

            return ToJson(permissions);
        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM