複数の項目で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はすでにグループファイルにアップロードされており、参考にしてください.