我有7个项目在一个解决方案上asp.net mvc。我分离模型类,控制器,cshtml文件,视图模型等在其他项目。在每个项目中,我将其他文件夹上的类等分开。例如在我的应用程序中。Viewmodel项目,有4个文件夹,每个文件夹都有自己的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);
}
编译代码时,不会保留原始文件的物理位置。程序集只是一束类型定义。您可以从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));