public string InitPermission()
{
// 通过反射加载程序集
// var baseType = Assembly.LoadFile(@"G: estprojectConsoleApp28WebApplication1inWebApplication1.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);
}