01
6

Visual Studio 2022.http 文件编辑器提供了一种便捷的方式来测试 ASP.NET Core项目,尤其是 API 应用。 编辑器提供一个 UI,用于:

创建和更新 .http 文件。
发送 .http 文件中指定的 HTTP 请求。
显示响应。
本文包含以下文档:

.http 文件语法。
如何创建 .http 文件。
如何从 .http 文件发送请求。
在何处查找可配置的 .http 文件选项。
如何使用 Visual Studio 2022 终结点资源管理器在 .http 文件中创建请求。
.http 文件格式和编辑器受 Visual Studio Code REST 客户端扩展的启发。 Visual Studio 2022 .http 编辑器将 .rest 识别为相同文件格式的替代文件扩展名。

先决条件
安装了“ASP.NET 和 Web 部署”工作负载的 Visual Studio 2022 版本 17.8 或更高版本。
.http 文件语法
以下部分介绍 .http 文件语法。

请求
HTTP 请求的格式为 HTTPMethod URL HTTPVersion,全部在一行上,其中:

HTTPMethod 是要使用的 HTTP 方法,例如:
OPTIONS
GET
HEAD
POST
PUT
PATCH
DELETE
TRACE
CONNECT
URL 是向其发送请求的 URL。 此 URL 可以包括查询字符串参数。 此 URL 不必指向本地 Web 项目。 它可以指向 Visual Studio 可以访问的任何 URL。
HTTPVersion 是可选的,指定应使用的 HTTP 版本,即 HTTP/1.1、HTTP/2 或 HTTP/3。
通过使用行 ### 作为分隔符,文件可以包含多个请求。 以下示例在一个文件中显示了三个请求,说明了此语法:
复制
GET https://localhost:7220/weatherforecast

GET https://localhost:7220/weatherforecast?date=2023-05-11&location=98006

GET https://localhost:7220/weatherforecast HTTP/3

请求标头
若要添加一个或多个标头,请将每个标头立即添加到请求行后其自己的行中。 不要在请求行与第一个标头之间或后续标头行之间包含任何空白行。 格式为 HeaderName: Value,如以下示例所示:

HTTP

复制
GET https://localhost:7220/weatherforecast
Date: Wed, 27 Apr 2023 07:28:00 GMT

GET https://localhost:7220/weatherforecast
Cache-Control: max-age=604800
Age: 100

重要

调用使用标头进行身份验证的 API 时,请勿将任何机密提交到源代码存储库。 请参阅本文后面的支持存储机密的方法,例如 ASP.NET Core 用户机密、Azure Key Vault 和 DPAPI 加密。

请求正文
在空白行后面添加请求正文,如以下示例所示:

POST https://localhost:7220/weatherforecast
Content-Type: application/json
Accept-Language: en-US,en;q=0.5

{
"date": "2023-05-10",
"temperatureC": 30,
"summary": "Warm"
}

注释
以 # 或 // 开头的行是注释。 当 Visual Studio 发送 HTTP 请求时,将忽略这些行。

变量
以 @ 开头的行使用语法 @VariableName=Value 定义变量。

可以在稍后在文件中定义的请求中引用变量。 通过用双大括号括起名称 {{ 和 }} 来引用它们。 以下示例演示在请求中定义和使用的两个变量:

@hostname=localhost
@port=44320
GET https://{{hostname}}:{{port}}/weatherforecast
可以使用文件前面定义的其他变量的值来定义变量。 以下示例在请求中使用一个变量,而不是前面示例中所示的两个变量:

@hostname=localhost
@port=44320
@host={{hostname}}:{{port}}
GET https://{{host}}/api/search/tool
环境文件
若要在不同的环境中为变量提供不同的值,请创建名为 http-client.env.json 的文件。 在 .http 文件所在的同一目录中或其中一个父目录中找到该文件。 下面是环境文件的示例:

{
"dev": {
"HostAddress": "https://localhost:44320"
},
"remote": {
"HostAddress": "https://contoso.com"
}
}

环境文件是一个 JSON 文件,其中包含一个或多个命名环境,如前面的示例中的“dev”和“remote”。 每个命名环境都包含一个或多个变量,例如前面的示例中的 HostAddress。 从环境文件中引用变量的方式与其他变量相同,如以下示例所示:

HTTP
GET {{HostAddress}}/api/search/tool

发送请求时用于变量的值由 .http 文件编辑器右上角的环境选择器下拉列表确定。 以下屏幕截图显示了选择器:

.http file editor with environment selector highlighted. The 'dev' environment is selected.

环境文件不必位于项目文件夹中。 Visual Studio 在 .http 文件所在的文件夹中查找环境文件。 如果它不在该文件夹中,Visual Studio 会浏览父目录来查找它。 找到名为 http-client.env.json 的文件后,搜索将结束。 将使用最接近 .http 文件的文件。

创建或编辑 .http 文件后,可能需要关闭并重新打开项目,以查看环境选择器中反映的更改。 按 F6 选择环境选择器。

Visual Studio 在以下情况下显示警告:

.http 文件引用了未在 .http 文件或环境文件中定义的变量。环境文件包含 .http 文件中未引用的变量。在环境文件中定义的变量可以与 .http 文件中定义的变量相同,也可以不同。 如果在 .http 文件和环境文件中都定义了变量,则 .http 文件中的值将替代环境文件中的值。

10
5

Orchard Core 中文文档

0
归档:2024年5月分类:C#和.NET

Orchard Core 是基于 Orchard CMS 使用 ASP.NET Core 重新构建的。

Orchard Core 由两个不同的目标组成:

Orchard Core Framework: 一个应用程序框架,用于构建模块化、多租户 的ASP.NET Core应用程序。
Orchard Core CMS: 一个建立在Orchard Core Framework之上的网络内容管理系统(CMS)。

需要注意框架和 CMS 之间的差异非常重要。一些想要开发 SaaS 应用程序的开发人员只会对模块化框架感兴趣。其他想要构建可管理网站的用户将专注于 CMS 并构建模块来增强其网站或整个生态系统。

Building Software as a Service (SaaS) solutions with the Orchard Core Framework

了解Orchard Core Framework是独立于nuget.org上的CMS分发的,这一点非常重要。我们在 https://github.com/OrchardCMS/OrchardCore.Samples 提供了一些示例程序,它将指导您如何仅使用Orchard Core Framework来构建模块化 和 多租户 的应用程序,而无需任何 CMS 特定功能。

我们的目标之一是启用托管应用程序的基于社区的生态系统,这些生态系统可以通过模块(如电子商务系统、博客引擎等)进行扩展。Orchard Core Framework支持模块化环境,允许不同的团队处理应用程序的不同部分,并使组件跨项目可重用。

B站演示视频:https://www.bilibili.com/video/BV17T4y177fW/

使用Orchard Core CMS 构建网站

Orchard Core CMS 是基于Orchard CMS 使用ASP.NET Core 重写的。它不仅仅是一个端口,因为我们希望大幅提高性能,并尽可能与的ASP.NET Core 的开发模型一致。

性能. 这可能是开始使用Orchard Core CMS时最明显的变化。这对CMS来说是非常快的。速度如此之快,以至于我们甚至都没有关心输出缓存模块的工作。让你体验一下,没有缓存的Orchard Core CMS比以前的版本快了20倍。

跨平台. 现在,您可以在 Windows、Linux 和 macOS 上开发和部署Orchard Core CMS。我们也有 Docker 映像可供使用。

文档数据库 抽象化. Orchard Core CMS仍然需要一个关系数据库,并且兼容SQL Server, MySQL, PostgreSQL和SQLite,但是它现在使用的是一个抽象化文档数据库(YesSql),它提供了一个文档数据库API来存储和查询文档。对于CMS系统来说,这是一种更好的方法,可以显著提高性能。

NuGet 包. 模块和主题现在作为NuGet包共享。用Orchard Core CMS创建一个新网站其实很简单,只需从NuGet gallery引用一个元包。它还意味着更新到一个新的版本只涉及更新这个包的版本号。

实时预览. 在编辑内容项时,甚至在保存内容之前,就可以实时看到它在站点上的样子。它也适用于模板,您可以浏览任何页面,在您键入更改时检查更改对模板的影响。

Liquid 模板支持. 编辑者可以使用Liquid模板语言安全地更改HTML模板。 选择它的原因在于它有据可查(Jekyll,Shopify等),又非常安全。

自定义查询. 我们希望为开发人员提供一种尽可能简单地访问他们所有数据的方式。我们创建了一个模块,允许您创建自定义临时 SQL 和 Lucene 查询,这些查询可用于重新显示自定义内容或公开为 API 终结点。您可以使用它创建高效的查询,或将数据公开给 SPA 应用程序。

部署计划. 部署计划是可以包含构建网站的内容和元数据的脚本。您现在可以包含二进制文件,甚至可以使用它们来远程部署站点,例如从准备环境部署到生产环境。它们也可以是NuGet软件包的一部分,允许你发送预定义的网站。

可伸缩性. 由于 Orchard Core 是一个多租户系统,因此您可以通过单个部署托管尽可能多的网站。然后,典型的云计算机可以并行承载数千个站点,包括数据库、内容、主题和用户隔离。

工作流. 创建内容审批工作流、响应 Webhook、在提交表单时执行操作,以及要使用用户友好的 UI 实现的任何其他流程。

GraphQL.我们提供非常灵活的 GraphQL API,以便任何授权的外部应用程序都可以重用您的内容,如 SPA 应用程序或静态站点生成器。

不同的网站构建策略

Orchard Core CMS支持所有主要的网站建设策略:

完整 CMS. 在此模式下,网站使用主题和模板来呈现您的内容,旨在实现很少或完全没有自定义开发。

解耦 CMS(Decoupled CMS). 除了内容管理端之外,网站从空白开始。您可以使用 Razor Pages 或 MVC 操作创建所需的所有模板,并通过内容服务访问您的内容。

无头 CMS(Headless CMS). 该网站只管理内容,您创建一个单独的应用程序,该应用程序将使用 GraphQL 或 REST API 获取托管内容。参考: B站,油管

The latest released version of Orchard Core is 1.5.0. The release notes can be found on https://github.com/OrchardCMS/OrchardCore/releases/tag/v1.5.0

该软件几乎已准备好最终发布。 不进行功能开发或软件增强; 在此阶段仅允许严格限定范围的错误修复,除非出现重大的错误。

这是一个更详细的路线图.

Clone the repository using the command git clone https://github.com/OrchardCMS/OrchardCore.git and checkout the main branch for the latest release, or the dev branch for the cutting-edge version.

使用命令 git clone https://github.com/OrchardCMS/OrchardCore.git 克隆此仓库,并切换到 main 分支。

按照这个教程 Training Demo Module 你将学习如何开发Orchard Core模块。(这里是包含中文翻译的版本:码云仓库,含全部中文注释)
观看Orchard Core演示的ASP.NET社区站立视频:B站 youtube
参考这个示例 https://github.com/OrchardCMS/OrchardCore.Samples 它将引导你如何构建一个 模块化 和 多租户 的应用程序。

命令行
Install the latest version of the .NET SDK from this page https://dotnet.microsoft.com/download
Next, navigate to D:\OrchardCore\src\OrchardCore.Cms.Web or wherever your folder is on the commandline in Administrator mode.
Call dotnet run.
Then open the http://localhost:5000 URL in your browser.
你也可以参考 代码生成模板文档 从预定义的模板创建新的应用程序。

Visual Studio

For more details on the various development tools we recommend for using with Orchard Core check out the Development Tools documentation page.

Download Visual Studio 2022 (any edition) from https://www.visualstudio.com/downloads/.
Open OrchardCore.sln and wait for Visual Studio to restore all Nuget packages.

Ensure OrchardCore.Cms.Web is the startup project and run it.
Optionally install the Lombiq Orchard Visual Studio Extension to add some useful utilities to your Visual Studio such as an error log watcher or a dependency injector.
Optionally install the code snippets from the Orchard Dojo Library to quickly generate code in some common scenarios during module and theme development.

Docker

运行 docker run --name orchardcms orchardproject/orchardcore-cms-linux:latest
Docker images and parameters can be found at https://hub.docker.com/u/orchardproject/

10
1

若改造项目,也因历史遗留问题,数据库表设计也可能存在不合理,此时从头开始再搭建如此庞大的架子,感觉会有点虚空,同时也要考虑团队内部情况,不是那么容易上手,反而可能会违背初心,花更多时间和精力在各种模型理解上

我们完全可以为后续做铺垫,先搭建出底层基本设施,再基于此做灵活扩展即可,每个公司项目具体情况都不一样,比如仓储模式可能需要结合项目进行对应 改造,仓储只是提供了一种基本思想,若真将网上普遍流传的模式照搬可能并不是那么好用,可能会认为仓储莫不是一种反模式

.NET Core模块化插件

.NET Core内置提供了AssemblyLoadContext加载dll插件方式实现模块化,然后将其进行注册

        var mvcBuilder = services.AddMvc();
        foreach (var module in modules)
        {
            // Register controller from modules
            mvcBuilder.AddApplicationPart(module.Assembly);
        }

这种方式虽可行,在我看来只能作为一种临时解决方案并不利于长期,因为需额外创建一个新的项目,然后加载所生成dll,由于没有底层设施做支撑,所以极易引起版本不一致问题,而且手动被迫性质太强,实现模块化方案最终的目标则只需关注业务逻辑实现,我们来看看OrchardCore如何实现模块化。

OrchardCore模块化思想

这里我们并不讨论和ABP vNext二者谁更强大,没有任何意义,比如需结合现有项目情况、项目大小、是否为多租户、实施难度等等多方面考虑才能得出基本结论,而不是一味追求当前主流

比如我们只是想实现模块化方案,建议选择OrchardCore来实施,因为很简单,我们可将其剥离为我所用,而后结合项目情况是否考虑利用ABP vNext来进行分层处理。借鉴核心思想、才能保证一切可在控制范围内

首先我们先从整体上对OrchardCore做个认识,细枝末节暂不考虑:基于ASP.NET Core多租户模块化应用框架。

版本管理:无论是底层设施、基本框架、模块都通过包管理,同时框架和包版本基本(包管理走框架包版本)可以统一管理(对于版本升级很重要)

核心思想:模块实现模块特性,通过MSBuild构建主程序所添加实现模块特性的模块包,底层设施扫描模块特性将其注册到容器中,当然模块和模块特性都可进行基本信息描述

OrchardCore模块化原理

整个项目架构如下图所示

file

OrchardCore:底层设施以及可能需要添加的组件(比如本地化、日志、文件存储、缓存、Lucene等)

OrchardCore.Frameworks:MVC框架

OrchardCore.Modules:模块化包(比如邮件服务、后台作业服务、第三方集成等等)

OrchardCore.Modules.Cms:Cms模块包

OrchardCore.Themes:主题管理

OrchardCore.Cms.Web:主程序

我以内置所提供示例程序给大家讲解整个详细流程,而后有需要更细致了解的童鞋就可以很快上手了,如下示例主程序加载示例模块,主程序直接采用引用该示例模块(实际则是通过nuget下载该模块)

file

正常情况下我们通过nuget直接下载的是程序包,而OrchardCore对于入口则是利用MSBuild加载targets文件(其他组件则直接下载对应包),而targets引用对应包,通过这种中转方式根据我的理解主要解决了两个问题,其一则是可以屏蔽底层设施包(一次性下载),最重要的是通过targets文件可自动添加主程序程序集所加载模块包特性

是不是感觉有点懵,那到底是如何加载模块包特性的呢?来,请看如下图,我们以实际操作从头再来做一个完整梳理(注意:为排版美观,如下都将省略OrchardCore前缀)

file

【1】创建Mvc.Web程序,在nuget上下载Application.Mvc.Targets包

【2】创建Mvc.HelloWorld模块,在nuget上下载引用Module.Targets包

【3】Mvc.Web主程序引用我们所使用的Mvc.HelloWorld模块

【4】Application.Mvc.Targets包引用Application.Targets(引入底层设施)和MVC.Core(引入MVC框架)

【5】示例模块引入模块包,该包中存在模块特性(Module类)

【6】Application.Targets包下存在Application.Targets.targets文件,由于主程序引用了该包,添加所引用实现模块特性的包程序集信息到主程序集

到这里我们已经研究完主程序如何识别模块包,接下来则是如何加载模块包以及对应注册服务信息

OrcharCore核心在于OrchardCore和OrchardCore.Abstractions这两个底层设施包

归根到底,其底层设施源码一部分可能从官方源码拷贝过来(自我猜测),为实现多租户模式,势必要构建租户的容器和路由中间件,这中间就涉及在容器中需要维护每一个租户上下文(ShellContext),并且也要跟踪每个租户的状态。

ModularTenantContainerMiddleware作为创建租户容器中间件

ModularTenantRouterMiddleware作为租户路由中间件

30
6

在本指南中,您将使用项目模板将Orchard Core设置为内容管理系统。

您需要什么

.NET SDK的当前版本。您可以从以下网址下载它:https://dotnet.microsoft.com/download.
文本编辑器和终端,您可以在其中键入 dotnet 命令。

创建项目

有多种创建Orchard Core网站和模块的方法。您可以在这里了解更多信息。

在本指南中,我们将使用“代码生成模板”。您可以使用此命令安装最新稳定版本的模板:

dotnet new install OrchardCore.ProjectTemplates::1.5.0-*

注意

要使用模板的开发分支,请添加 --nuget-source https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json

创建一个空文件夹来存放你的网站。打开终端,进入该文件夹并运行以下命令:

dotnet new occms -n MySite

这样就在一个名为 MySite 的文件夹中创建了一个新的Orchard Core CMS项目。

设置站点

应用程序已经由模板创建,但尚未设置。

通过执行以下命令启动应用程序:

dotnet run --project .\MySite\MySite.csproj

Note

如果你正在使用模板的开发分支,请在运行应用程序之前运行dotnet restore .\MySite\MySite.csproj --source https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json

现在您的应用程序应该正在运行,并监听以下端口: 现在监听 on: https://localhost:5001 和 on: http://localhost:5000。应用已经启动,按 Ctrl+C 可以关闭应用。

在浏览器中打开 https://localhost:5001 可以显示设置屏幕。

为了演示的目的,我们将使用 Blog 配方创建网站。Blog 配方是 Orchard Core 的 入门配方之一,其中包含一系列功能和配置 Orchard Core 网站的步骤。

完成设置表单,选择 Blog 配方和 SQLite 数据库。

提交表单后,几秒钟后您将可以看到一个博客站点。

为了配置并开始编写内容,您可以转到 https://localhost:5001/admin

概要

您刚刚创建了一个由Orchard Core CMS驱动的博客引擎。

30
6

你将要构建什么

您将创建一个模块化的 ASP.NET Core MVC 网络应用程序,类似于包含在 Orchard Core 中的 "Hello World" 应用程序示例。它包括一个网络应用程序和一个模块。网络应用程序提供了布局,而模块注册了路由并响应首页请求。您可以参考 Orchard Core 中的以下项目以获取更多信息。

src/OrchardCore.Mvc.Web
src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld
所需材料
当前版本的 .NET SDK。您可以从此处下载: https://dotnet.microsoft.com/download.
一个文本编辑器和一个终端,您可以在其中运行 dotnet CLI 命令。
创建 Orchard Core 网站和模块
有不同的方法可以为 Orchard Core 创建网站和模块。您可以在 此处 了解更多信息。

在本指南中,我们将使用我们的代码生成模板。您可以使用以下命令安装模板的最新稳定版本: dotnet new install OrchardCore.ProjectTemplates::1.5.0-*

Note

如果想使用模板的开发分支,请添加 --nuget-source https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json

创建一个名为OrchardCore.Mvc的空文件夹,它将包含我们的项目。打开一个终端,进入该文件夹并运行以下命令来创建Web应用程序:

dotnet new ocmvc -n OrchardCore.Mvc.Web

接下来,创建“ Hello World”模块。

dotnet new ocmodulemvc -n OrchardCore.Mvc.HelloWorld

将Web应用程序中指向该模块的项目引用添加到其中。

dotnet add OrchardCore.Mvc.Web reference OrchardCore.Mvc.HelloWorld

可选地,您可以添加一个解决方案文件,该文件引用了Web应用程序和模块,以便在Visual Studio中打开解决方案。

dotnet new sln -n OrchardCore.Mvc
dotnet sln add OrchardCore.Mvc.Web\OrchardCore.Mvc.Web.csproj
dotnet sln add OrchardCore.Mvc.HelloWorld\OrchardCore.Mvc.HelloWorld.csproj
测试生成的应用程序
从包含两个项目的OrchardCore.Mvc根文件夹中运行以下命令启动Web应用程序:

dotnet run --project .\OrchardCore.Mvc.Web\OrchardCore.Mvc.Web.csproj

注意

如果您正在使用模板的开发分支,请在运行应用程序之前运行dotnet restore .\MySite\MySite.csproj source https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json

现在,您的应用程序应该在以下端口上运行和侦听:

现在侦听:https://localhost:5001
现在在http://localhost:5000上进行监听 应用程序已启动。按Ctrl+C关闭。
打开浏览器并导航至https://localhost:5001/OrchardCore.Mvc.HelloWorld/Home/Index。它应该会显示Hello from OrchardCore.Mvc.HelloWorld

布局来自主Web应用程序项目,而控制器、操作和视图来自模块项目。

注册自定义路由

默认情况下,模块中的所有路由都遵循模式{area}/{controller}/{action},其中 {area} 是模块名称。我们将更改模块中视图的路由以响应主页请求。

OrchardCore.Mvc.HelloWorldStartup.cs文件中,在Configure()方法中添加一个自定义路由。


    routes.MapAreaControllerRoute(
        name:“Home”,
        areaName:“OrchardCore.Mvc.HelloWorld”,
        pattern:“”,
        defaults:new {controller =“Home”,action =“Index”}
在Orchard Core中创建模块应用程序¶
在Orchard Core中,一个模块是指封装在自己的项目中的功能区块。这些模块可以通过应用程序进行加载和卸载,可以根据需要启用或禁用。在本教程中,您将学习如何创建一个用于 Orchard Core 的 ASP.NET Core MVC 模块应用程序。

先决条件

.NET Core SDK 3.1或更高版本。
Visual Studio 2019或更高版本。
步骤

1. 创建一个新的网站

打开 Visual Studio 并选择 创建新项目。
在左侧选择 ASP.NET Core Web 应用程序。
在右侧选择 Web 应用程序。
输入项目名称和位置,然后单击 创建。

2. 安装 Orchard Core

打开命令提示符。
执行以下命令:
dotnet new -i OrchardCore.ProjectTemplates::1.0.0-*
创建一个名为 OrchardCore.Web 的新文件夹,并在其中运行以下命令:
dotnet new ocmvc -n YourModuleName
完成后,切换到新的文件夹,然后运行以下命令启动应用程序:
dotnet run
导航到 https://localhost:5001 来查看网站。

3. 创建一个模块

在新文件夹的根目录中,创建一个名为 Modules 的文件夹。
在 Modules 文件夹中创建一个名为 YourModuleName 的新文件夹。
在 YourModuleName 文件夹中,创建一个新的 .NET Core 类库 项目。
选择 netstandard2.0 作为目标框架。
将生成的默认文件删除。
打开 YourModuleName.csproj 文件并添加以下 Orchard Core引用:

  
  

右键单击项目并选择 添加 -> 新项目文件夹。该目标文件夹应该是你的 Views 因此输入 Views 作为目录名称。 添加 Home 目录和 Index.cshtml 视图文件。 打开 Startup.cs 文件并将以下代码添加到 ConfigureServices* 方法的末尾:

services.AddMvc().AddOrchardCoreMvc();
这将向依赖注入容器注册OrchardCore MVC的必要服务。 现在,要将新的模块添加到 Orchard Core应用程序中,请打开 OrchardCore.Web.csproj* 文件并添加以下行:


  

重启应用程序,并导航到 https://localhost:5001 将显示 Orchard Core的默认欢迎页面。

4. 更改默认欢迎页面

打开 YourModuleName 项目的 Controllers 文件夹。
创建一个名为 HomeController.cs 的新文件并输入以下内容:
using Microsoft.AspNetCore.Mvc;

namespace YourModuleName.Controllers
{
  public class HomeController : Controller
  {
    public ActionResult Index()
    {
      return View();
    }
  }
}
这将创建一个名为 Index 的动作,该动作在呈现视图时显示。 * 将以下代码复制到您的视图文件(Views/Home/Index.cshtml)中以显示 Hello World:

Hello World

重启应用程序并导航到 https://localhost:5001 将显示 Hello World 消息。 总结 您刚刚创建了一个使用Orchard Core的模块化ASP.NET Core MVC web应用程序。 它包括一个提供布局的Web应用程序和一个响应主页请求的自定义模块。 教程 https://www.youtube.com/watch?v=LoPlECp31Oo
20
6

OrchardCore入门指南

0
归档:2023年6月分类:C#和.NET

指南
无论你在构建什么,这些指南旨在让你尽快使用最新的Orchard Core项目版本和Orchard团队推荐的技术,进入工作状态。

入门指南
这些指南旨在在15-30分钟内完成,提供快速的、实践操作的指令,用于使用Orchard Core构建任何开发任务的“Hello World”。在大多数情况下,唯一的先决条件是一个.NET SDK和一个文本编辑器。

创建一个模块化的ASP.NET Core应用程序
在启动时运行代码
自定义编码设置
Orchard Core CMS指南
这些指南专门针对Orchard Core CMS:

创建Orchard Core CMS网站
向管理导航添加菜单项
安装本地化文件
如何使用资产转码器/绑定器/缩小器管道- 集成 Facebook 插件
实现全文检索
将 AzureAD 集成为外部提供程序
教程
这些教程旨在在2-3小时内完成,提供更深入、上下文探讨企业应用程序开发主题,并让您准备实现现实世界的解决方案。

使用 Razor Pages 构建解耦的网站
构建一个来自 Web 模板的网站(待定)
实施自助式 SaaS 解决方案(待定)

08
5

最近创建基于firstcode的开发模式,整理了一下如何使用Entity Framework Core 创建DbContext。

1、第一种重写DbContext的OnConfiguring方法,每次生成一个DbContext的方法的时候就会重新来这个方法这里读一下配置。

这种情况下,首先尝试通过调用 Program.CreateHostBuilder()、调用 Build(),然后访问 Services 属性来获取服务提供程序。

public class Program
{
    public static void Main(string[] args)
        => CreateHostBuilder(args).Build().Run();

    // EF Core uses this method at design time to access the DbContext
    public static IHostBuilder CreateHostBuilder(string[] args)
        => Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(
                webBuilder => webBuilder.UseStartup<Startup>());
}

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
        => services.AddDbContext<ApplicationDbContext>();

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
    }
}

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

2、使用不带参数的构造函数

这种情况就是在已经注入的情况下,就不再需要自己去New一个对象了,直接在使用的地方把DbContext 当成构造参数传进来

如果无法从应用程序服务提供程序获得 DbContext,则这些工具将查找项目中的派生 DbContext 类型。 然后,它们尝试使用不带参数的构造函数创建实例。 如果 DbContext 是使用 OnConfiguring 方法配置的,则这可以是默认构造函数。

从设计时工厂还可以通过实现 Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory 接口来告知工具如何创建 DbContext:如果在与派生的 DbContext 相同的项目中或在应用程序的启动项目中找到实现此接口的类,则这些工具会绕过创建 DbContext 的其他方式,转而使用设计时工厂。

public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
{
    public BloggingContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
        optionsBuilder.UseSqlite("Data Source=blog.db");

        return new BloggingContext(optionsBuilder.Options);
    }
}
07
4

C#实现两个顺序链表的合并

0
归档:2023年4月分类:C#和.NET

最近开始刷leetcode,刷了一周时间,确实会上瘾,不过能巩固很多基础知识,包括算法和语言。我现在是架构与编码并行。今天遇到的是两个列表的合并,刚开始我自己写了一个笨方法来合并,虽然通过了测试,但是代码质量不高,于是研究了其他人写的代码。

//传入的两个链表本身是从小到大排序好
public ListNode MergeTwoLists(ListNode list1, ListNode list2)
{
    ListNode head = new ListNode(); //定义新的链表头
    ListNode current = head;//定义链表最新的next地址
    //遍历两个链表,任何一个完毕后就终止循环
    while (list1 != null && list2 != null)
    {
        if (list1.val < list2.val)
        {
            //如果list1的元素值小,则把当前list1赋予current.next,注意这里相当于head.next
            current.next = list1;
            list1 = list1.next;
        }
        else
        {
            current.next = list2;
            list2 = list2.next;
        }
        //将current变量指向current.next,相当于head.next,当进入下一次循环给current.next赋值的时候,相当于是给head.next.next赋值了,一直这么循环到最后
        current = current.next;
    }
    //head链表的next指向未循环完成的部分
    current.next = list1 == null ? list2 : list1;
    //返回合并后的链表
    return head.next;

}

我刚开始发懵了,居然没理解这部分代码,因为忽略了“每次循环之后current的引用指向已经发生变化”。

公告栏

欢迎大家来到我的博客,我是dodoro,希望我的博客能给你带来帮助。