Orchard Core Framework:ASP.NET Core 模塊化,多租戶框架html
上一篇編寫Orchard Core一分鐘搭建ASP.NET Core CMS ,介紹ASP.NET Core CMS ,Orchard的ASP.NET Core版,同時對應有一個ASP.NET Core框架。git
支持模塊化和多租戶。整個Orchard Core就是經過一個個模塊Module組成的github
首先建立一個空的 ASP.NET Core Web應用程序爲基礎。下面學習模塊的創建及使用。web
首先在以前建立好的ASP.NET Core Web應用程序中,新建一個 類庫(.NET Core)項目 爲ModuleWeb。shell
而後添加 Microsoft.AspNetCore.Mvc 及 OrchardCore.Module.Targets 引用。json
命令以下:app
Install-Package Microsoft.AspNetCore.Mvc框架
Install-Package OrchardCore.Module.Targets -Preide
接着咱們就能夠添加一個Views 文件夾和 Controllers 文件夾,以及添加一個HomeController和對應的視圖頁。模塊化
因爲類庫上沒有很好的新建快捷方式,建議從ASP.NET Core Web 項目中複製。
public class HomeController : Controller
{
public IActionResult Index() { return View(); } }
Home/Index.cshtml
<h1>Hello from ModuleWeb /Home/Index</h1> <h2>LineZero</h2>
Module 建立好了,接下來在ASP.NET Core Web 項目中引用。
首先須要在Web 項目添加一個OrchardCore.Application.Mvc.Targets 包
Install-Package OrchardCore.Application.Mvc.Targets -Pre
接着將ModuleWeb 項目引用進來。
更改Startup.cs 以下:
public class Startup
{
public void ConfigureServices(IServiceCollection services) { services.AddModules(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseModules(); } }
注意項目中引用爲 Microsoft.AspNetCore 以及Microsoft.ApplicationInsights.AspNetCore,配置以下
<ItemGroup> <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" /> <PackageReference Include="Microsoft.AspNetCore" Version="2.0.0" /> <PackageReference Include="OrchardCore.Application.Mvc.Targets" Version="1.0.0-beta1-3667" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\ModuleWeb\ModuleWeb.csproj" /> </ItemGroup>
接着運行程序,輸入 ModuleWeb/Home/index 以下
ModuleWeb 也就是正常可用。
多租戶,能夠直接根據配置讀取用戶設置,實現多域名或者多目錄。
先來添加一個ModuleInfo ,添加引用:
Install-Package OrchardCore.Module.Targets -Pre
Install-Package OrchardCore.Environment.Shell.Abstractions -Pre
接着添加一個Startup.cs,實現以下:
public class Startup : StartupBase { // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public override void ConfigureServices(IServiceCollection services) { } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public override void Configure(IApplicationBuilder app, IRouteBuilder routes, IServiceProvider serviceProvider) { app.Map("/hello", branch => branch.Run(context => context.Response.WriteAsync("Hello World From ModuleInfo LineZero")) ); app.Map("/info", branch => { branch.Run(context => { var shellSettings = context.RequestServices.GetRequiredService<ShellSettings>(); return context.Response.WriteAsync($"Request from tenant: {shellSettings.Name}"); }); }); } }
訪問/info 會讀取shellsetting 獲取用戶的配置。
在ASP.NET Core Web應用程序 中添加一個tenants.json 以下:
{ "Web": { "State": "Running", // "RequestUrlHost": "web.com", "RequestUrlPrefix": "web", "Features": [ "ModuleWeb", "ModuleInfo", "OrchardCore.Mvc" ], "MyConnectionString": "connectionstring1" }, "Info": { "State": "Running", // "RequestUrlHost": "info.com, info.org", "RequestUrlPrefix": "info", "Features": [ "ModuleInfo", "OrchardCore.Mvc" ], "MyConnectionString": "connectionstring2" } }
並更改Startup.cs
public void ConfigureServices(IServiceCollection services) { services.AddModules(c=>c.WithTenants()); }
接着將ModuleInfo 添加到Web應用程序,運行應用程序。
訪問/web/info ,以下會輸出Web
訪問/info/info ,以下會輸出Info
而後Web 配置下才會有兩個模塊,Info 配置下只有一個模塊。能夠根據這些信息來作用戶隔離和區分。
對於Orchard Core Framework 更深刻的瞭解,能夠查看GitHub 上的源碼:https://github.com/OrchardCMS/OrchardCore