diff --git a/.github/workflows/auto-pr.yml b/.github/workflows/auto-pr.yml
index d4cd30c876..533fbb878e 100644
--- a/.github/workflows/auto-pr.yml
+++ b/.github/workflows/auto-pr.yml
@@ -1,10 +1,10 @@
-name: Merge branch dev with rel-4.4
+name: Merge branch dev with rel-5.0
on:
push:
branches:
- - rel-4.4
+ - rel-5.0
jobs:
- merge-dev-with-rel-4-4:
+ merge-dev-with-rel-5-0:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
@@ -12,13 +12,13 @@ jobs:
ref: dev
- name: Reset promotion branch
run: |
- git fetch origin rel-4.4:rel-4.4
- git reset --hard rel-4.4
+ git fetch origin rel-5.0:rel-5.0
+ git reset --hard rel-5.0
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
- branch: auto-merge/rel-4-4/${{github.run_number}}
- title: Merge branch dev with rel-4.4
- body: This PR generated automatically to merge dev with rel-4.4. Please review the changed files before merging to prevent any errors that may occur.
+ branch: auto-merge/rel-5-0/${{github.run_number}}
+ title: Merge branch dev with rel-5.0
+ body: This PR generated automatically to merge dev with rel-5.0. Please review the changed files before merging to prevent any errors that may occur.
reviewers: ${{github.actor}}
token: ${{ github.token }}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
index f7094c94a7..923535cfdd 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
@@ -312,7 +312,6 @@
"PaymentStateSetTo" : "Payment state set to {0}",
"ChangeState": "Change State",
"Permission:TrialLicense" : "Trial License",
- "Permission:ManageTrialLicense": "Manage Trial License",
"Menu:TrialLicenses": "Trial Licenses",
"TrialLicenses": "Trial Licenses",
"UserNameFilter": "Username",
@@ -340,15 +339,19 @@
"Activated": "Activated",
"PurchasedToNormalLicense": "Purchased",
"Expired": "Expired",
- "TrialLicenseDeletionWarningMessage": "Trial license and if any organization and qa organization will be deleted!",
- "IsTrial": "Is trial",
+ "TrialLicenseDeletionWarningMessage": "Are you sure you want to delete the trial license? Trial license, organization, support accounts will be deleted!",
+ "LicenseCategoryFilter": "License category",
"Volo.AbpIo.Commercial:030000": "You already used your trial period.",
"Volo.AbpIo.Commercial:030001": "This organization name already exists.",
"Volo.AbpIo.Commercial:030002": "Once activated, trial license cannot be set to requested!",
"Volo.AbpIo.Commercial:030003": "There is no such status!",
"Volo.AbpIo.Commercial:030004": "Status could not be changed due to an unexpected error!",
- "Volo.AbpIo.Commercial:030005": "Start date and end date cannot be given when the trial license is in the requested state!",
+ "Volo.AbpIo.Commercial:030005": "Start and end date can be updated when the trial license is in the -activated- status!",
"Volo.AbpIo.Commercial:030006": "End date must always be greater than start date!",
- "Volo.AbpIo.Commercial:030007": "This trial license has already been activated once!"
+ "Volo.AbpIo.Commercial:030007": "This trial license has already been activated once!",
+ "Volo.AbpIo.Commercial:030008": "Purchase date can be set only when status is Purchased!",
+ "Volo.AbpIo.Commercial:030009": "User not found!",
+ "Volo.AbpIo.Commercial:030010": "To purchase the trial license, first you need to activate your trial license!",
+ "Volo.AbpIo.Commercial:030011": "You cannot delete a trial license when it is purchased!"
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
index b31c33621c..c8bfea1f13 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
@@ -230,7 +230,7 @@
"HowCanIRefundVatExplanation2": "Log in into your 2Checkout account",
"HowCanIRefundVatExplanation3": "Find the appropriate order and press \"Refund Belated VAT\" (enter your VAT ID)",
"HowCanIGetMyInvoice": "How can I get my invoice?",
- "HowCanIGetMyInvoiceExplanation": "There are 2 payment gateways for purchasing a license: PayU and 2Checkout. If you purchase your license through 2Checkout gateway, it sends the PDF invoice to your email address, see 2Checkout invoicing. If you purchase through the PayU gateway or via bank wire transfer, we will prepare and send your invoice. You can request your invoice from the organization management page.",
+ "HowCanIGetMyInvoiceExplanation": "There are 2 payment gateways for purchasing a license: Iyzico and 2Checkout. If you purchase your license through the 2Checkout gateway, it sends the PDF invoice to your email address, see 2Checkout invoicing. If you purchase through the Iyzico gateway, with custom purchase link or via bank wire transfer, we will prepare and send your invoice. You can request or download your invoice from the organization management page. Before contacting us for the invoice, check your organization management page!",
"Forum": "Forum",
"SupportExplanation": "ABP Commercial licenses provides a premium forum support by a team consists of the ABP Framework experts.",
"PrivateTicket": "Private Ticket",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
index ac5e247264..7dddad6580 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
@@ -230,7 +230,7 @@
"HowCanIRefundVatExplanation2": "登录到你的2Checkout账户",
"HowCanIRefundVatExplanation3": "找到适当的订单,然后按\"退还已延期的增值税\"(输入你的增值税ID",
"HowCanIGetMyInvoice": "我如何获得发票?",
- "HowCanIGetMyInvoiceExplanation": "有两个用于购买许可的支付网关:PayU和2Checkout. 如果你通过2Checkout网关购买许可,则它将PDF发票发送到你的电子邮件地址,请参阅2Checkout发票.如果你是通过PayU网关或通过银行电汇购买的,我们将准备并发送你的发票. 你可以从组织管理页面索取发票.",
+ "HowCanIGetMyInvoiceExplanation": "有两个用于购买许可的支付网关:Iyzico和2Checkout. 如果你通过2Checkout网关购买许可,则它将PDF发票发送到你的电子邮件地址,请参阅2Checkout发票.如果你是通过Iyzico网关或通过银行电汇购买的,我们将准备并发送你的发票. 你可以从组织管理页面索取发票.",
"Forum": "论坛",
"SupportExplanation": "ABP商业版许可包含由ABP框架专家组成的团队提供的高级论坛支持.",
"PrivateTicket": "私有票",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
index 80fed13066..137079c16a 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
@@ -228,7 +228,7 @@
"HowCanIRefundVatExplanation2": "登錄到你的2Checkout賬戶",
"HowCanIRefundVatExplanation3": "找到適當的訂單,然後按\"退還已延期的增值稅\"(輸入你的增值稅ID",
"HowCanIGetMyInvoice": "我如何獲得發票?",
- "HowCanIGetMyInvoiceExplanation": "有兩個用於購買許可的支付網關:PayU和2Checkout. 如果你通過2Checkout網關購買許可,則它將PDF發票發送到你的電子郵件地址,請參閱2Checkout發票.如果你是通過PayU網關或通過銀行電匯購買的,我們將準備並發送你的發票. 你可以從組織管理頁面索取發票.",
+ "HowCanIGetMyInvoiceExplanation": "有兩個用於購買許可的支付網關:Iyzico和2Checkout. 如果你通過2Checkout網關購買許可,則它將PDF發票發送到你的電子郵件地址,請參閱2Checkout發票.如果你是通過Iyzico網關或通過銀行電匯購買的,我們將準備並發送你的發票. 你可以從組織管理頁面索取發票.",
"Forum": "論壇",
"SupportExplanation": "ABP商業版許可包含由ABP框架專家組成的團隊提供的高級論壇支持.",
"PrivateTicket": "私有票",
@@ -319,4 +319,4 @@
"MongoDB": "MongoDB"
}
-}
\ No newline at end of file
+}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
index 7be579f1fb..2da4a62481 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "en",
"texts": {
"Permission:CommunityArticle": "Community Article",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json
index 7b93754482..4c78f15d99 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "ro-RO",
"texts": {
"Permission:CommunityArticle": "Articol comunitar",
diff --git a/common.props b/common.props
index ea1df61a0f..753259efb2 100644
--- a/common.props
+++ b/common.props
@@ -1,7 +1,7 @@
latest
- 5.0.0
+ 5.0.0-beta.1$(NoWarn);CS1591;CS0436https://abp.io/assets/abp_nupkg.pnghttps://abp.io/
diff --git a/docs/cs/Entity-Framework-Core-PostgreSQL.md b/docs/cs/Entity-Framework-Core-PostgreSQL.md
index e09880c37c..dc50c8a742 100644
--- a/docs/cs/Entity-Framework-Core-PostgreSQL.md
+++ b/docs/cs/Entity-Framework-Core-PostgreSQL.md
@@ -1,4 +1,4 @@
-# Přepnutí na EF Core PostgreSQL providera
+# Přepnutí na EF Core PostgreSQL providera
Tento dokument vysvětluje, jak přepnout na poskytovatele databáze **PostgreSQL** pro **[spouštěcí šablonu aplikace](Startup-Templates/Application.md)**, která je dodávána s předem nakonfigurovaným SQL poskytovatelem.
diff --git a/docs/cs/Getting-Started-AspNetCore-Application.md b/docs/cs/Getting-Started-AspNetCore-Application.md
index 877976d037..e269a08ba2 100644
--- a/docs/cs/Getting-Started-AspNetCore-Application.md
+++ b/docs/cs/Getting-Started-AspNetCore-Application.md
@@ -1,4 +1,4 @@
-# Začínáme s ASP.NET Core MVC aplikací
+# Začínáme s ASP.NET Core MVC aplikací
Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**.
diff --git a/docs/cs/Getting-Started-Console-Application.md b/docs/cs/Getting-Started-Console-Application.md
index dc822ec297..a6ee50dbe6 100644
--- a/docs/cs/Getting-Started-Console-Application.md
+++ b/docs/cs/Getting-Started-Console-Application.md
@@ -1,4 +1,4 @@
-# Začínáme s konzolovou aplikací
+# Začínáme s konzolovou aplikací
Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**.
diff --git a/docs/cs/Index.md b/docs/cs/Index.md
index 0424c7120b..875f4e066e 100644
--- a/docs/cs/Index.md
+++ b/docs/cs/Index.md
@@ -1,4 +1,4 @@
-# ABP dokumentace
+# ABP dokumentace
ABP je **open source aplikační framework** se zaměřením na vývoj webových aplikací založených na ASP.NET Core, zároveň ho však lze využít i k vývoji jiných typů aplikací.
diff --git a/docs/en/API/Application-Configuration.md b/docs/en/API/Application-Configuration.md
index 3aea468f8c..8441459e02 100644
--- a/docs/en/API/Application-Configuration.md
+++ b/docs/en/API/Application-Configuration.md
@@ -1,4 +1,4 @@
-# Application Configuration Endpoint
+# Application Configuration Endpoint
ABP Framework provides a pre-built and standard endpoint that contains some useful information about the application/service. Here, the list of some fundamental information at this endpoint:
diff --git a/docs/en/API/Swagger-Integration.md b/docs/en/API/Swagger-Integration.md
index 48ce252940..2e7b331cfc 100644
--- a/docs/en/API/Swagger-Integration.md
+++ b/docs/en/API/Swagger-Integration.md
@@ -1,4 +1,4 @@
-# Swagger Integration
+# Swagger Integration
[Swagger (OpenAPI)](https://swagger.io/) is a language-agnostic specification for describing REST APIs. It allows both computers and humans to understand the capabilities of a REST API without direct access to the source code. Its main goals are to:
diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md
index 67aee58dac..2076764345 100644
--- a/docs/en/Audit-Logging.md
+++ b/docs/en/Audit-Logging.md
@@ -1,4 +1,4 @@
-# Audit Logging
+# Audit Logging
[Wikipedia](https://en.wikipedia.org/wiki/Audit_trail): "*An audit trail (also called **audit log**) is a security-relevant chronological record, set of records, and/or destination and source of records that provide documentary evidence of the sequence of activities that have affected at any time a specific operation, procedure, or event*".
diff --git a/docs/en/Best-Practices/Application-Services.md b/docs/en/Best-Practices/Application-Services.md
index ff8afe81d2..309b264522 100644
--- a/docs/en/Best-Practices/Application-Services.md
+++ b/docs/en/Best-Practices/Application-Services.md
@@ -1,4 +1,4 @@
-## Application Services Best Practices & Conventions
+## Application Services Best Practices & Conventions
* **Do** create an application service for each **aggregate root**.
diff --git a/docs/en/Best-Practices/Data-Transfer-Objects.md b/docs/en/Best-Practices/Data-Transfer-Objects.md
index 0fca0e86f2..5d6409af7d 100644
--- a/docs/en/Best-Practices/Data-Transfer-Objects.md
+++ b/docs/en/Best-Practices/Data-Transfer-Objects.md
@@ -1,4 +1,4 @@
-## Data Transfer Objects Best Practices & Conventions
+## Data Transfer Objects Best Practices & Conventions
* **Do** define DTOs in the **application contracts** package.
* **Do** inherit from the pre-built **base DTO classes** where possible and necessary (like `EntityDto`, `CreationAuditedEntityDto`, `AuditedEntityDto`, `FullAuditedEntityDto` and so on).
diff --git a/docs/en/Best-Practices/Domain-Services.md b/docs/en/Best-Practices/Domain-Services.md
index f8b7c31797..e651086673 100644
--- a/docs/en/Best-Practices/Domain-Services.md
+++ b/docs/en/Best-Practices/Domain-Services.md
@@ -1,4 +1,4 @@
-## Domain Services Best Practices & Conventions
+## Domain Services Best Practices & Conventions
> **This document is not ready yet. Please see the [Domain Services](../Domain-Services.md) document.**
diff --git a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md
index 90d62698de..bae484af27 100644
--- a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md
+++ b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md
@@ -1,4 +1,4 @@
-## Entity Framework Core Integration Best Practices
+## Entity Framework Core Integration Best Practices
> See [Entity Framework Core Integration document](../Entity-Framework-Core.md) for the basics of the EF Core integration.
diff --git a/docs/en/Best-Practices/Index.md b/docs/en/Best-Practices/Index.md
index 5c21b5b9ec..3cc10a17cc 100644
--- a/docs/en/Best-Practices/Index.md
+++ b/docs/en/Best-Practices/Index.md
@@ -1,4 +1,4 @@
-## Module Development Best Practices & Conventions
+## Module Development Best Practices & Conventions
### Introduction
diff --git a/docs/en/Best-Practices/Module-Architecture.md b/docs/en/Best-Practices/Module-Architecture.md
index d9f833726f..b7e0d03db9 100644
--- a/docs/en/Best-Practices/Module-Architecture.md
+++ b/docs/en/Best-Practices/Module-Architecture.md
@@ -1,4 +1,4 @@
-## Module Architecture Best Practices & Conventions
+## Module Architecture Best Practices & Conventions
### Solution Structure
diff --git a/docs/en/Best-Practices/MongoDB-Integration.md b/docs/en/Best-Practices/MongoDB-Integration.md
index 216468b71e..594244443e 100644
--- a/docs/en/Best-Practices/MongoDB-Integration.md
+++ b/docs/en/Best-Practices/MongoDB-Integration.md
@@ -1,4 +1,4 @@
-## MongoDB Integration
+## MongoDB Integration
* Do define a separated `MongoDbContext` interface and class for each module.
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/POST.md b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/POST.md
new file mode 100644
index 0000000000..14d23f61fc
--- /dev/null
+++ b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/POST.md
@@ -0,0 +1,285 @@
+# ABP Platform 5.0 Beta 1 Has Been Released
+
+Today, we are excited to release the [ABP Framework](https://abp.io/) and the [ABP Commercial](https://commercial.abp.io/) version **5.0 Beta 1**. This blog post introduces the new features and important changes in this new version.
+
+> **The planned release date for the [5.0.0 Release Candidate](https://github.com/abpframework/abp/milestone/51) version is November, 2021**.
+
+Please try the beta 1 version and provide feedback for a more stable ABP version 5.0! Thank you all.
+
+## Get Started with the 5.0 Beta 1
+
+follow the steps below to try the version 5.0.0 beta 1 today;
+
+1) **Upgrade** the ABP CLI to the version `5.0.0-beta.1` using a command line terminal:
+
+````bash
+dotnet tool update Volo.Abp.Cli -g --version 5.0.0-beta.1
+````
+
+**or install** if you haven't installed before:
+
+````bash
+dotnet tool install Volo.Abp.Cli -g --version 5.0.0-beta.1
+````
+
+2) Create a **new application** with the `--preview` option:
+
+````bash
+abp new BookStore --preview
+````
+
+See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all the available options.
+
+> You can also use the *Direct Download* tab on the [Get Started](https://abp.io/get-started) page by selecting the **Preview checkbox**.
+
+### Visual Studio Upgrade
+
+As .NET 6 is a preview version you need to make changes on your current Visual Studio. If you want to run a .NET 6 project on Visual Studio 2019, you need to enable the `Use Previews of the .NET SDK` option from Visual Studio 2019 options. See the screenshot:
+
+
+
+Alternatively you can download the latest Visual Studio 2022 preview to run/create the .NET 6 projects. We have tested the ABP solution with the Visual Studio 2022 `17.0.0 Preview 4.1`. Check out https://visualstudio.microsoft.com/vs/preview/ for more information.
+
+### Migration Notes & Breaking Changes
+
+This is a major version and there are some breaking changes and upgrade steps. Here, a list of important breaking changes in this version:
+
+* Upgraded to .NET 6.0-rc.1, so you need to move your solution to .NET 6.0 if you want to use the ABP 5.0.
+* `IRepository` doesn't inherit from `IQueryable` anymore. It was already made obsolete in 4.2.
+* Removed NGXS and states from the Angular UI.
+* Removed gulp dependency from the MVC / Razor Pages UI in favor of `abp install-libs` command of ABP CLI.
+
+Please see the [migration document](https://docs.abp.io/en/abp/5.0/Migration-Guides/Abp-5_0) for all the details. You can also see all [the closed issues and pull request](https://github.com/abpframework/abp/releases/tag/5.0.0-beta.1) on GitHub.
+
+## What's new with Beta 1?
+
+In this section, I will introduce some major features released with beta 1.
+
+### Static (Generated) Client Proxies for C# and JavaScript
+
+Dynamic C# ([see](https://docs.abp.io/en/abp/latest/API/Dynamic-CSharp-API-Clients)) and JavaScript ([see](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Dynamic-JavaScript-Proxies)) client proxy system is one of the most loved features of the ABP Framework. It generates the proxy code on runtime and makes client-to-server calls a breeze. With ABP 5.0, we are providing an alternative approach: You can generate the client proxy code on development-time.
+
+Development-time client proxy generation has a performance advantage since it doesn't need to obtain the HTTP API definition on runtime. It also makes it easier to consume a (micro)service behind an API Gateway. With dynamic proxies, we should return a combined HTTP API definition from the API Gateway and need to add HTTP API layers of the microservices to the gateway. Static proxies removes this requirement. One disadvantage is that you should re-generate the client proxy code whenever you change your API endpoint definition. Yes, software development always has tradeoffs :)
+
+Working with static client proxy generation is simple with the ABP CLI. You first need to run the server application, open a command-line terminal, locate to the root folder of your client application, then run the `generate-proxy` command of the ABP CLI.
+
+#### Creating C# client proxies
+
+C# client proxies are useful to consume APIs from Blazor WebAssembly applications. It is also useful for microservice to microservice HTTP API calls. Notice that the client application need to have a reference to the application service contracts (typically, the `.Application.Contracts` project in your solution) in order to consume the services.
+
+**Example usage:**
+
+````bash
+abp generate-proxy -t csharp -u https://localhost:44305
+````
+
+`-t` indicates the client type, C# here. `-u` is the URL of the server application. It creates the proxies for the application (the app module) by default. You can specify the module name as `-m ` if you are building a modular system. The following figure shows the generated files:
+
+
+
+Once the proxies are generated, you can inject and use the application service interfaces of these proxies, like `IProductAppService` in this example. Usage is same of the [dynamic C# client proxies](https://docs.abp.io/en/abp/latest/API/Dynamic-CSharp-API-Clients).
+
+#### Creating JavaScript client proxies
+
+JavaScript proxies are useful to consume APIs from MVC / Razor Pages UI. It works on JQuery AJAX API, just like the [dynamic JavaScript proxies](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Dynamic-JavaScript-Proxies).
+
+**Example usage:**
+
+````bash
+abp generate-proxy -t js -u https://localhost:44305
+````
+
+The following figure shows the generated file:
+
+
+
+Then you can consume the server-side APIs from your JavaScript code just like the [dynamic JavaScript proxies](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Dynamic-JavaScript-Proxies).
+
+#### Creating Angular client proxies
+
+Angular developers knows that the generate-proxy command was already available in ABP's previous versions to create client-side proxy services in the Angular UI. The same functionality continues to be available and already [documented here](https://docs.abp.io/en/abp/latest/UI/Angular/Service-Proxies).
+
+**Example usage:**
+
+````bash
+abp generate-proxy -t ng -u https://localhost:44305
+````
+
+### Transactional Outbox & Inbox for the Distributed Event Bus
+
+This was one of the most awaited features by distributed software developers.
+
+The [transactional outbox pattern](https://microservices.io/patterns/data/transactional-outbox.html) is used to publishing distributed events within the same transaction that manipulates the application database. Distributed events are saved into the database inside the same transaction with your data changes, then sent to the message broker (like RabbitMQ or Kafka) by a separate background worker with a re-try system. In this way, it ensures the consistency between your database state and the published events.
+
+The transactional inbox pattern, on the other hand, saves incoming events into database first, then executes the event handler in a transactional manner and removes the event from the inbox queue in the same transaction. It also ensures that the event is only executed one time by keeping the processed messages for a while and discarding the duplicate events received from the message broker.
+
+Enabling the inbox and outbox patterns requires a few manual steps for your application. We've created a simple [console application example](https://github.com/abpframework/abp/tree/dev/test/DistEvents), but I will also explain all the steps here.
+
+#### Pre-requirements
+
+First of all, you need to have EF Core or MongoDB installed into your solution. It should be already installed if you'd created a solution from the ABP startup template.
+
+#### Install the package
+
+Install the new [Volo.Abp.EventBus.Boxes](https://www.nuget.org/packages/Volo.Abp.EventBus.Boxes) NuGet package to your database layer (to `EntityFrameworkCore` or `MongoDB` project) or to the host application. Open a command-line terminal at the root directory of your database (or host) project and execute the following command:
+
+````csharp
+abp add-package Volo.Abp.EventBus.Boxes
+````
+
+This will install the package and setup the ABP module dependency.
+
+#### Configure the DbContext
+
+Open your `DbContext` class, implement the `IHasEventInbox` and the `IHasEventOutbox` interfaces. You should end up by adding two `DbSet` properties into your `DbContext` class:
+
+````csharp
+public DbSet IncomingEvents { get; set; }
+public DbSet OutgoingEvents { get; set; }
+````
+
+Add the following lines inside the `OnModelCreating` method of your `DbContext` class:
+
+````csharp
+builder.ConfigureEventInbox();
+builder.ConfigureEventOutbox();
+````
+
+It is similar for MongoDB; implement the `IHasEventInbox` and the `IHasEventOutbox` interfaces. There is no `Configure...` method for MongoDB.
+
+Now, we've added inbox/outbox related tables to our database schema. Now, for EF Core, use the standard `Add-Migration` and `Update-Database` commands to apply changes into your database (you can skip this step for MongoDB). If you want to use the command-line terminal, run the following commands in the root directory of the database integration project:
+
+````bash
+dotnet ef migrations add "Added_Event_Boxes"
+dotnet ef database update
+````
+
+#### Configure the distributed event bus options
+
+As the last step, write the following configuration code inside the `ConfigureServices` method of your module class:
+
+````csharp
+Configure(options =>
+{
+ options.Outboxes.Configure(config =>
+ {
+ config.UseDbContext();
+ });
+
+ options.Inboxes.Configure(config =>
+ {
+ config.UseDbContext();
+ });
+});
+````
+
+Replace `YourDbContext` with your `DbContext` class.
+
+That's all. You can continue to publishing and consuming events just as before. See the [distributed event bus documentation](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus) if you don't know how to use it.
+
+### Publishing events in transaction
+
+The previous feature (outbox & inbox) solves the transactional event publishing problem for distributed systems. This feature, publishing events in transaction, solves the problem of executing event handlers in the same transaction that the events are published in for non-distributed applications. With 5.0, all events (local or distributed) are handled in the same transaction. If any handler fails, the transaction is rolled back. If you don't want that, you should use try/catch and ignore the exception inside your event handler.
+
+Remember that if you don't install a real distributed event provider (like [RabbitMQ](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus-RabbitMQ-Integration) or [Kafka](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus-Kafka-Integration)), the [distributed events](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus) are actually executed in-process, just like the [local events](https://docs.abp.io/en/abp/latest/Local-Event-Bus). So, with this development, all the events become transactional, even if your system is distributed or not.
+
+No action needed to take. It will just work by default. There is a [deprecation note](https://github.com/abpframework/abp/issues/9897) related to this change (some pre-defined events [will be removed](https://github.com/abpframework/abp/issues/9908) in the next major version since they are not needed anymore)
+
+### Inactivating a user
+
+The [Identity module](https://docs.abp.io/en/abp/latest/Modules/Identity) has a new feature to make a user active or inactive. Inactive users can not login to the system. In this way, you can disable a user account without deleting it. An *Active* checkbox is added to the user create/edit dialog to control it on the UI:
+
+
+
+EF Core developers should add a new database migration since this brings a new field to the `AbpUsers` table.
+
+### Overriding email settings per tenant
+
+If you're building a multi-tenant application, it is now possible to override email sending settings per tenant. To make this possible, you should first enable that [feature](https://docs.abp.io/en/abp/latest/Features) to the tenant you want, by clicking the *Actions -> Features* for the tenant.
+
+
+
+Enable the feature using the checkbox as shown in the following modal:
+
+
+
+Then the tenant admin can open the email settings page under the Administration -> Settings menu (on development environment, logout, switch to the tenant and re-login with the tenant admin):
+
+
+
+### Hangfire dashboard permission
+
+ABP allows to use Hangfire as the background job manager when you install the integration package [as documented](https://docs.abp.io/en/abp/5.0/Background-Jobs-Hangfire). Hangfire's dashboard is used to monitor and control the background job queues. Here, a screenshot from the dashboard:
+
+
+
+Hangfire's dashboard is not authorized by default, so any user can navigate to the `/hangfire` URL and see/control the jobs. With the ABP version 5.0, we've added a built-in authorization implementation for the Hangfire dashboard. Instead of `app.UseHangfireDashboard();`, you can use the following middleware configuration:
+
+````csharp
+app.UseHangfireDashboard("/hangfire", new DashboardOptions
+{
+ AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter() }
+});
+````
+
+In this way, only the authenticated users can see the dashboard. However, we suggest to set a permission name, so only the users with that permission can see the dashboard:
+
+````csharp
+app.UseHangfireDashboard("/hangfire", new DashboardOptions
+{
+ AsyncAuthorization = new[] {
+ new AbpHangfireAuthorizationFilter("MyPermissionName")
+ }
+});
+````
+
+You can define the permission (`MyPermissionName` in this example) using the standard [permission system](https://docs.abp.io/en/abp/5.0/Authorization#permission-system).
+
+### Introducing AbpControllerBase
+
+ABP provides an `AbpController` class that you can inherit your MVC controllers from. It provides some pre-injected services to simplify your controllers. With v5.0, we are adding a second base controller class, `AbpControllerBase`, which is more proper to create API controllers (without view features). It is suggested to inherit from the `AbpControllerBase` class to create API controllers, instead of the `AbpController` class.
+
+**Example:**
+
+````csharp
+[Route("api/products")]
+public class ProductController : AbpControllerBase
+{
+ // TODO: ...
+}
+````
+
+## Ongoing Works & Next Release
+
+We'd published important features and changes with this beta 1 release. However, there are still some major works in development. The most important work is the **Bootstrap 5 upgrade**. ABP 5.0 will work on Bootstrap 5, which is an important change for existing applications. We suggest to prepare for this change from now.
+
+The next release will be 5.0.0-beta.2. It will include the Bootstrap 5 upgrade. We don't plan make another big work for the version 5.0. After the beta.2, we will work on tests, feedbacks and documentation to prepare a stable final release.
+
+## Community News
+
+### ABP was on ASP.NET Community Startup!
+
+It was great for us to be invited to Microsoft's [ASP.NET Community Weekly Standup](https://dotnet.microsoft.com/live/community-standup) show, at September 28. There was a very high attention and that made us very happy. Thanks to the ABP Community and all the watchers :) If you've missed the talk, [you can watch it here](https://www.youtube.com/watch?v=vMWM-_ihjwM).
+
+### Upcoming ABP Book!
+
+I am currently authoring the first official book for the ABP Framework and it is on [pre-sale on Amazon](https://www.amazon.com/Mastering-ABP-Framework-maintainable-implementing-dp-1801079242/dp/1801079242) now.
+
+
+
+This books is a complete guide to start working with the ABP Framework, explore the ABP features and concepts. It also contains chapters for DDD, modular application development and multi-tenancy to learn and practically work with the ABP architecture to build maintainable software solutions and create SaaS applications. The book will be based on ABP 5.0 and published in the beginning of 2022. You can [pre-order now](https://www.amazon.com/Mastering-ABP-Framework-maintainable-implementing-dp-1801079242/dp/1801079242)!
+
+### New ABP Community posts
+
+Here, the latest posts added to the [ABP community](https://community.abp.io/):
+
+* [Deploy ABP Framework .NET Core tiered application to docker swarm](https://community.abp.io/articles/deploy-abp-framework-dotnet-core-tiered-app-to-docker-swarm-kcrjbjec)
+* [How to override localization strings of depending modules](https://community.abp.io/articles/how-to-override-localization-strings-of-depending-modules-ba1oy03l)
+* [Centralized logging for .NET Core ABP microservices application using Seq](https://community.abp.io/articles/centralized-logging-for-.net-core-abp-microservices-app-using-seq-g1xe7e7y)
+* [Extend Tenant management and add custom host to your ABP application](https://community.abp.io/articles/extend-tenant-management-and-add-custom-host-to-your-abp-app-lwmi9lr5)
+
+Thanks to the ABP Community for all the contents they have published. You can also post your ABP and .NET related (text or video) contents to the ABP Community.
+
+## Conclusion
+
+The ABP version 5.0 is coming with important changes (like .NET 6 and Bootstrap 5) and features. In this blog post, I summarized the news about that new version. Please try it and provide feedback by opening issues on [the GitHub repository](https://github.com/abpframework/abp). Thank you all!
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/abp-book-cover.png b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/abp-book-cover.png
new file mode 100644
index 0000000000..bfd2c54599
Binary files /dev/null and b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/abp-book-cover.png differ
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/csharp-proxies.png b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/csharp-proxies.png
new file mode 100644
index 0000000000..1805b5238e
Binary files /dev/null and b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/csharp-proxies.png differ
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/email-settings.png b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/email-settings.png
new file mode 100644
index 0000000000..438696e170
Binary files /dev/null and b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/email-settings.png differ
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/enable-email-tenant.png b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/enable-email-tenant.png
new file mode 100644
index 0000000000..90e747cc76
Binary files /dev/null and b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/enable-email-tenant.png differ
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/hangfire-dashboard.png b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/hangfire-dashboard.png
new file mode 100644
index 0000000000..a7df71a3e3
Binary files /dev/null and b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/hangfire-dashboard.png differ
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/js-proxies.png b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/js-proxies.png
new file mode 100644
index 0000000000..4cc9e41308
Binary files /dev/null and b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/js-proxies.png differ
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/tenant-features.png b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/tenant-features.png
new file mode 100644
index 0000000000..8146f45992
Binary files /dev/null and b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/tenant-features.png differ
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/use-preview-visual-studio.png b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/use-preview-visual-studio.png
new file mode 100644
index 0000000000..317cf1d209
Binary files /dev/null and b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/use-preview-visual-studio.png differ
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/user-active.png b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/user-active.png
new file mode 100644
index 0000000000..07cb5c7dca
Binary files /dev/null and b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/user-active.png differ
diff --git a/docs/en/CLI.md b/docs/en/CLI.md
index 0638543e44..4b575ac6f6 100644
--- a/docs/en/CLI.md
+++ b/docs/en/CLI.md
@@ -1,4 +1,4 @@
-# ABP CLI
+# ABP CLI
ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions.
diff --git a/docs/en/Configuration.md b/docs/en/Configuration.md
index 6e638f7814..30d881c06e 100644
--- a/docs/en/Configuration.md
+++ b/docs/en/Configuration.md
@@ -1,3 +1,3 @@
-# Configuration
+# Configuration
ASP.NET Core has an flexible and extensible key-value based configuration system. In fact, the configuration system is a part of Microsoft.Extensions libraries and it is independent from ASP.NET Core. That means it can be used in any type of application. See [Microsoft's documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/) to learn the configuration infrastructure. ABP framework is 100% compatible with the configuration system.
\ No newline at end of file
diff --git a/docs/en/Dependency-Injection.md b/docs/en/Dependency-Injection.md
index f4398488e5..f347dc1dd7 100644
--- a/docs/en/Dependency-Injection.md
+++ b/docs/en/Dependency-Injection.md
@@ -1,4 +1,4 @@
-# Dependency Injection
+# Dependency Injection
ABP's Dependency Injection system is developed based on Microsoft's [dependency injection extension](https://medium.com/volosoft/asp-net-core-dependency-injection-best-practices-tips-tricks-c6e9c67f9d96) library (Microsoft.Extensions.DependencyInjection nuget package). So, it's documentation is valid in ABP too.
diff --git a/docs/en/Domain-Services.md b/docs/en/Domain-Services.md
index 5a4f6393e1..6ad9b78cf0 100644
--- a/docs/en/Domain-Services.md
+++ b/docs/en/Domain-Services.md
@@ -1,4 +1,4 @@
-# Domain Services
+# Domain Services
## Introduction
diff --git a/docs/en/Emailing.md b/docs/en/Emailing.md
index 50e7afc213..bfb3058862 100644
--- a/docs/en/Emailing.md
+++ b/docs/en/Emailing.md
@@ -1,4 +1,4 @@
-# Email Sending
+# Email Sending
ABP Framework provides various services, settings and integrations for sending emails;
diff --git a/docs/en/Entity-Framework-Core-Migrations.md b/docs/en/Entity-Framework-Core-Migrations.md
index 5d8ca01854..716038d412 100644
--- a/docs/en/Entity-Framework-Core-Migrations.md
+++ b/docs/en/Entity-Framework-Core-Migrations.md
@@ -1,4 +1,4 @@
-# EF Core Database Migrations
+# EF Core Database Migrations
This document begins by **introducing the default structure** provided by [the application startup template](Startup-Templates/Application.md) and **discusses various scenarios** you may want to implement for your own application.
diff --git a/docs/en/Entity-Framework-Core-MySQL.md b/docs/en/Entity-Framework-Core-MySQL.md
index 92a9cfb36e..91e3ce986d 100644
--- a/docs/en/Entity-Framework-Core-MySQL.md
+++ b/docs/en/Entity-Framework-Core-MySQL.md
@@ -1,4 +1,4 @@
-# Switch to EF Core MySQL Provider
+# Switch to EF Core MySQL Provider
This document explains how to switch to the **MySQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Entity-Framework-Core-Oracle-Devart.md b/docs/en/Entity-Framework-Core-Oracle-Devart.md
index 95e05db427..ecd4f65e0c 100644
--- a/docs/en/Entity-Framework-Core-Oracle-Devart.md
+++ b/docs/en/Entity-Framework-Core-Oracle-Devart.md
@@ -1,4 +1,4 @@
-# Switch to EF Core Oracle Devart Provider
+# Switch to EF Core Oracle Devart Provider
This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Entity-Framework-Core-Oracle-Official.md b/docs/en/Entity-Framework-Core-Oracle-Official.md
index d983dc5e41..b273515ac1 100644
--- a/docs/en/Entity-Framework-Core-Oracle-Official.md
+++ b/docs/en/Entity-Framework-Core-Oracle-Official.md
@@ -1,4 +1,4 @@
-# Switch to EF Core Oracle Provider
+# Switch to EF Core Oracle Provider
This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Entity-Framework-Core-Oracle.md b/docs/en/Entity-Framework-Core-Oracle.md
index 8c265149ba..1e340302dc 100644
--- a/docs/en/Entity-Framework-Core-Oracle.md
+++ b/docs/en/Entity-Framework-Core-Oracle.md
@@ -1,4 +1,4 @@
-# Switch to EF Core Oracle Provider
+# Switch to EF Core Oracle Provider
This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Entity-Framework-Core-Other-DBMS.md b/docs/en/Entity-Framework-Core-Other-DBMS.md
index 8c9078583d..9739dbdd02 100644
--- a/docs/en/Entity-Framework-Core-Other-DBMS.md
+++ b/docs/en/Entity-Framework-Core-Other-DBMS.md
@@ -1,4 +1,4 @@
-# Switch to Another DBMS for Entity Framework Core
+# Switch to Another DBMS for Entity Framework Core
**[The application startup template](Startup-Templates/Application.md)** comes with **SQL Server provider pre-configured** for the Entity Framework Core. However, EF Core supports [many other DBMSs](https://docs.microsoft.com/en-us/ef/core/providers/) and you can use any of them within your ABP based applications.
diff --git a/docs/en/Entity-Framework-Core-PostgreSQL.md b/docs/en/Entity-Framework-Core-PostgreSQL.md
index f6a0c26806..4ddd3dd22a 100644
--- a/docs/en/Entity-Framework-Core-PostgreSQL.md
+++ b/docs/en/Entity-Framework-Core-PostgreSQL.md
@@ -1,4 +1,4 @@
-# Switch to EF Core PostgreSQL Provider
+# Switch to EF Core PostgreSQL Provider
This document explains how to switch to the **PostgreSQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Entity-Framework-Core-SQLite.md b/docs/en/Entity-Framework-Core-SQLite.md
index 81d4b72de2..cbacf3baa5 100644
--- a/docs/en/Entity-Framework-Core-SQLite.md
+++ b/docs/en/Entity-Framework-Core-SQLite.md
@@ -1,4 +1,4 @@
-# Switch to EF Core SQLite Provider
+# Switch to EF Core SQLite Provider
This document explains how to switch to the **SQLite** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Getting-Started-AspNetCore-Application.md b/docs/en/Getting-Started-AspNetCore-Application.md
index 9202ed29f1..5eca211810 100644
--- a/docs/en/Getting-Started-AspNetCore-Application.md
+++ b/docs/en/Getting-Started-AspNetCore-Application.md
@@ -1,4 +1,4 @@
-# Getting Started ABP With AspNet Core MVC Web Application
+# Getting Started ABP With AspNet Core MVC Web Application
This tutorial explains how to start ABP from scratch with minimal dependencies. You generally want to start with the **[startup template](Getting-Started-AspNetCore-MVC-Template.md)**.
diff --git a/docs/en/Getting-Started-React-Native.md b/docs/en/Getting-Started-React-Native.md
index 08faac3608..9199d370dc 100644
--- a/docs/en/Getting-Started-React-Native.md
+++ b/docs/en/Getting-Started-React-Native.md
@@ -1,4 +1,4 @@
-# Getting Started with the React Native
+# Getting Started with the React Native
````json
//[doc-params]
diff --git a/docs/en/Getting-Started-With-Startup-Templates.md b/docs/en/Getting-Started-With-Startup-Templates.md
index be2bb201b8..9beb84bcef 100644
--- a/docs/en/Getting-Started-With-Startup-Templates.md
+++ b/docs/en/Getting-Started-With-Startup-Templates.md
@@ -1,4 +1,4 @@
-# Getting Started with the Startup Templates
+# Getting Started with the Startup Templates
See the following tutorials to learn how to get started with the ABP Framework using the pre-built application startup templates:
diff --git a/docs/en/Index.md b/docs/en/Index.md
index 8483d61612..84e1155b9c 100644
--- a/docs/en/Index.md
+++ b/docs/en/Index.md
@@ -1,4 +1,4 @@
-# ABP Documentation
+# ABP Documentation
ABP Framework is a complete **infrastructure** based on the **ASP.NET Core** to create **modern web applications** and **APIs** by following the software development **best practices** and the **latest technologies**.
diff --git a/docs/en/Integration-Tests.md b/docs/en/Integration-Tests.md
index 35d66171a6..9ad4741822 100644
--- a/docs/en/Integration-Tests.md
+++ b/docs/en/Integration-Tests.md
@@ -1 +1 @@
-This document has been [moved to here](Testing.md).
\ No newline at end of file
+This document has been [moved to here](Testing.md).
\ No newline at end of file
diff --git a/docs/en/Json-Serialization.md b/docs/en/Json-Serialization.md
index f0082ea9d6..7d6072c041 100644
--- a/docs/en/Json-Serialization.md
+++ b/docs/en/Json-Serialization.md
@@ -1,3 +1,3 @@
-# JSON
+# JSON
TODO
\ No newline at end of file
diff --git a/docs/en/MailKit.md b/docs/en/MailKit.md
index de4b653f4d..b05a28f9ba 100644
--- a/docs/en/MailKit.md
+++ b/docs/en/MailKit.md
@@ -1,4 +1,4 @@
-# MailKit Integration
+# MailKit Integration
[MailKit](http://www.mimekit.net/) is a cross-platform, popular open source mail client library for .net. ABP Framework provides an integration package to use the MailKit as the [email sender](Emailing.md).
diff --git a/docs/en/Migration-Guides/Abp-5_0-Angular.md b/docs/en/Migration-Guides/Abp-5_0-Angular.md
new file mode 100644
index 0000000000..1188e68556
--- /dev/null
+++ b/docs/en/Migration-Guides/Abp-5_0-Angular.md
@@ -0,0 +1,101 @@
+# Angular UI v4.x to v5.0 Migration Guide
+
+## Breaking Changes
+
+### Overall
+
+See the overall list of breaking changes:
+
+- Bootstrap 5 implementation [#10067](https://github.com/abpframework/abp/issues/10067)
+- Remove NGXS dependency & states [#9952](https://github.com/abpframework/abp/issues/9952)
+- Install @angular/localize package to startup templates [#10099](https://github.com/abpframework/abp/issues/10099)
+- Create new secondary entrypoints and move the related proxies to there [#10060](https://github.com/abpframework/abp/issues/10060)
+- Move SettingTabsService to @abp/ng.setting-management/config package from @abp/ng.core [#10061](https://github.com/abpframework/abp/issues/10061)
+- Make the @abp/ng.account dependent on @abp/ng.identity [#10059](https://github.com/abpframework/abp/issues/10059)
+- Set default abp-modal size medium [#10118](https://github.com/abpframework/abp/issues/10118)
+- Update all dependency versions to the latest [#9806](https://github.com/abpframework/abp/issues/9806)
+- Chart.js big include with CommonJS warning [#7472](https://github.com/abpframework/abp/issues/7472)
+
+### Angular v12
+
+The new ABP Angular UI is based on Angular v12. We started to compile Angular UI packages with the Ivy compilation. Therefore, **new packages only work with Angular v12**. If you are still on the older version of Angular v12, you have to update to Angular v12. The update is usually very easy. See [Angular Update Guide](https://update.angular.io/?l=2&v=11.0-12.0) for further information.
+
+### Bootstrap 5
+
+TODO
+
+### NGXS has been removed
+
+We aim to make the ABP Framework free of any state-management solutions. ABP developers should be able to use the ABP Framework with any library/framework of their choice. So, we decided to remove NGXS from ABP packages.
+
+If you'd like to use NGXS after upgrading to v5.0, you have to install the NGXS to your project. The package can be installed with the following command:
+
+```bash
+npm install @ngxs/store
+
+# or
+
+yarn add @ngxs/store
+```
+
+NGXS states and actions, some namespaces have been removed. See [this issue](https://github.com/abpframework/abp/issues/9952) for the details.
+
+If you don't want to use the NGXS, you should remove all NGXS related imports, injections, etc., from your project.
+
+### @angular/localize package
+
+[`@angular/localize`](https://angular.io/api/localize) dependency has been removed from `@abp/ng.core` package. The package must be installed in your app. Run the following command to install:
+
+```bash
+npm install @angular/localize
+
+# or
+
+yarn add @angular/localize
+```
+
+> ABP Angular UI packages are not dependent on the `@angular/localize` package. However, some packages (like `@ng-bootstrap/ng-bootstrap`) depend on the package. Thus, this package needs to be installed in your project.
+
+### Proxy endpoints
+
+New endpoints named proxy have been created, related proxies have moved.
+For example; before v5.0, `IdentityUserService` could be imported from `@abp/ng.identity`. As of v5.0, the service can be imported from `@abp/ng.identity/proxy`. See an example:
+
+```ts
+import { IdentityUserService } from '@abp/ng.identity/proxy';
+
+@Component({})
+export class YourComponent {
+ constructor(private identityUserService: IdentityUserService) {}
+}
+```
+
+Following proxies have been affected:
+
+- `@abp/ng.account` to `@abp/ng.account.core/proxy`
+- `@abp/ng.feature-management` to `@abp/ng.feature-management/proxy`
+- `@abp/ng.identity` to `@abp/ng.identity/proxy`
+- `@abp/ng.permission-management` to `@abp/ng.permission-management/proxy`
+- `@abp/ng.tenant-management` to `@abp/ng.tenant-management/proxy`
+- **ProfileService** is deleted from `@abp/ng.core`. Instead, you can import it from `@abp/ng.identity/proxy`
+
+### SettingTabsService
+
+**SettingTabsService** has moved from `@abp/ng.core` to `@abp/ng.setting-management/config`.
+
+### ChartComponent
+
+[`ChartComponent`](../UI/Angular/Chart-Component.md) has moved from `@abp/ng.theme.shared` to `@abp/ng.components/chart.js`. To use the component, you need to import the `ChartModule` to your module as follows:
+
+```ts
+import { ChartModule } from '@abp/ng.components/chart.js';
+
+@NgModule({
+ imports: [
+ ChartModule,
+ // ...
+ ],
+ // ...
+})
+export class YourFeatureModule {}
+```
diff --git a/docs/en/Migration-Guides/Abp-5_0.md b/docs/en/Migration-Guides/Abp-5_0.md
new file mode 100644
index 0000000000..2dc880be3b
--- /dev/null
+++ b/docs/en/Migration-Guides/Abp-5_0.md
@@ -0,0 +1,51 @@
+# ABP Framework v4.x to v5.0 Migration Guide
+
+## IdentityUser
+
+`IsActive ` property is added to the `IdentityUser`. This flag will be checked during the authentication of the users. See the related [PR](https://github.com/abpframework/abp/pull/10185).
+**After the migration, set this property to `true` for the existing users: `UPDATE AbpUsers SET IsActive=1`**
+
+For EFCore you can set `defaultValue` to `true` in the migration class:
+(This will add the column with `true` value for the existing records.)
+
+```cs
+public partial class AddIsActiveToIdentityUser : Migration
+{
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "IsActive",
+ table: "AbpUsers",
+ type: "bit",
+ nullable: false,
+ defaultValue: true); // Default is false.
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "IsActive",
+ table: "AbpUsers");
+ }
+}
+```
+
+For document base databases like MongoDB, you need to manually update the `IsActive` field for the existing user records.
+
+## MongoDB
+
+ABP Framework will serialize the datetime based on [AbpClockOptions](https://docs.abp.io/en/abp/latest/Timing#clock-options) starting from ABP v5.0. It was saving `DateTime` values as UTC in MongoDB. Check out [MongoDB Datetime Serialization Options](https://mongodb.github.io/mongo-csharp-driver/2.13/reference/bson/mapping/#datetime-serialization-options).
+
+To revert back this feature, set `UseAbpClockHandleDateTime = false` in `AbpMongoDbOptions`:
+
+```cs
+services.Configure(x => x.UseAbpClockHandleDateTime = false);
+```
+
+## IApiScopeRepository
+
+`GetByNameAsync` method renamed as `FindByNameAsync`.
+
+## Angular UI
+
+See the [Angular UI 5.0 Migration Guide](Abp-5_0-Angular.md).
diff --git a/docs/en/Migration-Guides/Index.md b/docs/en/Migration-Guides/Index.md
index c7bee5a82a..909f6c0998 100644
--- a/docs/en/Migration-Guides/Index.md
+++ b/docs/en/Migration-Guides/Index.md
@@ -1,7 +1,7 @@
# ABP Framework Migration Guides
-* [4.2 to 4.3](Abp-4_3.md)
-* [4.x to 4.2](Abp-4_2.md)
-* [3.3.x to 4.0](Abp-4_0.md)
-* [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md)
-
+- [4.x to 5.0](Abp-5_0.md)
+- [4.2 to 4.3](Abp-4_3.md)
+- [4.x to 4.2](Abp-4_2.md)
+- [3.3.x to 4.0](Abp-4_0.md)
+- [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md)
diff --git a/docs/en/Module-Development-Basics.md b/docs/en/Module-Development-Basics.md
index 4b76465a3e..63cbc31893 100644
--- a/docs/en/Module-Development-Basics.md
+++ b/docs/en/Module-Development-Basics.md
@@ -1,4 +1,4 @@
-# Modularity
+# Modularity
## Introduction
diff --git a/docs/en/Modules/Cms-Kit/Index.md b/docs/en/Modules/Cms-Kit/Index.md
index eb08a0c53c..4c422b0bf3 100644
--- a/docs/en/Modules/Cms-Kit/Index.md
+++ b/docs/en/Modules/Cms-Kit/Index.md
@@ -20,11 +20,16 @@ All features are individually usable. If you disable a feature, it completely di
## How to Install
+> This module is depends on [BlobStoring](../../Blob-Storing.md) module, please install `BlobStoring` module first and add a provider. For more information, check the [documentation](../../Blob-Storing.md).
+
[ABP CLI](../../CLI.md) allows installing a module to a solution using the `add-module` command. You can install the CMS Kit module in a command-line terminal with the following command:
```bash
abp add-module Volo.CmsKit
```
+
+> By default, Cms-Kit is disabled by `GlobalFeature`. Because of that the initial migration will be empty. So you can skip the migration by adding `--skip-db-migrations` to command when installing if you are using Entity Framework Core. After enabling Cms-Kit global feture, please add new migration.
+
After the installation process, open the `GlobalFeatureConfigurator` class in the `Domain.Shared` project of your solution and place the following code into the `Configure` method to enable all the features in the CMS Kit module.
```csharp
diff --git a/docs/en/Modules/Setting-Management.md b/docs/en/Modules/Setting-Management.md
index 4eedcc969d..68b06372eb 100644
--- a/docs/en/Modules/Setting-Management.md
+++ b/docs/en/Modules/Setting-Management.md
@@ -278,7 +278,7 @@ Open the `app.component.ts` and modify the file as shown below:
```js
import { Component } from '@angular/core';
-import { SettingTabsService } from '@abp/ng.core'; // imported SettingTabsService
+import { SettingTabsService } from '@abp/ng.setting-management/config'; // imported SettingTabsService
import { MySettingsComponent } from './my-settings/my-settings.component'; // imported MySettingsComponent
@Component(/* component metadata */)
diff --git a/docs/en/Object-Extensions.md b/docs/en/Object-Extensions.md
index 72265b2690..4c2b1b5454 100644
--- a/docs/en/Object-Extensions.md
+++ b/docs/en/Object-Extensions.md
@@ -1,4 +1,4 @@
-# Object Extensions
+# Object Extensions
ABP Framework provides an **object extension system** to allow you to **add extra properties** to an existing object **without modifying** the related class. This allows to extend functionalities implemented by a depended [application module](Modules/Index.md), especially when you want to [extend entities](Customizing-Application-Modules-Extending-Entities.md) and [DTOs](Customizing-Application-Modules-Overriding-Services.md) defined by the module.
diff --git a/docs/en/Options.md b/docs/en/Options.md
index b4f4f09140..76616aca28 100644
--- a/docs/en/Options.md
+++ b/docs/en/Options.md
@@ -1,4 +1,4 @@
-# Options
+# Options
Microsoft has introduced [the options pattern](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options) that is used to configure a group of settings used by the framework services. This pattern is implemented by the [Microsoft.Extensions.Options](https://www.nuget.org/packages/Microsoft.Extensions.Options) NuGet package, so it is usable by any type of applications in addition to ASP.NET Core based applications.
diff --git a/docs/en/RabbitMq.md b/docs/en/RabbitMq.md
index 11dc305b41..9fc04aa5d6 100644
--- a/docs/en/RabbitMq.md
+++ b/docs/en/RabbitMq.md
@@ -1,3 +1,3 @@
-# RabbitMQ
+# RabbitMQ
TODO!
\ No newline at end of file
diff --git a/docs/en/Road-Map.md b/docs/en/Road-Map.md
index 215f017a47..de0a45ffbb 100644
--- a/docs/en/Road-Map.md
+++ b/docs/en/Road-Map.md
@@ -1,4 +1,4 @@
-# ABP Framework Road Map
+# ABP Framework Road Map
This document provides a road map, release schedule and planned features for the ABP Framework.
diff --git a/docs/en/SMS-Sending.md b/docs/en/SMS-Sending.md
index bf37814100..0dca487a69 100644
--- a/docs/en/SMS-Sending.md
+++ b/docs/en/SMS-Sending.md
@@ -1,4 +1,4 @@
-# SMS Sending
+# SMS Sending
The ABP Framework provides an abstraction to sending SMS. Having such an abstraction has some benefits;
diff --git a/docs/en/Settings.md b/docs/en/Settings.md
index 567cb02c4c..61c55f99b4 100644
--- a/docs/en/Settings.md
+++ b/docs/en/Settings.md
@@ -1,4 +1,4 @@
-# Settings
+# Settings
[Configuration system](Configuration.md) is a good way to configure the application on startup. In addition to the configurations, ABP provides another way to set and get some application settings.
diff --git a/docs/en/SignalR-Integration.md b/docs/en/SignalR-Integration.md
index 7ebf4f6539..35f109b8e6 100644
--- a/docs/en/SignalR-Integration.md
+++ b/docs/en/SignalR-Integration.md
@@ -52,15 +52,15 @@ Client side installation depends on your UI framework / client type.
Run the following command in the root folder of your web project:
-````bash
+```bash
yarn add @abp/signalr
-````
+```
> This requires to [install yarn](https://yarnpkg.com/) if you haven't install before.
This will add the `@abp/signalr` to the dependencies in the `package.json` of your project:
-````json
+```json
{
...
"dependencies": {
@@ -68,25 +68,25 @@ This will add the `@abp/signalr` to the dependencies in the `package.json` of yo
"@abp/signalr": "~2.7.0"
}
}
-````
+```
Run the following [ABP CLI](CLI.md) command in the root folder of your web project:
-````bash
+```bash
abp install-libs
-````
+```
This will copy the SignalR JavaScript files into your project:

-Finally, add the following code to your page/view to include the `signalr.js` file
+Finally, add the following code to your page/view to include the `signalr.js` file
-````xml
+```xml
@section scripts {
}
-````
+```
It requires to add `@using Volo.Abp.AspNetCore.Mvc.UI.Packages.SignalR` to your page/view.
@@ -108,27 +108,27 @@ ABP automatically registers all the hubs to the [dependency injection](Dependenc
Example:
-````csharp
+```csharp
public class MessagingHub : Hub
{
//...
}
-````
+```
The hub route will be `/signalr-hubs/messaging` for the `MessagingHub`:
-* Adding a standard `/signalr-hubs/` prefix
-* Continue with the **camel case** hub name, without the `Hub` suffix.
+- Adding a standard `/signalr-hubs/` prefix
+- Continue with the **kebab-case** hub name, without the `Hub` suffix.
If you want to specify the route, you can use the `HubRoute` attribute:
-````csharp
+```csharp
[HubRoute("/my-messaging-hub")]
public class MessagingHub : Hub
{
//...
}
-````
+```
### AbpHub Base Classes
@@ -136,7 +136,7 @@ Instead of the standard `Hub` and `Hub` classes, you can inherit from the `Ab
Example:
-````csharp
+```csharp
public class MessagingHub : AbpHub
{
public async Task SendMessage(string targetUserName, string message)
@@ -145,7 +145,7 @@ public class MessagingHub : AbpHub
var txt = L["MyText"]; //Localization
}
}
-````
+```
> While you could inject the same properties into your hub constructor, this way simplifies your hub class.
@@ -153,9 +153,9 @@ public class MessagingHub : AbpHub
ABP automatically registers all the hubs to the [dependency injection](Dependency-Injection.md) as a **transient service**. If you want to **disable auto dependency injection** registration for your hub class, just add a `DisableConventionalRegistration` attribute. You can still register your hub class to dependency injection in the `ConfigureServices` method of your module if you like:
-````csharp
+```csharp
context.Services.AddTransient();
-````
+```
When **you or ABP** register the class to the dependency injection, it is automatically mapped to the endpoint route configuration just as described in the previous sections. You can use `DisableAutoHubMap` attribute if you want to manually map your hub class.
@@ -163,7 +163,7 @@ For manual mapping, you have two options:
1. Use the `AbpSignalROptions` to add your map configuration (in the `ConfigureServices` method of your [module](Module-Development-Basics.md)), so ABP still performs the endpoint mapping for your hub:
-````csharp
+```csharp
Configure(options =>
{
options.Hubs.Add(
@@ -178,13 +178,13 @@ Configure(options =>
)
);
});
-````
+```
This is a good way to provide additional SignalR options.
If you don't want to disable auto hub map, but still want to perform additional SignalR configuration, use the `options.Hubs.AddOrUpdate(...)` method:
-````csharp
+```csharp
Configure(options =>
{
options.Hubs.AddOrUpdate(
@@ -200,13 +200,13 @@ Configure(options =>
}
);
});
-````
+```
This is the way you can modify the options of a hub class defined in a depended module (where you don't have the source code access).
2. Change `app.UseConfiguredEndpoints` in the `OnApplicationInitialization` method of your [module](Module-Development-Basics.md) as shown below (added a lambda method as the parameter).
-````csharp
+```csharp
app.UseConfiguredEndpoints(endpoints =>
{
endpoints.MapHub("/my-messaging-hub", options =>
@@ -214,7 +214,7 @@ app.UseConfiguredEndpoints(endpoints =>
options.LongPolling.PollTimeout = TimeSpan.FromSeconds(30);
});
});
-````
+```
### UserIdProvider
@@ -234,5 +234,5 @@ Refer to the Microsoft's documentation to [host and scale](https://docs.microsof
## See Also
-* [Microsoft SignalR documentation](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction)
-* [Real-Time Messaging In A Distributed Architecture Using ABP, SingalR & RabbitMQ](https://volosoft.com/blog/RealTime-Messaging-Distributed-Architecture-Abp-SingalR-RabbitMQ)
+- [Microsoft SignalR documentation](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction)
+- [Real-Time Messaging In A Distributed Architecture Using ABP, SingalR & RabbitMQ](https://volosoft.com/blog/RealTime-Messaging-Distributed-Architecture-Abp-SingalR-RabbitMQ)
diff --git a/docs/en/Specifications.md b/docs/en/Specifications.md
index bfe1d031d3..a9aeb2b050 100644
--- a/docs/en/Specifications.md
+++ b/docs/en/Specifications.md
@@ -1,4 +1,4 @@
-# Specifications
+# Specifications
Specification Pattern is used to define **named, reusable, combinable and testable filters** for entities and other business objects.
diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md
index 1fdf980ddc..5ad2dde24b 100644
--- a/docs/en/Startup-Templates/Application.md
+++ b/docs/en/Startup-Templates/Application.md
@@ -1,4 +1,4 @@
-# Application Startup Template
+# Application Startup Template
## Introduction
diff --git a/docs/en/Startup-Templates/Index.md b/docs/en/Startup-Templates/Index.md
index b73779ecb8..09755151db 100644
--- a/docs/en/Startup-Templates/Index.md
+++ b/docs/en/Startup-Templates/Index.md
@@ -1,4 +1,4 @@
-# Startup Templates
+# Startup Templates
While you can start with an empty project and add needed packages manually, startup templates make easy and comfortable to start a new solution with the ABP framework. Click the name from the list below to see the documentation of the related startup template:
diff --git a/docs/en/Startup-Templates/Module.md b/docs/en/Startup-Templates/Module.md
index cdcb964bef..c9ac6ccd48 100644
--- a/docs/en/Startup-Templates/Module.md
+++ b/docs/en/Startup-Templates/Module.md
@@ -1,4 +1,4 @@
-# Module Startup Template
+# Module Startup Template
This template can be used to create a **reusable [application module](../Modules/Index.md)** based on the [module development best practices & conventions](../Best-Practices/Index.md). It is also suitable for creating **microservices** (with or without UI).
diff --git a/docs/en/Testing.md b/docs/en/Testing.md
index 0a617174ed..e248ed51a6 100644
--- a/docs/en/Testing.md
+++ b/docs/en/Testing.md
@@ -1,4 +1,4 @@
-# Automated Testing
+# Automated Testing
## Introduction
diff --git a/docs/en/Timing.md b/docs/en/Timing.md
index 790721e7a8..fce17de4cf 100644
--- a/docs/en/Timing.md
+++ b/docs/en/Timing.md
@@ -1,4 +1,4 @@
-# Timing
+# Timing
Working with times & [time zones](https://en.wikipedia.org/wiki/Time_zone) is always tricky, especially if you need to build a **global system** that is used by users in **different time zones**.
diff --git a/docs/en/UI/Angular/Chart-Component.md b/docs/en/UI/Angular/Chart-Component.md
new file mode 100644
index 0000000000..a1cea80b52
--- /dev/null
+++ b/docs/en/UI/Angular/Chart-Component.md
@@ -0,0 +1,249 @@
+# Chart Component
+
+ABP Chart component exposed by `@abp/ng.components/chart.js` is based on [`charts.js`](https://www.chartjs.org/) v3+. You don't need to install the `chart.js` package. Since the `@abp/ng.components` is dependent on the `chart.js`, the package is already installed in your project.
+
+> Chart component loads `chart.js` script lazy. So it does not increase the bundle size.
+
+## How to Use
+
+First of all, need to import the `ChartModule` to your feature module as follows:
+
+```ts
+// your-feature.module.ts
+
+import { ChartModule } from '@abp/ng.components/chart.js';
+import { ChartDemoComponent } from './chart-demo.component';
+
+@NgModule({
+ imports: [
+ ChartModule,
+ // ...
+ ],
+ declarations: [ChartDemoComponent],
+ // ...
+})
+export class YourFeatureModule {}
+```
+
+Then, `abp-chart` component can be used. See an example:
+
+```ts
+// chart-demo.component.ts
+
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-chart-demo',
+ template: ` `,
+})
+export class ChartDemoComponent {
+ data = {
+ labels: ['Data 1', 'Data 2', 'Data 3'],
+ datasets: [
+ {
+ label: 'Dataset 1',
+ data: [40, 15, 45],
+ backgroundColor: ['#ff7675', '#fdcb6e', '#0984e3'],
+ },
+ ],
+ };
+}
+```
+
+> **Important Note**: Changing the chart data without creating a new data instance does not trigger change detection. In order to chart to redraw itself, a new data object needs to be created.
+
+See the result:
+
+
+
+## Examples
+
+### Doughnut
+
+```ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-chart-demo',
+ template: `
+
+ `,
+})
+export class ChartDemoComponent {
+ data = {
+ labels: ['Data 1', 'Data 2', 'Data 3'],
+ datasets: [
+ {
+ label: 'Dataset 1',
+ data: [40, 15, 45],
+ backgroundColor: ['#a0e6c3', '#f0ea4c', '#5b9dc3'],
+ },
+ ],
+ };
+
+ options = {
+ plugins: {
+ title: {
+ display: true,
+ text: 'Doughnut Chart',
+ fontSize: 16,
+ },
+ legend: {
+ position: 'bottom',
+ },
+ },
+ };
+}
+```
+
+Result:
+
+
+
+### Bar
+
+```ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-chart-demo',
+ template: `
+
+ `,
+})
+export class ChartDemoComponent {
+ data = {
+ labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
+ datasets: [
+ {
+ label: 'First dataset',
+ backgroundColor: '#42A5F5',
+ data: [65, 59, 80, 81, 56, 55, 40],
+ },
+ {
+ label: 'Second dataset',
+ backgroundColor: '#FFA726',
+ data: [28, 48, 40, 19, 86, 27, 90],
+ },
+ ],
+ };
+}
+```
+
+Result:
+
+
+
+### Radar
+
+```ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-chart-demo',
+ template: `
+
+
+
+ `,
+})
+export class ChartDemoComponent {
+ data = {
+ labels: [
+ 'January',
+ 'February',
+ 'March',
+ 'April',
+ 'May',
+ 'June',
+ 'July',
+ 'August',
+ 'September',
+ 'October',
+ 'November',
+ 'December',
+ ],
+ datasets: [
+ {
+ label: 'Dataset 1',
+ backgroundColor: 'rgba(179,181,198,0.2)',
+ borderColor: 'rgba(179,181,198,1)',
+ data: [65, 59, 90, 81, 56, 55, 40, 35, 82, 51, 62, 95],
+ },
+ {
+ label: 'Dataset 2',
+ backgroundColor: 'rgba(255,99,132,0.2)',
+ borderColor: 'rgba(255,99,132,1)',
+ data: [28, 48, 40, 58, 96, 27, 100, 44, 85, 77, 71, 39],
+ },
+ ],
+ };
+
+ addDataset() {
+ this.data = {
+ ...this.data,
+ datasets: [
+ ...this.data.datasets,
+ {
+ label: 'Dataset 3',
+ backgroundColor: 'rgba(54,162,235,0.2)',
+ borderColor: 'rgba(54, 162, 235, 1)',
+ data: [90, 95, 98, 91, 99, 96, 89, 95, 98, 93, 92, 90],
+ },
+ ],
+ };
+ }
+}
+```
+
+Result:
+
+
+
+See the [`chart.js` samples](https://www.chartjs.org/docs/latest/samples) for more examples.
+
+## API
+
+### `abp-chart`
+
+#### Properties
+
+| Name | Description | Type | Default |
+| --------------- | ---------------------------------------------------------------- | ----------------------- | ------- |
+| `[type]` | Type of the chart. | `string` | null |
+| `[data]` | Chart data to display | `any` | null |
+| `[options]` | Chart options to customize | `any` | null |
+| `[plugins]` | Chart plugins to customize behaviour | `any` | null |
+| `[width]` | Witdh of the chart | `string` | null |
+| `[height]` | Height of the chart | `string` | null |
+| `[responsive]` | Whether the chart is responsive | `boolean` | true |
+| `(dataSelect)` | A callback that executes when an element on the chart is clicked | `EventEmitter` | - |
+| `(initialized)` | A callback that executes when the chart is initialized | `EventEmitter` | - |
+
+#### Methods
+
+| Name | Description | Parameters |
+| ---------------- | ------------------------------------------------------------------- | ---------- |
+| `refresh` | Redraws the chart | - |
+| `reinit` | Destroys the chart then creates it again | - |
+| `getBase64Image` | Returns a base 64 encoded string of the chart in it's current state | - |
+| `generateLegend` | Returns an HTML string of a legend for the chart | - |
+| `getCanvas` | Returns the canvas HTML element | - |
diff --git a/docs/en/UI/Angular/Permission-Management.md b/docs/en/UI/Angular/Permission-Management.md
index b8125bb2a3..dd373d6274 100644
--- a/docs/en/UI/Angular/Permission-Management.md
+++ b/docs/en/UI/Angular/Permission-Management.md
@@ -4,8 +4,6 @@ A permission is a simple policy that is granted or prohibited for a particular u
You can get permission of authenticated user using `getGrantedPolicy` or `getGrantedPolicy$` method of `PermissionService`.
-> ConfigState's getGrantedPolicy selector and ConfigStateService's getGrantedPolicy method deprecated. Use permission service's `getGrantedPolicy$` or `getGrantedPolicy`methods instead
-
You can get permission as boolean value:
```js
@@ -77,4 +75,46 @@ const routes: Routes = [
];
```
-Granted Policies are stored in the `auth` property of `ConfigState`.
\ No newline at end of file
+## Customization
+
+In some cases, a custom permission management may be needed. All you need to do is to replace the service with your own. Here is how to achieve this:
+
+- First, create a service of your own. Let's call it `CustomPermissionService` and extend `PermissionService` from `@abp/ng.core` as follows:
+
+```js
+import { ConfigStateService, PermissionService } from '@abp/ng.core';
+import { Injectable } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class CustomPermissionService extends PermissionService {
+ constructor(configStateService: ConfigStateService) {
+ super(configStateService);
+ }
+
+ // This is an example to show how to override the methods
+ getGrantedPolicy$(key: string) {
+ return super.getGrantedPolicy$(key);
+ }
+}
+```
+
+- Then, in `app.module.ts`, provide this service as follows:
+
+```js
+@NgModule({
+ // ...
+ providers: [
+ // ...
+ {
+ provide: PermissionService,
+ useExisting: CustomPermissionService,
+ },
+ ],
+ // ...
+})
+export class AppModule {}
+```
+
+That's it. Now, when a directive/guard asks for `PermissionService` from angular, it will inject your service.
diff --git a/docs/en/UI/Angular/images/bar-chart.png b/docs/en/UI/Angular/images/bar-chart.png
new file mode 100644
index 0000000000..58e4b85d03
Binary files /dev/null and b/docs/en/UI/Angular/images/bar-chart.png differ
diff --git a/docs/en/UI/Angular/images/doughnut-chart.png b/docs/en/UI/Angular/images/doughnut-chart.png
new file mode 100644
index 0000000000..8249b30164
Binary files /dev/null and b/docs/en/UI/Angular/images/doughnut-chart.png differ
diff --git a/docs/en/UI/Angular/images/pie-chart.png b/docs/en/UI/Angular/images/pie-chart.png
new file mode 100644
index 0000000000..c4a9c86750
Binary files /dev/null and b/docs/en/UI/Angular/images/pie-chart.png differ
diff --git a/docs/en/UI/Angular/images/radar-chart.gif b/docs/en/UI/Angular/images/radar-chart.gif
new file mode 100644
index 0000000000..8f8eae042b
Binary files /dev/null and b/docs/en/UI/Angular/images/radar-chart.gif differ
diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json
index 03acdb0390..6bffa3d5ec 100644
--- a/docs/en/docs-nav.json
+++ b/docs/en/docs-nav.json
@@ -1083,6 +1083,10 @@
{
"text": "Page",
"path": "UI/Angular/Page-Component.md"
+ },
+ {
+ "text": "Chart",
+ "path": "UI/Angular/Chart-Component.md"
}
]
}
diff --git a/docs/es/Index.md b/docs/es/Index.md
index 772a0afc13..d05a4032da 100644
--- a/docs/es/Index.md
+++ b/docs/es/Index.md
@@ -1,4 +1,4 @@
-# Documentación de ABP
+# Documentación de ABP
ABP es un **marco de desarrollo de código abierto** enfocado en el desarrollo de aplicaciones web basadas en ASP.NET Core, pero tambien soporta el desarrollo de otro tipo de aplicaciones.
diff --git a/docs/pt-BR/Audit-Logging.md b/docs/pt-BR/Audit-Logging.md
index a714eebf14..609565d6f5 100644
--- a/docs/pt-BR/Audit-Logging.md
+++ b/docs/pt-BR/Audit-Logging.md
@@ -1,3 +1,3 @@
-# Audit Logging
+# Audit Logging
Façam
\ No newline at end of file
diff --git a/docs/pt-BR/Domain-Services.md b/docs/pt-BR/Domain-Services.md
index c412c7b3b3..2a211453fa 100644
--- a/docs/pt-BR/Domain-Services.md
+++ b/docs/pt-BR/Domain-Services.md
@@ -1,3 +1,3 @@
-# ABP Documentation
+# ABP Documentation
Façam!
\ No newline at end of file
diff --git a/docs/pt-BR/Emailing.md b/docs/pt-BR/Emailing.md
index a69b1cd7f3..ca704cad19 100644
--- a/docs/pt-BR/Emailing.md
+++ b/docs/pt-BR/Emailing.md
@@ -1,3 +1,3 @@
-# Emailing
+# Emailing
Façam!
\ No newline at end of file
diff --git a/docs/pt-BR/Integration-Tests.md b/docs/pt-BR/Integration-Tests.md
index 712ceb5633..9d2f17264c 100644
--- a/docs/pt-BR/Integration-Tests.md
+++ b/docs/pt-BR/Integration-Tests.md
@@ -1,3 +1,3 @@
-# Integration Tests
+# Integration Tests
Façam!
\ No newline at end of file
diff --git a/docs/pt-BR/SMS-Sending.md b/docs/pt-BR/SMS-Sending.md
index a69b1cd7f3..ca704cad19 100644
--- a/docs/pt-BR/SMS-Sending.md
+++ b/docs/pt-BR/SMS-Sending.md
@@ -1,3 +1,3 @@
-# Emailing
+# Emailing
Façam!
\ No newline at end of file
diff --git a/docs/pt-BR/Settings.md b/docs/pt-BR/Settings.md
index 55d5536798..ffc08071a2 100644
--- a/docs/pt-BR/Settings.md
+++ b/docs/pt-BR/Settings.md
@@ -1,3 +1,3 @@
-# Settings
+# Settings
Façam!
\ No newline at end of file
diff --git a/docs/pt-BR/Specifications.md b/docs/pt-BR/Specifications.md
index 0214f704ce..19a9db8a27 100644
--- a/docs/pt-BR/Specifications.md
+++ b/docs/pt-BR/Specifications.md
@@ -1,3 +1,3 @@
-# Specifications
+# Specifications
Façam!
\ No newline at end of file
diff --git a/docs/pt-BR/Testing.md b/docs/pt-BR/Testing.md
index ec9f5626a9..231db64907 100644
--- a/docs/pt-BR/Testing.md
+++ b/docs/pt-BR/Testing.md
@@ -1,3 +1,3 @@
-# Testing
+# Testing
Façam!
\ No newline at end of file
diff --git a/docs/zh-Hans/Best-Practices/Application-Services.md b/docs/zh-Hans/Best-Practices/Application-Services.md
index c99d67d518..0032fe1c11 100644
--- a/docs/zh-Hans/Best-Practices/Application-Services.md
+++ b/docs/zh-Hans/Best-Practices/Application-Services.md
@@ -1,4 +1,4 @@
-## 应用服务最佳实践 & 约定
+## 应用服务最佳实践 & 约定
* **推荐** 为每个 **聚合根** 创建一个应用服务.
diff --git a/docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md b/docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md
index 29e51501ea..7705dd179a 100644
--- a/docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md
+++ b/docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md
@@ -1,4 +1,4 @@
-## 数据传输对象最佳实践 & 约定
+## 数据传输对象最佳实践 & 约定
* **推荐** 在 **application.contracts** 层中定义DTO.
* **推荐** 在可能和必要的情况下从预构建的 **基础DTO类** 继承 (如 `EntityDto`, `CreationAuditedEntityDto`, `AuditedEntityDto`, `FullAuditedEntityDto` 等).
diff --git a/docs/zh-Hans/Best-Practices/Domain-Services.md b/docs/zh-Hans/Best-Practices/Domain-Services.md
index d7916ffa96..c844b18060 100644
--- a/docs/zh-Hans/Best-Practices/Domain-Services.md
+++ b/docs/zh-Hans/Best-Practices/Domain-Services.md
@@ -1,3 +1,3 @@
-## 领域服务最佳实践 & 约定
+## 领域服务最佳实践 & 约定
TODO
\ No newline at end of file
diff --git a/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md b/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md
index b01f7eab28..8a54ee85bb 100644
--- a/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md
+++ b/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md
@@ -1,4 +1,4 @@
-## Entity Framework Core 集成最佳实践
+## Entity Framework Core 集成最佳实践
> 有关EF Core 集成的基础知识,请参阅[Entity Framework Core 集成文档](../Entity-Framework-Core.md).
diff --git a/docs/zh-Hans/Best-Practices/Index.md b/docs/zh-Hans/Best-Practices/Index.md
index c99dec8604..863e397ac0 100644
--- a/docs/zh-Hans/Best-Practices/Index.md
+++ b/docs/zh-Hans/Best-Practices/Index.md
@@ -1,4 +1,4 @@
-## 模块开发最佳实践 & 约定
+## 模块开发最佳实践 & 约定
### 介绍
diff --git a/docs/zh-Hans/Best-Practices/Module-Architecture.md b/docs/zh-Hans/Best-Practices/Module-Architecture.md
index 648bf660b1..8a7cef183c 100644
--- a/docs/zh-Hans/Best-Practices/Module-Architecture.md
+++ b/docs/zh-Hans/Best-Practices/Module-Architecture.md
@@ -1,4 +1,4 @@
-## 模块化架构最佳实践 & 约定
+## 模块化架构最佳实践 & 约定
### 解决方案结构
diff --git a/docs/zh-Hans/Domain-Services.md b/docs/zh-Hans/Domain-Services.md
index 181efe0c43..9c9bb7dfd2 100644
--- a/docs/zh-Hans/Domain-Services.md
+++ b/docs/zh-Hans/Domain-Services.md
@@ -1,3 +1,3 @@
-# ABP Documentation
+# ABP Documentation
待添加
diff --git a/docs/zh-Hans/Entity-Framework-Core-Migrations.md b/docs/zh-Hans/Entity-Framework-Core-Migrations.md
index 8708516f76..9750d58612 100644
--- a/docs/zh-Hans/Entity-Framework-Core-Migrations.md
+++ b/docs/zh-Hans/Entity-Framework-Core-Migrations.md
@@ -1,4 +1,4 @@
-
+
# EF Core数据库迁移
本文首先介绍[应用程序启动模板](Startup-Templates/Application.md)提供的**默认结构**,并讨论你可能希望为自己的应用程序实现的**各种场景**.
diff --git a/docs/zh-Hans/Getting-Started-AspNetCore-Application.md b/docs/zh-Hans/Getting-Started-AspNetCore-Application.md
index be5e50c2bd..1e676d0c67 100644
--- a/docs/zh-Hans/Getting-Started-AspNetCore-Application.md
+++ b/docs/zh-Hans/Getting-Started-AspNetCore-Application.md
@@ -1,4 +1,4 @@
-# 在AspNet Core MVC Web Application中使用ABP
+# 在AspNet Core MVC Web Application中使用ABP
本教程将介绍如何开始以最少的依赖关系开始使用ABP开发.
diff --git a/docs/zh-Hans/Index.md b/docs/zh-Hans/Index.md
index d409f1e8ab..1cf45b3193 100644
--- a/docs/zh-Hans/Index.md
+++ b/docs/zh-Hans/Index.md
@@ -1,4 +1,4 @@
-# ABP 文档
+# ABP 文档
> 中文文档翻译来自[cnAbp](https://github.com/cnabp)组织,Abp中文网会持续跟进翻译,目前Abp vNext的英文文档还未完成,大家对整体框架没有深入的理解,翻译难免存在一些问题.敬请见谅.😀
diff --git a/docs/zh-Hans/Module-Development-Basics.md b/docs/zh-Hans/Module-Development-Basics.md
index 1e1e9a42cd..b92ddad7fd 100644
--- a/docs/zh-Hans/Module-Development-Basics.md
+++ b/docs/zh-Hans/Module-Development-Basics.md
@@ -1,4 +1,4 @@
-## 模块化
+## 模块化
### 介绍
diff --git a/docs/zh-Hans/Modules/Setting-Management.md b/docs/zh-Hans/Modules/Setting-Management.md
index acb4469fea..c99397e4b4 100644
--- a/docs/zh-Hans/Modules/Setting-Management.md
+++ b/docs/zh-Hans/Modules/Setting-Management.md
@@ -249,7 +249,7 @@ yarn ng generate component my-settings
```js
import { Component } from '@angular/core';
-import { SettingTabsService } from '@abp/ng.core'; // imported SettingTabsService
+import { SettingTabsService } from '@abp/ng.setting-management/config'; // imported SettingTabsService
import { MySettingsComponent } from './my-settings/my-settings.component'; // imported MySettingsComponent
@Component(/* component metadata */)
@@ -273,4 +273,4 @@ export class AppComponent {
导航到 `/setting-management` 路由你会看到以下变化:
-
\ No newline at end of file
+
diff --git a/docs/zh-Hans/Startup-Templates/Application.md b/docs/zh-Hans/Startup-Templates/Application.md
index 534a26d8fb..b51976f75d 100644
--- a/docs/zh-Hans/Startup-Templates/Application.md
+++ b/docs/zh-Hans/Startup-Templates/Application.md
@@ -1,4 +1,4 @@
-# 应用程序启动模板
+# 应用程序启动模板
## 介绍
diff --git a/docs/zh-Hans/Startup-Templates/Index.md b/docs/zh-Hans/Startup-Templates/Index.md
index 268f51e98b..2977003723 100644
--- a/docs/zh-Hans/Startup-Templates/Index.md
+++ b/docs/zh-Hans/Startup-Templates/Index.md
@@ -1,4 +1,4 @@
-# 启动模板
+# 启动模板
虽然你可以从一个空项目开始并手动添加所需的包,但启动模板可以非常轻松,舒适地使用ABP框架启动新的解决方案.
diff --git a/docs/zh-Hans/Startup-Templates/Module.md b/docs/zh-Hans/Startup-Templates/Module.md
index aaab99a477..67e0ad3be2 100644
--- a/docs/zh-Hans/Startup-Templates/Module.md
+++ b/docs/zh-Hans/Startup-Templates/Module.md
@@ -1,4 +1,4 @@
-# MVC模块启动模板
+# MVC模块启动模板
可用此模板开发基于[模块开发最佳实践和约定](../Best-Practices/Index.md)的可**复用 [应用程序模块](../Modules/Index.md)** . 它同样适用于开发**微服务**.
diff --git a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js b/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js
index f22ee88c97..55bd36d0db 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js
@@ -1,4 +1,4 @@
-var abp = abp || {};
+var abp = abp || {};
(function () {
abp.utils = abp.utils || {};
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xml
index bc5a74a236..7e9f94ead6 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xml
index bc5a74a236..7e9f94ead6 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xml
index bc5a74a236..7e9f94ead6 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs
index 712a768137..c0dfeecfc1 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs
@@ -2,6 +2,7 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
+using Volo.Abp.AspNetCore;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.MultiTenancy;
@@ -10,7 +11,7 @@ namespace Pages.Abp.MultiTenancy
[Area("abp")]
[RemoteService(Name = "abp")]
[Route("api/abp/multi-tenancy")]
- public class AbpTenantController : AbpController, IAbpTenantAppService
+ public class AbpTenantController : AbpControllerBase, IAbpTenantAppService
{
private readonly IAbpTenantAppService _abpTenantAppService;
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js
index 63b9d577d1..aa904f73e1 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js
@@ -1,4 +1,4 @@
-(function($) {
+(function($) {
var tenantSwitchModal = new abp.ModalManager(abp.appPath + 'Abp/MultiTenancy/TenantSwitchModal');
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ar.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ar.json
index fafc04a6ee..6af6463e71 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ar.json
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ar.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "ar",
"texts": {
"GivenTenantIsNotExist": "المستأجر المحدد غير موجود: {0}",
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/cs.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/cs.json
index 0f63728c77..bc89095c31 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/cs.json
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/cs.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "cs",
"texts": {
"GivenTenantIsNotExist": "Vybraný tenant neexistuje: {0}",
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/pl-PL.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/pl-PL.json
index 79d3e9640d..020688e50f 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/pl-PL.json
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/pl-PL.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "pl-PL",
"texts": {
"GivenTenantIsNotExist": "Podany najemca nie istnieje: {0}",
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json
index b5b6c374c1..4a6240dfa8 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "tr",
"texts": {
"GivenTenantIsNotExist": "İstenilen müşteri bulunamadı: {0}",
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/compilerconfig.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/compilerconfig.json
index b6108a03fa..9451f16d89 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/compilerconfig.json
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/compilerconfig.json
@@ -1,4 +1,4 @@
-[
+[
{
"outputFile": "wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css",
"inputFile": "wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss"
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css
index 285b0482da..49945770b9 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css
@@ -1,4 +1,4 @@
-.dataTable {
+.dataTable {
width: 100% !important;
border-spacing: 0 !important; }
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css
index e70b9e330b..0f7a98c12b 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css
@@ -1 +1 @@
-.dataTable{width:100% !important;border-spacing:0 !important;}.table td,.table th{padding:8px 10px;}.dataTable tbody tr td button{cursor:pointer;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li{cursor:pointer;padding:5px;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li a{display:block;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li:hover{background:#f4f5f8;}
\ No newline at end of file
+.dataTable{width:100% !important;border-spacing:0 !important;}.table td,.table th{padding:8px 10px;}.dataTable tbody tr td button{cursor:pointer;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li{cursor:pointer;padding:5px;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li a{display:block;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li:hover{background:#f4f5f8;}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss
index 7534888421..86fa21868a 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss
@@ -1,4 +1,4 @@
-.dataTable {
+.dataTable {
width: 100% !important;
border-spacing: 0 !important;
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js
index 0e7b6698a6..7a2c08ca7e 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js
@@ -1,4 +1,4 @@
-(function ($) {
+(function ($) {
if (!$ || !$.fn.ajaxForm) {
return;
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js
index 9c99a20acd..8fbf7871ce 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js
@@ -1,4 +1,4 @@
-(function ($) {
+(function ($) {
if (!$) {
return;
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js
index 3e3e24dc7a..547122d218 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js
@@ -1,4 +1,4 @@
-(function ($) {
+(function ($) {
abp.widgets = abp.widgets || {};
abp.WidgetManager = function (opts) {
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js
index f5b44fee44..273bf362aa 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js
@@ -1,4 +1,4 @@
-var abp = abp || {};
+var abp = abp || {};
(function ($) {
if (!Swal || !$) {
return;
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js
index 01b29cdfd7..37a7c40166 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js
@@ -1,4 +1,4 @@
-var abp = abp || {};
+var abp = abp || {};
(function () {
if (!toastr) {
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js
index e6061219b0..0433ed22ad 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js
@@ -1,4 +1,4 @@
-var abp = abp || {};
+var abp = abp || {};
(function () {
abp.ui = abp.ui || {};
abp.ui.extensions = abp.ui.extensions || {};
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpControllerBase.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpControllerBase.cs
new file mode 100644
index 0000000000..20ad62991f
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpControllerBase.cs
@@ -0,0 +1,105 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Localization;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using Volo.Abp.Aspects;
+using Volo.Abp.AspNetCore.Mvc.Validation;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Features;
+using Volo.Abp.Guids;
+using Volo.Abp.Localization;
+using Volo.Abp.MultiTenancy;
+using Volo.Abp.ObjectMapping;
+using Volo.Abp.Timing;
+using Volo.Abp.Uow;
+using Volo.Abp.Users;
+
+namespace Volo.Abp.AspNetCore.Mvc
+{
+ public abstract class AbpControllerBase : ControllerBase, IAvoidDuplicateCrossCuttingConcerns
+ {
+ public IAbpLazyServiceProvider LazyServiceProvider { get; set; }
+
+ protected IUnitOfWorkManager UnitOfWorkManager => LazyServiceProvider.LazyGetRequiredService();
+
+ protected Type ObjectMapperContext { get; set; }
+ protected IObjectMapper ObjectMapper => LazyServiceProvider.LazyGetService(provider =>
+ ObjectMapperContext == null
+ ? provider.GetRequiredService()
+ : (IObjectMapper) provider.GetRequiredService(typeof(IObjectMapper<>).MakeGenericType(ObjectMapperContext)));
+
+ protected IGuidGenerator GuidGenerator => LazyServiceProvider.LazyGetService(SimpleGuidGenerator.Instance);
+
+ protected ILoggerFactory LoggerFactory => LazyServiceProvider.LazyGetRequiredService();
+
+ protected ILogger Logger => LazyServiceProvider.LazyGetService(provider => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance);
+
+ protected ICurrentUser CurrentUser => LazyServiceProvider.LazyGetRequiredService();
+
+ protected ICurrentTenant CurrentTenant => LazyServiceProvider.LazyGetRequiredService();
+
+ protected IAuthorizationService AuthorizationService => LazyServiceProvider.LazyGetRequiredService();
+
+ protected IUnitOfWork CurrentUnitOfWork => UnitOfWorkManager?.Current;
+
+ protected IClock Clock => LazyServiceProvider.LazyGetRequiredService();
+
+ protected IModelStateValidator ModelValidator => LazyServiceProvider.LazyGetRequiredService();
+
+ protected IFeatureChecker FeatureChecker => LazyServiceProvider.LazyGetRequiredService();
+
+ protected IStringLocalizerFactory StringLocalizerFactory => LazyServiceProvider.LazyGetRequiredService();
+
+ protected IStringLocalizer L
+ {
+ get
+ {
+ if (_localizer == null)
+ {
+ _localizer = CreateLocalizer();
+ }
+
+ return _localizer;
+ }
+ }
+ private IStringLocalizer _localizer;
+
+ protected Type LocalizationResource
+ {
+ get => _localizationResource;
+ set
+ {
+ _localizationResource = value;
+ _localizer = null;
+ }
+ }
+ private Type _localizationResource = typeof(DefaultResource);
+
+ public List AppliedCrossCuttingConcerns { get; } = new List();
+
+ protected virtual IStringLocalizer CreateLocalizer()
+ {
+ if (LocalizationResource != null)
+ {
+ return StringLocalizerFactory.Create(LocalizationResource);
+ }
+
+ var localizer = StringLocalizerFactory.CreateDefaultOrNull();
+ if (localizer == null)
+ {
+ throw new AbpException($"Set {nameof(LocalizationResource)} or define the default localization resource type (by configuring the {nameof(AbpLocalizationOptions)}.{nameof(AbpLocalizationOptions.DefaultResourceType)}) to be able to use the {nameof(L)} object!");
+ }
+
+ return localizer;
+ }
+
+ protected virtual void ValidateModel()
+ {
+ ModelValidator?.Validate(ModelState);
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs
index 89282110b9..4947008411 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs
@@ -7,7 +7,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations
[Area("abp")]
[RemoteService(Name = "abp")]
[Route("api/abp/application-configuration")]
- public class AbpApplicationConfigurationController : AbpController, IAbpApplicationConfigurationAppService
+ public class AbpApplicationConfigurationController : AbpControllerBase, IAbpApplicationConfigurationAppService
{
private readonly IAbpApplicationConfigurationAppService _applicationConfigurationAppService;
private readonly IAbpAntiForgeryManager _antiForgeryManager;
diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xml b/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xsd b/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Auditing/FodyWeavers.xml b/framework/src/Volo.Abp.Auditing/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Auditing/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Auditing/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd b/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Authorization.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.Authorization.Abstractions/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Authorization.Abstractions/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Authorization.Abstractions/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Authorization/FodyWeavers.xml b/framework/src/Volo.Abp.Authorization/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Authorization/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Authorization/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd b/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en.json
index e7bc77c341..0e89764b33 100644
--- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en.json
+++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "en",
"texts": {
"Volo.Authorization:010001": "Authorization failed! Given policy has not granted.",
diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json
index e330581c69..97794b03b8 100644
--- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json
+++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "ro-RO",
"texts": {
"Volo.Authorization:010001": "Autorizare eşuată! Politica dată nu a fost acordată.",
diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/tr.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/tr.json
index b2d79bd949..f077822809 100644
--- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/tr.json
+++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/tr.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "tr",
"texts": {
"Volo.Authorization:010001": "Yetkilendirme başarısız! Belirtilen izin sağlanmamış.",
diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/zh-Hans.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/zh-Hans.json
index d0946ef6a5..81de414162 100644
--- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/zh-Hans.json
+++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/zh-Hans.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "zh-Hans",
"texts": {
"Volo.Authorization:010001": "授权失败! 提供的策略尚未授予.",
diff --git a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml
index bc5a74a236..7e9f94ead6 100644
--- a/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
diff --git a/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Autofac/FodyWeavers.xml b/framework/src/Volo.Abp.Autofac/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Autofac/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Autofac/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd b/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/ToolbarButton.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/ToolbarButton.razor
index 0cd13de50d..4d6ca27595 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/Components/ToolbarButton.razor
+++ b/framework/src/Volo.Abp.BlazoriseUI/Components/ToolbarButton.razor
@@ -1,7 +1,7 @@
diff --git a/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xml b/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xml
index bc5a74a236..7e9f94ead6 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
diff --git a/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xsd b/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xml
index bc5a74a236..7e9f94ead6 100644
--- a/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xml
index bc5a74a236..7e9f94ead6 100644
--- a/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xml b/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xsd b/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Caching/FodyWeavers.xml b/framework/src/Volo.Abp.Caching/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Caching/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Caching/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Caching/FodyWeavers.xsd b/framework/src/Volo.Abp.Caching/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Caching/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Caching/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs
index a34ec68387..5c57b19b5b 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs
@@ -21,7 +21,7 @@ namespace Volo.Abp.Cli.ServiceProxying.CSharp
private const string MethodPlaceholder = "";
private const string ClassName = "";
private const string ServiceInterface = "";
- private const string ServicePostfix = "AppService";
+ private static string[] ServicePostfixes = {"AppService" , "ApplicationService"};
private const string DefaultNamespace = "ClientProxies";
private const string Namespace = "";
private const string AppServicePrefix = "Volo.Abp.Application.Services";
@@ -290,7 +290,7 @@ namespace Volo.Abp.Cli.ServiceProxying.CSharp
}
var serviceInterface = controllerApiDescription.Interfaces.Last();
- return serviceInterface.Type.EndsWith(ServicePostfix);
+ return ServicePostfixes.Any(x => serviceInterface.Type.EndsWith(x));
}
private bool ShouldGenerateMethod(string appServiceTypeName, ActionApiDescriptionModel action)
diff --git a/framework/src/Volo.Abp.Cli/FodyWeavers.xml b/framework/src/Volo.Abp.Cli/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Cli/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Cli/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Cli/FodyWeavers.xsd b/framework/src/Volo.Abp.Cli/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Cli/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Cli/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Core/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Core/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Core/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Core/FodyWeavers.xsd b/framework/src/Volo.Abp.Core/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Core/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Core/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/ReflectionHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/ReflectionHelper.cs
index 132c198aa9..e0b999ac3d 100644
--- a/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/ReflectionHelper.cs
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/ReflectionHelper.cs
@@ -134,7 +134,7 @@ namespace Volo.Abp.Reflection
var currentType = objectType;
var objectPath = currentType.FullName;
var absolutePropertyPath = propertyPath;
- if (objectPath != null && absolutePropertyPath.StartsWith(objectPath))
+ if (objectPath != null && absolutePropertyPath.StartsWith(objectPath))
{
absolutePropertyPath = absolutePropertyPath.Replace(objectPath + ".", "");
}
@@ -144,7 +144,10 @@ namespace Volo.Abp.Reflection
var property = currentType.GetProperty(propertyName);
if (property != null)
{
- value = property.GetValue(value, null);
+ if (value != null)
+ {
+ value = property.GetValue(value, null);
+ }
currentType = property.PropertyType;
}
else
diff --git a/framework/src/Volo.Abp.Dapper/FodyWeavers.xml b/framework/src/Volo.Abp.Dapper/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Dapper/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Dapper/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd b/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Data/FodyWeavers.xml b/framework/src/Volo.Abp.Data/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Data/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Data/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Data/FodyWeavers.xsd b/framework/src/Volo.Abp.Data/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Data/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Data/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ar.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ar.json
index 5474677a84..ab4a51e1db 100644
--- a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ar.json
+++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ar.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "ar",
"texts": {
"MaxResultCountExceededExceptionMessage": "لا يمكن أن يكون {0} أكثر من {1}! قم بزيادة{2}. {3} على الخادم للسماح بمزيد من النتائج."
diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/tr.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/tr.json
index 428f348427..be09823ccd 100644
--- a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/tr.json
+++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/tr.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "tr",
"texts": {
"MaxResultCountExceededExceptionMessage": "{0} en fazla {1} olabilir, daha büyük olamaz! Daha fazla sonuca izin vermek için {2}.{3}'ü sunucu tarafında artırın."
diff --git a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs
index 54123bc843..528a8c67a1 100644
--- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs
+++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs
@@ -153,19 +153,6 @@ namespace Volo.Abp.Application.Services
return query;
}
- ///
- /// This method should create based on given input.
- /// It should filter query if needed, but should not do sorting or paging.
- /// Sorting should be done in and paging should be done in
- /// methods.
- ///
- /// The input.
- [Obsolete("Override the CreateFilteredQueryAsync method instead.")]
- protected virtual IQueryable CreateFilteredQuery(TGetListInput input)
- {
- return ReadOnlyRepository;
- }
-
///
/// This method should create based on given input.
/// It should filter query if needed, but should not do sorting or paging.
@@ -175,17 +162,6 @@ namespace Volo.Abp.Application.Services
/// The input.
protected virtual async Task> CreateFilteredQueryAsync(TGetListInput input)
{
- /* If user has overridden the CreateFilteredQuery method,
- * we don't want to make breaking change in this point.
- */
-#pragma warning disable 618
- var query = CreateFilteredQuery(input);
-#pragma warning restore 618
- if (!ReferenceEquals(query, ReadOnlyRepository))
- {
- return query;
- }
-
return await ReadOnlyRepository.GetQueryableAsync();
}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs
index 7aeffdad12..bf0704f085 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs
@@ -10,7 +10,7 @@ using Volo.Abp.Linq;
namespace Volo.Abp.Domain.Repositories
{
- public interface IReadOnlyRepository : IQueryable, IReadOnlyBasicRepository
+ public interface IReadOnlyRepository: IReadOnlyBasicRepository
where TEntity : class, IEntity
{
IAsyncQueryableExecuter AsyncExecuter { get; }
@@ -26,7 +26,7 @@ namespace Volo.Abp.Domain.Repositories
Task> WithDetailsAsync(params Expression>[] propertySelectors); //TODO: CancellationToken
Task> GetQueryableAsync(); //TODO: CancellationToken
-
+
///
/// Gets a list of entities by the given .
///
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs
index 0b32d54d45..da10901420 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs
@@ -1,6 +1,5 @@
using JetBrains.Annotations;
using System;
-using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
@@ -15,15 +14,6 @@ namespace Volo.Abp.Domain.Repositories
public abstract class RepositoryBase : BasicRepositoryBase, IRepository, IUnitOfWorkManagerAccessor
where TEntity : class, IEntity
{
- [Obsolete("This method will be removed in future versions.")]
- public virtual Type ElementType => GetQueryable().ElementType;
-
- [Obsolete("This method will be removed in future versions.")]
- public virtual Expression Expression => GetQueryable().Expression;
-
- [Obsolete("This method will be removed in future versions.")]
- public virtual IQueryProvider Provider => GetQueryable().Provider;
-
[Obsolete("Use WithDetailsAsync method.")]
public virtual IQueryable WithDetails()
{
@@ -46,18 +36,6 @@ namespace Volo.Abp.Domain.Repositories
return GetQueryableAsync();
}
- [Obsolete("This method will be removed in future versions.")]
- IEnumerator IEnumerable.GetEnumerator()
- {
- return GetEnumerator();
- }
-
- [Obsolete("This method will be removed in future versions.")]
- public IEnumerator GetEnumerator()
- {
- return GetQueryable().GetEnumerator();
- }
-
[Obsolete("Use GetQueryableAsync method.")]
protected abstract IQueryable GetQueryable();
diff --git a/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Emailing/FodyWeavers.xml b/framework/src/Volo.Abp.Emailing/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.Emailing/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.Emailing/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd b/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd
index 3f3946e282..ffa6fc4b78 100644
--- a/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd
+++ b/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/tr.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/tr.json
index 242920c8d9..8189cc620d 100644
--- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/tr.json
+++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/tr.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "tr",
"texts": {
"DisplayName:Abp.Mailing.DefaultFromAddress": "Varsayılan gönderici adresi",
diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json
index 2bf2fa5240..53fdf5d23e 100644
--- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json
+++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "zh-Hant",
"texts": {
"DisplayName:Abp.Mailing.DefaultFromAddress": "預設發信者地址",
diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Layout.tpl b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Layout.tpl
index 57453a027f..4c64588666 100644
--- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Layout.tpl
+++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Layout.tpl
@@ -1,4 +1,4 @@
-
+
diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Message.tpl b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Message.tpl
index 349de66b36..fa23fcba3f 100644
--- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Message.tpl
+++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Message.tpl
@@ -1 +1 @@
-{{model.message}}
\ No newline at end of file
+{{model.message}}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml
index be0de3a908..1715698ccd 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml
+++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml
@@ -1,3 +1,3 @@
-
+