如何绕过我的解决方案的文件夹?

时间:2014-05-13 19:28:09

标签: c# asp.net-mvc reflection

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

1 个答案:

答案 0 :(得分:1)

编译代码时,不保留原始文件的物理位置。程序集只是一组类型定义。你可以从PDB文件中获得,但不是真的相同。

如果您需要组织课程,则应使用命名空间。做MyProject.ViewModels.FolderAMyProject.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));