前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas

如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas

作者头像
yoyofx
发布2018-09-05 11:30:28
2K0
发布2018-09-05 11:30:28
举报
文章被收录于专栏:ASP.NETCoreASP.NETCore

前言

软件系统中总是希望做到松耦合,项目的组织形式也是一样,本篇文章将介绍在ASP.NET CORE MVC中怎么样将Controller与主网站项目进行分离,并且对Areas进行支持。

实践

1.新建项目

新建两个ASP.NET Core Web应用程序,一个命名为:WebHostDemo 另一个名为: Web.Controllers ,看名字可以知道第一个项目是主程序项目,第二个是存放Controller类和Areas的项目。

2.修改Mvc配置

在WebHostDemo项目中修改ConfigureServices函数:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    var manager = new ApplicationPartManager();

    var homeType = typeof(Web.Controllers.Areas.HomeController);
    var controllerAssembly = homeType.GetTypeInfo().Assembly;

    manager.ApplicationParts.Add(new AssemblyPart(controllerAssembly));
    manager.FeatureProviders.Add(new ControllerFeatureProvider());

    var feature = new ControllerFeature();

    manager.PopulateFeature(feature);

    services.AddSingleton(feature.Controllers.Select(t => t.AsType()).ToArray());
}

这样就将另一个项目中的Controller程序集注入到主程序中了。当然还可以通过另一种方式:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().ConfigureApplicationPartManager( m => {
         var feature = new ControllerFeature();
          m.ApplicationParts.Add(new AssemblyPart(controllerAssembly));
         m.PopulateFeature(feature);
         services.AddSingleton(feature.Controllers.Select(t => t.AsType()).ToArray());
    });
}

这两种方式都可以注入Controller。

接下来修改Configure函数以,通过修改路由让Mvc支持Areas:

代码语言:javascript
复制
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "areaRoute",
        template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");


    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

3.添加Areas

在Web.Controllers项目中建立如下目录结构: Areas

代码语言:javascript
复制
        MyArea1
            -Controllers
                -Home.cs
            -Views
                -Home
                    Index.cshtml

4.为Controller添加Area

代码语言:javascript
复制
 [Area("MyArea1")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

最后

还有一件事很重要,当我们这么将项目进行分离后,DEBUG主程序将没办法找到Areas和Views目录,所以DEBUG时,要将这些目录Copy到主程序代码根目录,当然如果是发布程序的话就没有这个问题。

GitHub:https://github.com/maxzhang1985/YOYOFx 如果觉还可以请Star下, 欢迎一起交流。

.NET Core 开源学习群:214741894

Demo已经上传到群文件中,仅供参考。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-04-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 实践
    • 1.新建项目
      • 2.修改Mvc配置
        • 3.添加Areas
          • 4.为Controller添加Area
          • 最后
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档