zoukankan      html  css  js  c++  java
  • Orchard Core Framework:ASP.NET Core 模块化,多租户框架

    Orchard Core Framework:ASP.NET Core 模块化,多租户框架

    上一篇编写Orchard Core一分钟搭建ASP.NET Core CMS ,介绍ASP.NET Core CMS ,Orchard的ASP.NET Core版,同时对应有一个ASP.NET Core框架。

    支持模块化和多租户。整个Orchard Core就是通过一个个模块Module组成的

    首先创建一个空的 ASP.NET Core Web应用程序为基础。下面学习模块的建立及使用。

    模块化

    首先在之前创建好的ASP.NET Core Web应用程序中,新建一个 类库(.NET Core)项目 为ModuleWeb。

    然后添加 Microsoft.AspNetCore.Mvc 及 OrchardCore.Module.Targets 引用。

    命令如下:

    Install-Package Microsoft.AspNetCore.Mvc

    Install-Package OrchardCore.Module.Targets -Pre

     接着我们就可以添加一个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="..ModuleWebModuleWeb.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 

     
    分类: ASP.NET Core
    好文要顶 关注我 收藏该文  
    4
    0
     
     
     
    « 上一篇: Orchard Core一分钟搭建ASP.NET Core CMS
    » 下一篇: .NET Core单文件发布静态编译AOT CoreRT
  • 相关阅读:
    ADB高级应用
    struts2 结合extjs实现的一个登录实例
    css3中关于伪类的使用
    漫谈并发编程(三):共享受限资源
    awk依照多个分隔符进行切割
    3星|《财经天下周刊》2017年21期:海外购几乎是亚马逊中国的最后一根救命稻草
    3星|《迷失的盛宴:中国保险产业1978-2014》:序言比正文精彩
    3星|《超级运营术》:互联网社区运营老手经验谈
    3星|《百年流水线》:流水线与工业、社会、艺术的交互史
    5星|戴蒙德《为什么有的国家富裕,有的国家贫穷》:为什么有的国家能发展出好制度
  • 原文地址:https://www.cnblogs.com/webenh/p/11574516.html
Copyright © 2011-2022 走看看