複数の項目でAspを分離する方法Net Core MvcのControllerとAreas

2782 ワード

前言


ソフトウェアシステムでは常に緩やかな結合を望んでいるが,プロジェクトの組織形式も同様であり,本稿ではASP.NET CORE MVCでは、Controllerとメインサイトプロジェクトをどのように分離し、Areasをサポートするか.

じっこう


1.新規プロジェクト


新しい2つのASP.NET Core Webアプリケーション、名前はWebHostDemo、名前はWeb.Controllers、名前を見ると、最初のプロジェクトはメインプログラムプロジェクトで、2番目は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の場合、これらのディレクトリをメインプログラムコードルートディレクトリにコピーする必要があります.もちろん、プログラムを公開する場合は問題ありません.
GitHub:https://github.com/maxzhang1985/YOYOFxもし覚えていたら、スターの下で、一緒に交流することを歓迎します.
.NET Coreオープンソース学習グループ:214741894
Demoはすでにグループファイルにアップロードされており、参考にしてください.