首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET MVC核心:自定义控制器工厂

ASP.NET MVC核心:自定义控制器工厂
EN

Stack Overflow用户
提问于 2016-04-02 11:56:58
回答 1查看 1K关注 0票数 1

我想重组MVC核心项目的结构,这样,我就不再是水平层(模型、控制器、视图),而是垂直的“切片”:每个功能都包含在一个文件夹中,其中包含了与该功能相关的所有内容。

此结构的示例可能如下所示:

代码语言:javascript
运行
复制
/Features/Home/Model.cs
/Features/Home/Controller.cs
/Features/Home/Index.cshtml

在较旧的项目中,我通过编写自定义控制器工厂来实现这一点。

问题:

  1. 自定义控制器工厂是在ASP.NET MVC核心中实现这一目标的最佳方法吗?
  2. 如果是这样的话,是否有一个示例如何在ASP.NET MVC核心中编写和注入自定义控制器工厂?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-08 21:33:15

我认为您想要的是一个ViewExpander,正如我们在ASP.NET JabbR频道中讨论的那样。

您只需设置扩展程序,并使用它告诉框架如何解释对视图的搜索。{0} -控制器操作{1} -控制器名称{2} -区域(如果适用)

代码语言:javascript
运行
复制
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方法中,将其连接起来;

代码语言:javascript
运行
复制
services.Configure<RazorViewEngineOptions>(o => {
    o.ViewLocationExpanders.Add(new ViewExpander());
});

其中一些名称在最新的RC2边缘构建/夜间构建中可能已经更改,但功能仍然存在。

控制器可以进入任何文件夹,并具有您想要的任何命名空间设置-因此不需要在那里更改任何内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36372926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档