我想重组MVC核心项目的结构,这样,我就不再是水平层(模型、控制器、视图),而是垂直的“切片”:每个功能都包含在一个文件夹中,其中包含了与该功能相关的所有内容。
此结构的示例可能如下所示:
/Features/Home/Model.cs
/Features/Home/Controller.cs
/Features/Home/Index.cshtml
在较旧的项目中,我通过编写自定义控制器工厂来实现这一点。
问题:
发布于 2016-04-08 21:33:15
我认为您想要的是一个ViewExpander
,正如我们在ASP.NET JabbR频道中讨论的那样。
您只需设置扩展程序,并使用它告诉框架如何解释对视图的搜索。{0}
-控制器操作{1}
-控制器名称{2}
-区域(如果适用)
using System;
using System.Collections.Generic;
using System.Linq;
namespace Microsoft.AspNet.Mvc.Razor {
public class ViewExpander : IViewLocationExpander {
public void PopulateValues(ViewLocationExpanderContext context) {
}
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) {
return viewLocations.ToList().Then(n => {
n.Add("/Layout/{1}/{0}.cshtml");
n.Add("/Layout/{0}.cshtml");
n.Add("/web/Views/{1}/{0}.cshtml");
n.Add("/web/Views/Shared/{0}.cshtml");
});
}
}
}
然后在您的Startup.cs
中,在ConfigureServices
方法中,将其连接起来;
services.Configure<RazorViewEngineOptions>(o => {
o.ViewLocationExpanders.Add(new ViewExpander());
});
其中一些名称在最新的RC2
边缘构建/夜间构建中可能已经更改,但功能仍然存在。
控制器可以进入任何文件夹,并具有您想要的任何命名空间设置-因此不需要在那里更改任何内容。
https://stackoverflow.com/questions/36372926
复制相似问题