我在asp.net mvc的一个解决方案中有7个项目。我在其他项目中分离了模型类,控制器,cshtml文件,视图模型等。在每个项目中,我将其他文件夹中的类等分开。例如,在我的Application.Viewmodel项目中,有4个文件夹,每个文件夹都有自己的视图模型。每个项目当然都有自己的命名空间。现在我必须通过反射遍历文件夹,以获取每个文件夹的viewmodel名称。我可以使用下面的代码检索整个viewmodel名称。但重要的是知道哪个视图模型停留在哪个文件夹中。我想从每个文件夹中逐个获取视图模型名称。我怎么能这样做?
string @namespace = "Application.Viewmodel";
List<String> viewModels = new List<string>();
List<Type> returnVal = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany(t => t.GetTypes())
.Where(t => t.IsClass && t.Namespace == @namespace).ToList();
for (int i = 0; i < returnVal.Count; i++)
{
viewModels.Add(returnVal[i].Name);
}
答案 0 :(得分:1)
编译代码时,不保留原始文件的物理位置。程序集只是一组类型定义。你可以从PDB文件中获得,但不是真的相同。
如果您需要组织课程,则应使用命名空间。做MyProject.ViewModels.FolderA
和MyProject.ViewModels.FolderB
。
这是一个非常简单的例子,假设命名空间的最后一段是唯一的部分:
var typesGroupedByNamespace = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany(t => t.GetTypes())
.Where(t => t.IsClass && t.Namespace.StartsWith(@namespace))
.GroupBy(t => t.Namespace.Substring(t.Namespace.LastIndexOf(".") + 1));