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="..\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 


原文地址:https://www.cnblogs.com/linezero/p/8093234.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zookeeper超详细的面试题

转载自 Zookeeper超详细的面试题 1.ZooKeeper是什么&#xff1f; ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;它是集群的管理者&#xff0c;监视着集群中各个节点的状态根据节点提交的反馈…

创建单链表并遍历

以下函数createlink的功能是创建带头结点的单链表&#xff0c;并输入n个整数&#xff0c;依次为各节点的数据域赋值。 #include<stdio.h> #include<stdlib.h>typedef struct Node{int data;struct Node* next; }A;A *createlink(int n) {A *hNULL,*p,*s;int i,x;p…

【什么是泛型,有什么好处】

✅什么是泛型&#xff0c;有什么好处 ✅典型回答✅泛型是如何实现的✅什么是类型擦除&#xff1f;&#x1f4dd;C语言对泛型的支持&#x1f4dd;泛型擦除的缺点有哪些&#xff1f; ✅对泛型通配符的理解&#x1f4dd;泛型中上下界限定符 extends 和 super 有什么区别&#xff1…

P4047-[JSOI2010]部落划分【最小生成树】

正题 题目链接:https://www.luogu.org/problemnew/show/P4047 题目大意 将nnn个点分成kkk个部分&#xff0c;使得最近的两个部分的距离尽可能远。 解题思路 最小生成树连接到只剩下kkk个部分时停止就好了。 codecodecode #include<cstdio> #include<cmath> #in…

.NET Core容器化@Docker

温馨提示&#xff1a;本文适合动手演练&#xff0c;效果更佳。1. 引言我们知道. NET Core最大的特性之一就是跨平台&#xff0c;而对于跨平台&#xff0c;似乎大家印象中就是可以在非Windows系统上部署运行。而至于如何操作&#xff0c;可能就有所欠缺。那这一节我们就结合简单…

Netty面试题(2020最新版)

转载自 Netty面试题&#xff08;2020最新版&#xff09; 1.Netty 是什么&#xff1f; Netty是 一个异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的&#xff0c;它封装了jdk的nio&#xff0c;让我们使用起来更加…

安卓布局学习:

安卓布局学习&#xff1a; 线性布局LinearLayout 1、orientation方向属性&#xff0c;两种布局 属性值意义horizontal水平布局vertical垂直布局 2、gravity属性 属性值意义rightbottomright居右 相对布局和线性布局的区别 最主要的区别是&#xff0c;相对布局可以单独指定…

P4945-最后的战役【dp,离散化】

正题 题目大意:https://www.luogu.org/problemnew/show/P4945 题目大意 第isi\ si s可以 获取1∼i1\sim i1∼i中最大的能量获取1∼i1\sim i1∼i中类型为xix_ixi​的能量下一秒能量加倍(只能使用mmm次&#xff0c;不可以连续使用) 求最大获取能量 解题思路 考虑dpdpdp&…

.NET开源三周年

3 年前&#xff0c;微软宣布开源 .NET 框架的大部分内容。正如Scott Hanselman在Connect 2016主题演讲中所说的那样&#xff0c;微软一直在做重大贡献&#xff1a;开源 .NET 框架并不总是一帆风顺的&#xff0c;可以肯定的说&#xff0c;总是会遇到一些困难。在过去的三年中&am…

Viewpager的使用

第一&#xff1a; 首先在activity_main中加入Viewpager控件 <androidx.viewpager.widget.ViewPagerandroid:layout_width"match_parent"android:layout_height"match_parent"android:id"id/viewPager"></androidx.viewpager.widget.Vi…

消息中间件MQ与RabbitMQ面试题(2020最新版)

转载自 消息中间件MQ与RabbitMQ面试题&#xff08;2020最新版&#xff09; 为什么使用MQ&#xff1f;MQ的优点 简答 异步处理 - 相比于传统的串行、并行方式&#xff0c;提高了系统吞吐量。 应用解耦 - 系统间通过消息通信&#xff0c;不用关心其他系统的处理。 流量削锋 …

P4981-父子【数学,树】

正题 题目链接:https://www.luogu.org/problemnew/show/P4981 题目大意 求nnn个点的有根树个数。 解题思路 根据CayleyCayleyCayley定理nnn个点的有根树个数是nn−1n^{n-1}nn−1 证明&#xff1a; 先证明标号树枝的个数 先是nnn个没有边的点&#xff0c;加入了kkk条边后剩下…

IdentityServer4 第三方快速入门和示例

这些示例不由IdentityServer团队维护。 IdentityServer团队提供链接到了社区示例&#xff0c;但不能对示例做任何保证。 如有问题&#xff0c;请直接与作者联系。各种ASP.NET Core安全示例https://github.com/leastprivilege/AspNetCoreSecuritySamplesIdentityServer4 EF 和 A…

开发规范以及注意点

preiteer在保存时不格式化文件 Vscode回车到下一行的时候&#xff0c;不保留缩进 加上这一句即可 "editor.autoIndent": "keep",<template><div class"strategy-edit" v-loading"loading"><el-formclass"strateg…

Java并发编程面试题(2020最新版)

转载自 Java并发编程面试题&#xff08;2020最新版&#xff09; 基础知识 并发编程的优缺点 为什么要使用并发编程&#xff08;并发编程的优点&#xff09; 充分利用多核CPU的计算能力&#xff1a;通过并发编程的形式可以将多核CPU的计算能力发挥到极致&#xff0c;性能得到…

P1445-[Violet]樱花【数学】

正题 题目链接:https://www.luogu.org/problemnew/show/P1445 题目大意 求有多少个x,yx,yx,y满足 1x1y1n!\frac{1}{x}\frac{1}{y}\frac{1}{n!}x1​y1​n!1​ 解题思路 xyxy1n!\frac{xy}{xy}\frac{1}{n!}xyxy​n!1​ n!(xy)xyn!(xy)xyn!(xy)xy xy−n!(xy)0xy-n!(xy)0xy−n!(xy…

.NET Core容器化之多容器应用部署@Docker-Compose

1.引言紧接上篇.NET Core容器化Docker&#xff0c;这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理&#xff0c;然后再介绍多容器应用的部署问题。2. Why Need Nginx.NET Core中默认的Web Server为Kestrel。Kestrel is great for serving dynamic content from …

nssl1320,jzoj(初中)2108-买装备【dfs,水题】

正题 题目大意 nnn个物品有ai,bi,via_i,b_i,v_iai​,bi​,vi​&#xff0c;要求 选择若干个物品使得aia_iai​之和大于AAA&#xff0c;bib_ibi​之和大于BBB&#xff0c;viv_ivi​之和最小 解题思路 暴力dfsdfsdfs选哪些。 时间复杂度O(2n)O(2^n)O(2n) codecodecode #include…

vue3子组件调用父组件的方法

子组件调用父组件的方法 首先在父组件中&#xff1a; <ImportExcel onQuery"onQuery" />使用这个符号在子组件中注入这个方法 在子组件中调用&#xff1a; 首先声明&#xff1a; const emit defineEmits([onQuery]); 之后调用&#xff1a;emit(‘onQuery’)…

ServerSuperIO Designer IDE 发布,打造物联网通讯大脑,随心而联。附:C#驱动源代码。

1.概况注&#xff1a;ServerSuperIO Designer IDE 同行业网友随便使用&#xff0c;不涉及到软件使用限制的问题。从2015年到现在的将近两年的时间&#xff0c;一直在开发、完善ServerSuperIO&#xff08;SSIO&#xff09;的基础框架&#xff0c;包括&#xff1a;多通讯机制、稳…