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);
}