如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas
2017-04-09 20:24
585 查看
前言
软件系统中总是希望做到松耦合,项目的组织形式也是一样,本篇文章将介绍在ASP.NET CORE MVC中怎么样将Controller与主网站项目进行分离,并且对Areas进行支持。实践
1.新建项目
新建两个ASP.NET Core Web应用程序,一个命名为:WebHostDemo 另一个名为: Web.Controllers ,看名字可以知道第一个项目是主程序项目,第二个是存放Controller类和Areas的项目。2.修改Mvc配置
在WebHostDemo项目中修改ConfigureServices函数: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程序集注入到主程序中了。当然还可以通过另一种方式:
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:
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
MyArea1 -Controllers -Home.cs -Views -Home Index.cshtml
4.为Controller添加Area
[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已经上传到群文件中,仅供参考。
相关文章推荐
- 如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas
- 使用Areas分离ASP.NET MVC项目
- 使用Areas分离ASP.NET MVC项目
- 使用Areas分离ASP.NET MVC项目
- 使用Areas分离ASP.NET MVC项目
- 使用Areas分离ASP.NET MVC项目
- 使用Areas分离ASP.NET MVC项目
- [转] <收录>使用Areas分离ASP.NET MVC项目
- 使用Areas分离ASP.NET MVC项目
- 使用Areas分离ASP.NET MVC项目
- 从零开始写C# MVC框架之--- 使用Areas分离ASP.NET MVC项目
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- 使用Areas分离ASP.NET MVC项目
- 使用Areas(区域)分离ASP.NET MVC 项目
- Asp.net mvc中controller与view间的如何传递数据
- Asp.net MVC 示例项目"Suteki.Shop"分析之---Controller
- 如何将asp.net MVC2项目升级为MVC3项目(微软官方自动升级工具:ASP.NET MVC 3 Application Upgrader )
- 讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute
- ASP.NET&C#学习笔录2(vs2010项目如何在vs2008中打开 )
- ASP.NET MVC2.0的项目如何升级到3.0??