如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas
前言
軟件系統(tǒng)中總是希望做到松耦合,項(xiàng)目的組織形式也是一樣,本篇文章將介紹在ASP.NET CORE MVC中怎么樣將Controller與主網(wǎng)站項(xiàng)目進(jìn)行分離,并且對(duì)Areas進(jìn)行支持。
實(shí)踐
1.新建項(xiàng)目
新建兩個(gè)ASP.NET Core Web應(yīng)用程序,一個(gè)命名為:WebHostDemo 另一個(gè)名為: Web.Controllers ,看名字可以知道第一個(gè)項(xiàng)目是主程序項(xiàng)目,第二個(gè)是存放Controller類和Areas的項(xiàng)目。
2.修改Mvc配置
在WebHostDemo項(xiàng)目中修改ConfigureServices函數(shù):
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()); }
這樣就將另一個(gè)項(xiàng)目中的Controller程序集注入到主程序中了。當(dāng)然還可以通過另一種方式:
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函數(shù)以,通過修改路由讓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項(xiàng)目中建立如下目錄結(jié)構(gòu):
Areas
4.為Controller添加Area
[Area("MyArea1")]public class HomeController : Controller{ ?
?public IActionResult Index() ? ?{ ?
? ? ? ?return View();} }
最后
還有一件事很重要,當(dāng)我們這么將項(xiàng)目進(jìn)行分離后,DEBUG主程序?qū)]辦法找到Areas和Views目錄,所以DEBUG時(shí),要將這些目錄Copy到主程序代碼根目錄,當(dāng)然如果是發(fā)布程序的話就沒有這個(gè)問題。
原文地址:http://www.cnblogs.com/maxzhang1985/p/6683263.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用ElasticSearch,Kiba
- 下一篇: asp.net core源码飘香:Con