如何在多個項目中分離Asp.Net Core Mvc的Controller和Areas

前言

軟件系統中老是但願作到鬆耦合,項目的組織形式也是同樣,本篇文章將介紹在ASP.NET CORE MVC中怎麼樣將Controller與主網站項目進行分離,而且對Areas進行支持。html

實踐

1.新建項目

新建兩個ASP.NET Core Web應用程序,一個命名爲:WebHostDemo 另外一個名爲: Web.Controllers ,看名字能夠知道第一個項目是主程序項目,第二個是存放Controller類和Areas的項目。git

2.修改Mvc配置

在WebHostDemo項目中修改ConfigureServices函數:github

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程序集註入到主程序中了。固然還能夠經過另外一種方式:shell

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。mvc

接下來修改Configure函數以,經過修改路由讓Mvc支持Areas:app

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項目中創建以下目錄結構:
Areaside

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已經上傳到羣文件中,僅供參考。

相關文章
相關標籤/搜索