Orchard Core Framework:ASP.NET Core 模塊化,多租戶框架

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 

相關文章
相關標籤/搜索