From 04532530dd4736fe04958d4af27338a326477dfb Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Mon, 14 Aug 2023 17:45:47 +0300 Subject: [PATCH 01/92] Initial commit for v7.4 release post --- .../2023-08-15 v7_4_Preview/POST.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md new file mode 100644 index 0000000000..66a51716b2 --- /dev/null +++ b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md @@ -0,0 +1,81 @@ +# ABP.IO Platform 7.4 RC Has Been Released + +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **7.4 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version. + +Try this version and provide feedback for a more stable version of ABP v7.4! Thanks to all of you. + +## Get Started with the 7.4 RC + +Follow the steps below to try version 7.4.0 RC today: + +1) **Upgrade** the ABP CLI to version `7.4.0-rc.1` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 7.4.0-rc.1 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 7.4.0-rc.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 [Get Started](https://abp.io/get-started) page to generate a CLI command to create a new application. + +You can use any IDE that supports .NET 7.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v7.2: + +* [ABP Framework 7.3 to 7.4 Migration Guide](https://docs.abp.io/en/abp/7.4/Migration-Guides/Abp-7_4) + +## What's New with ABP Framework 7.4? + +In this section, I will introduce some major features released in this version. Here is a brief list of the titles that will be explained in the next sections: + +//TODO: + +## What's New with ABP Commercial 7.4? + +We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 7.4. + +//TODO: + +## Community News + +### Community Talks 2023.6: Live Community Question Session + +//TODO: mention about the talk and add a cover image!!! + +### Volosoft Will Attend to DevNot Developer Summit 2023 + +//TODO: mention about the event!!! + +### New ABP Community Posts + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [ABP Commercial - GDPR Module Overview](https://community.abp.io/posts/abp-commercial-gdpr-module-overview-kvmsm3ku) by [Engincan Veske](https://twitter.com/EngincanVeske) +* [Video: ABP Framework Data Transfer Objects](https://community.abp.io/videos/abp-framework-data-transfer-objects-qwebfqz5) by [Hamza Albreem](https://github.com/braim23) +* [Video: ABP Framework Essentials: MongoDB](https://community.abp.io/videos/abp-framework-essentials-mongodb-gwlblh5x) by [Hamza Albreem](https://github.com/braim23) +* [ABP Modules and Entity Dependencies](https://community.abp.io/posts/abp-modules-and-entity-dependencies-hn7wr093) by [Jack Fistelmann](https://github.com/nebula2) +* [How to add dark mode support to the Basic Theme in 3 steps?](https://community.abp.io/posts/how-to-add-dark-mode-support-to-the-basic-theme-in-3-steps-ge9c0f85) by [Enis Necipoğlu](https://twitter.com/EnisNecipoglu) +* [Deploying docker image to Azure with yml and bicep through Github Actions](https://community.abp.io/posts/deploying-docker-image-to-azure-with-yml-and-bicep-through-github-actions-cjiuh55m) by [Sturla](https://community.abp.io/members/Sturla) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +## Conclusion + +This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/7.4/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v7.4 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! \ No newline at end of file From f7a64d47945b14dc00d0092ca1ac467c909372b8 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Tue, 15 Aug 2023 11:02:00 +0300 Subject: [PATCH 02/92] Mention the developer summit 2023 on 7.4 release post --- .../2023-08-15 v7_4_Preview/POST.md | 40 ++++++++++++++---- .../developersummit.jpg | Bin 0 -> 87428 bytes 2 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/developersummit.jpg diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md index 66a51716b2..3683356026 100644 --- a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md +++ b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md @@ -35,7 +35,7 @@ You can use any IDE that supports .NET 7.x, like [Visual Studio 2022](https://vi ## Migration Guides There are a few breaking changes in this version that may affect your application. -Please see the following migration documents, if you are upgrading from v7.2: +Please see the following migration documents, if you are upgrading from v7.3: * [ABP Framework 7.3 to 7.4 Migration Guide](https://docs.abp.io/en/abp/7.4/Migration-Guides/Abp-7_4) @@ -43,23 +43,47 @@ Please see the following migration documents, if you are upgrading from v7.2: In this section, I will introduce some major features released in this version. Here is a brief list of the titles that will be explained in the next sections: -//TODO: +* Dynamic Setting Store +* Introducing the `AdditionalModuleAssemblyAttribute` +* `CorrelationId` Support on Distributed Events +* Dynamic Database Migrations +* Other News + +### Dynamic Setting Store + +//TODO:... + +### Introducing the `AdditionalModuleAssemblyAttribute` + +//TODO:... + +### `CorrelationId` Support on Distributed Events + +//TODO: ... + +### Dynamic Database Migrations + +//TODO: ... + +### Other News + +* [OpenIddict](https://github.com/openiddict/openiddict-core/tree/4.7.0) library has been upgraded to **v4.7.0**. See [#17334](https://github.com/abpframework/abp/pull/17334) for more info. +* ABP v7.4 introduces the `Volo.Abp.Maui.Client` package, which is used by the MAUI mobile application in ABP Commercial. See [#17201](https://github.com/abpframework/abp/pull/17201) for more info. +* In this version, the `AbpAspNetCoreIntegratedTestBase` class gets a generic type parameter, which expect either a startup class or an ABP module class. This allows us to use configurations from an ABP module or old-style ASP.NET Core Startup class in a test application class and this simplifies the test application project. See [#17039](https://github.com/abpframework/abp/pull/17039) for more info. ## What's New with ABP Commercial 7.4? -We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 7.4. +We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the features and changes made in the ABP Framework. The following sections introduce new features coming with ABP Commercial 7.4. //TODO: ## Community News -### Community Talks 2023.6: Live Community Question Session - -//TODO: mention about the talk and add a cover image!!! - ### Volosoft Will Attend to DevNot Developer Summit 2023 -//TODO: mention about the event!!! +![](developersummit.jpg) + +We are thrilled to announce that the co-founder of [Volosoft](https://volosoft.com/) and Lead Developer of the ABP Framework, Halil Ibrahim Kalkan will give a speech about "Building a Kubernetes Integrated Local Development Environment" in the [DevNot's Developer Summit 2023 event](https://summit.devnot.com/) on the 7th of October. ### New ABP Community Posts diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/developersummit.jpg b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/developersummit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65bae9031524a98ff6c53e9cc1dbc88d776cabbc GIT binary patch literal 87428 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 JemegE|JmILc@qEt literal 0 HcmV?d00001 From 2336e022f7d9737122714b957590aefb727c8179 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Tue, 15 Aug 2023 12:08:22 +0300 Subject: [PATCH 03/92] Update v7.4 release post for abp framework features --- .../2023-08-15 v7_4_Preview/POST.md | 35 +++++++++++++++--- .../2023-08-15 v7_4_Preview/cover-image.png | Bin 0 -> 238743 bytes 2 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/cover-image.png diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md index 3683356026..c85b6e39a2 100644 --- a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md +++ b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md @@ -44,22 +44,47 @@ Please see the following migration documents, if you are upgrading from v7.3: In this section, I will introduce some major features released in this version. Here is a brief list of the titles that will be explained in the next sections: * Dynamic Setting Store -* Introducing the `AdditionalModuleAssemblyAttribute` +* Introducing the `AdditionalAssemblyAttribute` * `CorrelationId` Support on Distributed Events * Dynamic Database Migrations * Other News ### Dynamic Setting Store -//TODO:... +Prior to this version, it was hard to define settings in different microservices and centrally manage all setting definitions in a single admin application. To make that possible, we were adding project references for all the microservices' service contract packages from a single microservice, so it can know all the setting definitions and manage them. -### Introducing the `AdditionalModuleAssemblyAttribute` +In this version, ABP Framework introduces the Dynamic Setting Store, which is an important feature that allows you to collect and get all setting definitions from a single point and overcome the setting management problems on microservices. -//TODO:... +> *Note*: If you are upgrading from an earlier version and using the Setting Management module, you need to create a new migration and apply it to your database because a new database table has been added for this feature. + +### Introducing the `AdditionalAssemblyAttribute` + +In this version, we have introduced the `AdditionalAssemblyAttribute` to define additional assemblies to be part of a module. ABP Framework automatically registers all the services of your module to the [Dependency Injection System](https://docs.abp.io/en/abp/latest/Dependency-Injection). It finds the service types by scanning types in the assembly that defines your module class. Typically, every assembly contains a separate module class definition and modules are depend on each other using the `DependsOn` attribute. + +In some rare cases, your module may consist of multiple assemblies, and only one of them define a module class, and you want to make the other assemblies parts of your module. This is especially useful, if you dont't want to depend on that module's dependencies. + +In that case, you can use the `AdditionalAssembly` attribute as shown below: + +```csharp +[DependsOn(...)] // Your module dependencies as you normally would do +[AdditionalAssembly(typeof(IdentityServiceModule))] // A type in the target assembly (in another assembly) +public class IdentityServiceTestModule : AbpModule +{ + ... +} +``` + +With the `AdditonalAssembly` attribute definition, ABP loads the assembly containing the `IdentityServiceModule` class as a part of the blog module. Notice that, in this case, none of the module dependencies of the `IdentityServiceModule` are loaded. Because, we are not depending on the `IdentityServiceModule`, instead we are just adding its assembly as a part of the `IdentityServiceTestModule`. + +> You can check the [Module Development Basics](https://docs.abp.io/en/abp/7.4/Module-Development-Basics) documentation to learn more. ### `CorrelationId` Support on Distributed Events -//TODO: ... +In this version, `CorrelationId` (a unique key that is used in distributed applications to trace requests accross multiple services/operations) is being attached to the distributed events, so you can relate events with HTTP requests and can trace all the related activities. + +ABP Framework generates a `correlationId` for the first time when an operation is started and then attachs the current `correlationId` to distributed events as an additional property. For example, if you are using the [transactional outbox or inbox pattern provided by ABP Framework](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus#outbox-inbox-for-transactional-events), you can see the `correlationId` in the extra properties of the `IncomingEventInfo` or `OutgoingEventInfo` classes with the standard `X-Correlation-Id` key. + +> You can check [this issue](https://github.com/abpframework/abp/issues/16773) for more information. ### Dynamic Database Migrations diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/cover-image.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/cover-image.png new file mode 100644 index 0000000000000000000000000000000000000000..06ced79397a68c9f254a984b68a3b1192c5fa227 GIT binary patch literal 238743 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 Date: Tue, 15 Aug 2023 16:19:25 +0300 Subject: [PATCH 04/92] Finalize the 7.4 release post --- .../2023-08-15 v7_4_Preview/POST.md | 104 +++++++++++++++++- .../book-extended-cs.png | Bin 0 -> 49290 bytes .../book-extended-cshtml.png | Bin 0 -> 180686 bytes .../2023-08-15 v7_4_Preview/editions.png | Bin 0 -> 265082 bytes .../2023-08-15 v7_4_Preview/maui.png | Bin 0 -> 85107 bytes .../move-all-tenants.png | Bin 0 -> 27697 bytes .../2023-08-15 v7_4_Preview/move-tenants.png | Bin 0 -> 55942 bytes .../2023-08-15 v7_4_Preview/page-feedback.png | Bin 0 -> 49529 bytes .../2023-08-15 v7_4_Preview/settings.png | Bin 0 -> 39160 bytes .../suite-custom-code-backend.png | Bin 0 -> 15607 bytes .../suite-custom-code-ui.png | Bin 0 -> 29415 bytes .../suite-custom-code.png | Bin 0 -> 53300 bytes 12 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/book-extended-cs.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/book-extended-cshtml.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/editions.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/maui.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/move-all-tenants.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/move-tenants.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/page-feedback.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/settings.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/suite-custom-code-backend.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/suite-custom-code-ui.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/suite-custom-code.png diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md index c85b6e39a2..24be340988 100644 --- a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md +++ b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md @@ -46,7 +46,7 @@ In this section, I will introduce some major features released in this version. * Dynamic Setting Store * Introducing the `AdditionalAssemblyAttribute` * `CorrelationId` Support on Distributed Events -* Dynamic Database Migrations +* Database Migration System for EF Core * Other News ### Dynamic Setting Store @@ -86,9 +86,16 @@ ABP Framework generates a `correlationId` for the first time when an operation i > You can check [this issue](https://github.com/abpframework/abp/issues/16773) for more information. -### Dynamic Database Migrations +### Database Migration System for EF Core -//TODO: ... +In this version, ABP Framework provides base classes and events to migrate the database schema and seed the database on application startup. This system works compatible with multi-tenancy and whenever a new tenant created or a tenant's database connection string has updated, it checks and applies database migrations for the new tenant state. + +This system especially useful to migrate database for microservices. In this way, when you deploy a new version of a microservice, you don't need to manually migrate its database. + +You need to take the following actions to use the database migration system: + +* Create a class that derives from `EfCoreRuntimeDatabaseMigratorBase` class, override and implement it's `SeedAsync` method. Lastly, execute the `CheckAndApplyDatabaseMigrationsAsync` method of your class in the `OnPostApplicationInitializationAsync` method of your module class. +* Create a class that derives from `DatabaseMigrationEventHandlerBase` class, override and implement it's `SeedAsync` method. Then, whenever a new tenant created or a tenant's connection string is changed then the `SeedAsync` method will be executed. ### Other News @@ -100,7 +107,96 @@ ABP Framework generates a `correlationId` for the first time when an operation i We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the features and changes made in the ABP Framework. The following sections introduce new features coming with ABP Commercial 7.4. -//TODO: +### Dynamic Text Template Store + +Prior to this version, it was hard to create text templates in different microservices and centrally manage them in a single admin application. For example, if you would define text template in your ordering microservice, then those text templates could not be seen on the administration microservice because the administration microservice would not any knowledge about that text templates (because it's hard-coded in the ordering microservice). + +In this version, the Dynamic Text Template Store has been introduced to make the [Text Template Management module](https://docs.abp.io/en/commercial/latest/modules/text-template-management) compatible with microservices and distributed systems. It allows you to store and get all text templates from a single point. Thanks to that, you can centrally manage the text templates in your admin application. + +> *Note*: If you are upgrading from an earlier version and using the Text Template Manamgement module, you need to create a new migration and apply it to your database. + +We will update the [Text Template Management module](https://docs.abp.io/en/commercial/latest/modules/text-template-management) in next days to state the configurations, while it mostly works automatically. You just need to configure the `TextTemplateManagementOptions` and set the `IsDynamicTemplateStoreEnabled` as true in you module class: + +```csharp +Configure(options => +{ + options.IsDynamicTemplateStoreEnabled = true; +}); +``` + +### Suite: Custom Code Support + +In this version, we have implemented the custom code support in Suite. This allows you to customize the generated code-blocks and preserve your custom code changes in the next CRUD Page Generation in Suite. ABP Suite specifies hook-points to allow adding custom code blocks. Then, the code that you written to these hook points will be respected and will not be overridden in the next entity generation. + +![](suite-custom-code.png) + +To enable custom code support, you should check the *Customizable code* in the crud page generation page. When you enable the custom code support, you will be seeing some hook-points in your application. + +For example, in the C# side, you'll be seeing some abstract classes and classes that derive from them (for entities, application services, interfaces, domain services and so on...). You can write your custom code in those classes (`*.Extended.cs`) and in the next time when you need to re-generate the entity, your custom code will not be overriden (only the base abstract classes will be re-generated and your changes on the Suite will be reflected to these base classes): + +Folder structure | Book.Extended.cs +:-------------------------:|:-------------------------: +![](suite-custom-code-backend.png) | ![](book-extended-cs.png) + +> *Note*: If you want to override the entity and add custom code, please do not touch the code between `...` placeholders, because the constructor of the entity should be always re-generated incase of a new property added. + +On the UI side, you can see *comment placeholders* in the pages for MVC & Blazor applications. These are hook-points provided by the ABP Suite and you can write your custom code between these comment sections: + +Folder structure | Books/Index.cshtml +:-------------------------:|:-------------------------: +![](suite-custom-code-ui.png) | ![](book-extended-cshtml.png) + +### MAUI & React Native UI Revisions + +In this version, we have revised MAUI & React Native mobile applications and added new pages, functionalities and make improvements on the UI side. + +![](maui.png) + +For example, in the MAUI application, we have implemented the following functionalities and change the UI completely: + +* **User Management Page**: Management page for your application users. You can search, add, update, or delete users of your application. +* **Tenants**: Management page for your tenants. +* **Settings**: Management page for your application settings. On this page, you can change **the current language**, **the profile picture**, **the current password**, or/and **the current theme**. + +Also, we have aligned the features on both of these mobile options (MAUI & React Native) and showed in the ["ABP Community Talks 2023.5: Exploring the Options for Mobile Development with the ABP Framework"](https://community.abp.io/events/mobile-development-with-the-abp-framework-ogtwaz5l). + +> If you have missed the event, you can watch from 👉 [here](https://www.youtube.com/watch?v=-wrdngeKgZw). + +### Check & Move Related Entities on Deletion/Demand + +In application modules, there are some entities those have complete relationship with each other such as role-user relation. Such cases, it's a typical requirement to check & move related entities that who have relation with the other entity that is about to be deleted. + +For example, if you need to delete an editon from your system, you would typically want to move the tenant that are associated to that edition. For this purpose, in this version, ABP Commercial allows you to move related entities on deletion/demand. + +![](editions.png) + +Currently, this feature is implemented for SaaS and Identity Pro modules and for the following relations: + +* Edition - Tenant +* Role - User +* Organization Unit - User + +Also, it's possible to move the related associated-records before deleting the record. For example, you can move all tenants from an edition as shown in the figure below: + +"Move all tenants" action | "Move all tenants" modal +:-------------------------:|:-------------------------: +![](move-all-tenants.png) | ![](move-tenants.png) + +### CMS Kit Pro: Page Feedback + +In this version, **Page Feedback** feature has been added to the [CMS Kit Pro](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index) module. This feature allows you to get feedback from a page in your application. This is especially useful, if you have content that need feedback from users. For example if you have a documentation, or blog website, it's a common requirement to assess the quality of the articles and get feedback from users. In that case, you can use the **Page Feedback** feature. + +![](page-feedback.png) + +### Chat Module: Deleting Messages & Conversations + +In this version, the [Chat Module](https://docs.abp.io/en/commercial/latest/modules/chat) allows you to delete individiual messages or a complete conversation. + +You can enable or disable the message/conversation deletion globally on your application: + +![](settings.png) + +> **Note**: The Angular UI hasn't been completed yet. We aim to complete it asap and include it in the next release. ## Community News diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/book-extended-cs.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/book-extended-cs.png new file mode 100644 index 0000000000000000000000000000000000000000..11791186210fe05fa9970dd41417f3f81381732c GIT binary patch literal 49290 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 C&iL;D literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/editions.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/editions.png new file mode 100644 index 0000000000000000000000000000000000000000..331706daa70d5a20a08e5eba7b53947dad572692 GIT binary patch literal 265082 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

Yd}ST7TSHm5%_zZSMcKkJc0K|l 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 Z&cR_g@H4l$ihk literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/suite-custom-code.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/suite-custom-code.png new file mode 100644 index 0000000000000000000000000000000000000000..2e510d07689e01434956104adf6479d560e0aa6c GIT binary patch literal 53300 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

J|5+9UUk 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 literal 0 HcmV?d00001 From 80c83856f936a7344a284cb2e6e5cc6eea0e4a05 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 15 Aug 2023 21:29:34 +0800 Subject: [PATCH 05/92] Object2Object mapping enhancements. --- .../Abp/ObjectMapping/DefaultObjectMapper.cs | 52 +++++++++++++++++++ ...apperModule_Specific_ObjectMapper_Tests.cs | 21 ++++++++ 2 files changed, 73 insertions(+) diff --git a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs index 7048d183c7..9751a4a063 100644 --- a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs +++ b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs @@ -1,6 +1,13 @@ using Microsoft.Extensions.DependencyInjection; using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; using Volo.Abp.DependencyInjection; +using Volo.Abp.Reflection; namespace Volo.Abp.ObjectMapping; @@ -19,6 +26,8 @@ public class DefaultObjectMapper : DefaultObjectMapper, IObjectMapper< public class DefaultObjectMapper : IObjectMapper, ITransientDependency { + protected static ConcurrentDictionary MethodInfoCache { get; } = new ConcurrentDictionary(); + public IAutoObjectMappingProvider AutoObjectMappingProvider { get; } protected IServiceProvider ServiceProvider { get; } @@ -46,6 +55,12 @@ public class DefaultObjectMapper : IObjectMapper, ITransientDependency { return specificMapper.Map(source); } + + var result = TryToMapCollection(scope, source, default); + if (result != null) + { + return result; + } } if (source is IMapTo mapperSource) @@ -85,6 +100,12 @@ public class DefaultObjectMapper : IObjectMapper, ITransientDependency { return specificMapper.Map(source, destination); } + + var result = TryToMapCollection(scope, source, destination); + if (result != null) + { + return result; + } } if (source is IMapTo mapperSource) @@ -102,6 +123,37 @@ public class DefaultObjectMapper : IObjectMapper, ITransientDependency return AutoMap(source, destination); } + protected virtual TDestination? TryToMapCollection(IServiceScope serviceScope, TSource source, TDestination? destination) + { + if (!typeof(TSource).IsGenericType || typeof(TSource).GetGenericTypeDefinition() != typeof(ICollection<>) || + !typeof(TDestination).IsGenericType || typeof(TDestination).GetGenericTypeDefinition() != typeof(ICollection<>)) + { + //skip, not a collection + return default; + } + + var sourceGenericTypeDefinition = typeof(TSource).GenericTypeArguments[0]; + var destinationGenericTypeDefinition = typeof(TDestination).GenericTypeArguments[0]; + var specificGenericTypeDefinitionMapper = serviceScope.ServiceProvider.GetService(typeof(IObjectMapper<,>).MakeGenericType(sourceGenericTypeDefinition, destinationGenericTypeDefinition)); + if (specificGenericTypeDefinitionMapper == null) + { + //skip, no specific mapper + return default; + } + + var cacheKey = $"{specificGenericTypeDefinitionMapper.GetType().FullName}-{(destination == null ? "MapMethodWithSingleParameter" : "MapMethodWithDoubleParameters")}"; + var method = MethodInfoCache.GetOrAdd(cacheKey, x => specificGenericTypeDefinitionMapper.GetType().GetMethods().First(m => m.Name == nameof(IObjectMapper.Map) && m.GetParameters().Length == (destination == null ? 1 : 2))); + var result = Activator.CreateInstance(typeof(Collection<>).MakeGenericType(destinationGenericTypeDefinition))!.As(); + foreach (var sourceItem in (IEnumerable)source!) + { + result.Add(destination == null + ? method.Invoke(specificGenericTypeDefinitionMapper, new [] {sourceItem})! + : method.Invoke(specificGenericTypeDefinitionMapper, new [] {sourceItem, Activator.CreateInstance(destinationGenericTypeDefinition)!})!); + } + + return (TDestination)result!; + } + protected virtual TDestination AutoMap(object source) { return AutoObjectMappingProvider.Map(source); diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs index 3b1e3553bd..af94bac5b8 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using Microsoft.Extensions.DependencyInjection; using Shouldly; using Volo.Abp.AutoMapper.SampleClasses; @@ -24,6 +26,25 @@ public class AbpAutoMapperModule_Specific_ObjectMapper_Tests : AbpIntegratedTest dto.Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. } + [Fact] + public void Specific_Object_Mapper_Should_Be_Used_For_Collections_If_Registered() + { + var dtos = _objectMapper.Map, ICollection>(new List() + { + new MyEntity { Number = 42 } + }); + dtos.First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + + dtos = _objectMapper.Map, ICollection>(new List() + { + new MyEntity { Number = 42 } + }, new List() //When mapping to an existing collection, the destination collection is cleared first + { + new MyEntityDto2 { Number = 44 } + }); + dtos.First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + } + [Fact] public void Should_Use_Destination_Object_Constructor_If_Available() { From e2d274ee0ca8e8ae4c9c020412624b015297bcba Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Tue, 15 Aug 2023 16:54:23 +0300 Subject: [PATCH 06/92] Update POST.md --- .../2023-08-15 v7_4_Preview/POST.md | 56 ++++++++++--------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md index 24be340988..5520d6fb4b 100644 --- a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md +++ b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md @@ -59,9 +59,9 @@ In this version, ABP Framework introduces the Dynamic Setting Store, which is an ### Introducing the `AdditionalAssemblyAttribute` -In this version, we have introduced the `AdditionalAssemblyAttribute` to define additional assemblies to be part of a module. ABP Framework automatically registers all the services of your module to the [Dependency Injection System](https://docs.abp.io/en/abp/latest/Dependency-Injection). It finds the service types by scanning types in the assembly that defines your module class. Typically, every assembly contains a separate module class definition and modules are depend on each other using the `DependsOn` attribute. +In this version, we have introduced the `AdditionalAssemblyAttribute` to define additional assemblies to be part of a module. ABP Framework automatically registers all the services of your module to the [Dependency Injection System](https://docs.abp.io/en/abp/latest/Dependency-Injection). It finds the service types by scanning types in the assembly that defines your module class. Typically, every assembly contains a separate module class definition and modules depend on each other using the `DependsOn` attribute. -In some rare cases, your module may consist of multiple assemblies, and only one of them define a module class, and you want to make the other assemblies parts of your module. This is especially useful, if you dont't want to depend on that module's dependencies. +In some rare cases, your module may consist of multiple assemblies and only one of them defines a module class, and you want to make the other assemblies parts of your module. This is especially useful if you don't want to depend on that module's dependencies. In that case, you can use the `AdditionalAssembly` attribute as shown below: @@ -74,34 +74,34 @@ public class IdentityServiceTestModule : AbpModule } ``` -With the `AdditonalAssembly` attribute definition, ABP loads the assembly containing the `IdentityServiceModule` class as a part of the blog module. Notice that, in this case, none of the module dependencies of the `IdentityServiceModule` are loaded. Because, we are not depending on the `IdentityServiceModule`, instead we are just adding its assembly as a part of the `IdentityServiceTestModule`. +With the `AdditonalAssembly` attribute definition, ABP loads the assembly containing the `IdentityServiceModule` class as a part of the identity service module. Notice that, in this case, none of the module dependencies of the `IdentityServiceModule` are loaded. Because we are not depending on the `IdentityServiceModule`, instead we are just adding its assembly as a part of the `IdentityServiceTestModule`. > You can check the [Module Development Basics](https://docs.abp.io/en/abp/7.4/Module-Development-Basics) documentation to learn more. ### `CorrelationId` Support on Distributed Events -In this version, `CorrelationId` (a unique key that is used in distributed applications to trace requests accross multiple services/operations) is being attached to the distributed events, so you can relate events with HTTP requests and can trace all the related activities. +In this version, `CorrelationId` (a unique key that is used in distributed applications to trace requests across multiple services/operations) is attached to the distributed events, so you can relate events with HTTP requests and can trace all the related activities. -ABP Framework generates a `correlationId` for the first time when an operation is started and then attachs the current `correlationId` to distributed events as an additional property. For example, if you are using the [transactional outbox or inbox pattern provided by ABP Framework](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus#outbox-inbox-for-transactional-events), you can see the `correlationId` in the extra properties of the `IncomingEventInfo` or `OutgoingEventInfo` classes with the standard `X-Correlation-Id` key. +ABP Framework generates a `correlationId` for the first time when an operation is started and then attaches the current `correlationId` to distributed events as an additional property. For example, if you are using the [transactional outbox or inbox pattern provided by ABP Framework](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus#outbox-inbox-for-transactional-events), you can see the `correlationId` in the extra properties of the `IncomingEventInfo` or `OutgoingEventInfo` classes with the standard `X-Correlation-Id` key. > You can check [this issue](https://github.com/abpframework/abp/issues/16773) for more information. ### Database Migration System for EF Core -In this version, ABP Framework provides base classes and events to migrate the database schema and seed the database on application startup. This system works compatible with multi-tenancy and whenever a new tenant created or a tenant's database connection string has updated, it checks and applies database migrations for the new tenant state. +In this version, ABP Framework provides base classes and events to migrate the database schema and seed the database on application startup. This system works compatible with multi-tenancy and whenever a new tenant is created or a tenant's database connection string has been updated, it checks and applies database migrations for the new tenant state. -This system especially useful to migrate database for microservices. In this way, when you deploy a new version of a microservice, you don't need to manually migrate its database. +This system is especially useful to migrate databases for microservices. In this way, when you deploy a new version of a microservice, you don't need to manually migrate its database. You need to take the following actions to use the database migration system: -* Create a class that derives from `EfCoreRuntimeDatabaseMigratorBase` class, override and implement it's `SeedAsync` method. Lastly, execute the `CheckAndApplyDatabaseMigrationsAsync` method of your class in the `OnPostApplicationInitializationAsync` method of your module class. -* Create a class that derives from `DatabaseMigrationEventHandlerBase` class, override and implement it's `SeedAsync` method. Then, whenever a new tenant created or a tenant's connection string is changed then the `SeedAsync` method will be executed. +* Create a class that derives from `EfCoreRuntimeDatabaseMigratorBase` class, override and implement its `SeedAsync` method. Lastly, execute the `CheckAndApplyDatabaseMigrationsAsync` method of your class in the `OnPostApplicationInitializationAsync` method of your module class. +* Create a class that derives from `DatabaseMigrationEventHandlerBase` class, override and implement its `SeedAsync` method. Then, whenever a new tenant is created or a tenant's connection string is changed then the `SeedAsync` method will be executed. ### Other News * [OpenIddict](https://github.com/openiddict/openiddict-core/tree/4.7.0) library has been upgraded to **v4.7.0**. See [#17334](https://github.com/abpframework/abp/pull/17334) for more info. * ABP v7.4 introduces the `Volo.Abp.Maui.Client` package, which is used by the MAUI mobile application in ABP Commercial. See [#17201](https://github.com/abpframework/abp/pull/17201) for more info. -* In this version, the `AbpAspNetCoreIntegratedTestBase` class gets a generic type parameter, which expect either a startup class or an ABP module class. This allows us to use configurations from an ABP module or old-style ASP.NET Core Startup class in a test application class and this simplifies the test application project. See [#17039](https://github.com/abpframework/abp/pull/17039) for more info. +* In this version, the `AbpAspNetCoreIntegratedTestBase` class gets a generic type parameter, which expects either a startup class or an ABP module class. This allows us to use configurations from an ABP module or old-style ASP.NET Core Startup class in a test application class and this simplifies the test application project. See [#17039](https://github.com/abpframework/abp/pull/17039) for more info. ## What's New with ABP Commercial 7.4? @@ -109,13 +109,15 @@ We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the f ### Dynamic Text Template Store -Prior to this version, it was hard to create text templates in different microservices and centrally manage them in a single admin application. For example, if you would define text template in your ordering microservice, then those text templates could not be seen on the administration microservice because the administration microservice would not any knowledge about that text templates (because it's hard-coded in the ordering microservice). +Prior to this version, it was hard to create text templates in different microservices and centrally manage them in a single admin application. For example, if you would define a text template in your ordering microservice, then those text templates could not be seen on the administration microservice because the administration microservice would not have any knowledge about that text template (because it's hard-coded in the ordering microservice). -In this version, the Dynamic Text Template Store has been introduced to make the [Text Template Management module](https://docs.abp.io/en/commercial/latest/modules/text-template-management) compatible with microservices and distributed systems. It allows you to store and get all text templates from a single point. Thanks to that, you can centrally manage the text templates in your admin application. +For this reason, in this version, the Dynamic Text Template Store has been introduced to make the [Text Template Management module](https://docs.abp.io/en/commercial/latest/modules/text-template-management) compatible with microservices and distributed systems. It allows you to store and get all text templates from a single point. Thanks to that, you can centrally manage the text templates in your admin application. -> *Note*: If you are upgrading from an earlier version and using the Text Template Manamgement module, you need to create a new migration and apply it to your database. +> *Note*: If you are upgrading from an earlier version and using the Text Template Management module, you need to create a new migration and apply it to your database. -We will update the [Text Template Management module](https://docs.abp.io/en/commercial/latest/modules/text-template-management) in next days to state the configurations, while it mostly works automatically. You just need to configure the `TextTemplateManagementOptions` and set the `IsDynamicTemplateStoreEnabled` as true in you module class: +We will update the [Text Template Management module](https://docs.abp.io/en/commercial/latest/modules/text-template-management) in the next few days to state the configurations, while it mostly works automatically. + +To enable the dynamic template store, you just need to configure the `TextTemplateManagementOptions` and set the `IsDynamicTemplateStoreEnabled` as true in you module class: ```csharp Configure(options => @@ -126,21 +128,21 @@ Configure(options => ### Suite: Custom Code Support -In this version, we have implemented the custom code support in Suite. This allows you to customize the generated code-blocks and preserve your custom code changes in the next CRUD Page Generation in Suite. ABP Suite specifies hook-points to allow adding custom code blocks. Then, the code that you written to these hook points will be respected and will not be overridden in the next entity generation. +In this version, we have implemented the custom code support in Suite. This allows you to customize the generated code-blocks and preserve your custom code changes in the next CRUD Page Generation in Suite. ABP Suite specifies hook-points to allow adding custom code blocks. Then, the code that you wrote to these hook points will be respected and will not be overridden in the next entity generation. ![](suite-custom-code.png) To enable custom code support, you should check the *Customizable code* in the crud page generation page. When you enable the custom code support, you will be seeing some hook-points in your application. -For example, in the C# side, you'll be seeing some abstract classes and classes that derive from them (for entities, application services, interfaces, domain services and so on...). You can write your custom code in those classes (`*.Extended.cs`) and in the next time when you need to re-generate the entity, your custom code will not be overriden (only the base abstract classes will be re-generated and your changes on the Suite will be reflected to these base classes): +For example, on the C# side, you'll be seeing some abstract classes and classes that derive from them (for entities, application services, interfaces, domain services, and so on...). You can write your custom code in those classes (`*.Extended.cs`) and the next time when you need to re-generate the entity, your custom code will not be overridden (only the base abstract classes will be re-generated and your changes on the Suite will be respected): Folder structure | Book.Extended.cs :-------------------------:|:-------------------------: ![](suite-custom-code-backend.png) | ![](book-extended-cs.png) -> *Note*: If you want to override the entity and add custom code, please do not touch the code between `...` placeholders, because the constructor of the entity should be always re-generated incase of a new property added. +> *Note*: If you want to override the entity and add custom code, please do not touch the code between `...` placeholders, because the constructor of the entity should be always re-generated in case of a new property added. -On the UI side, you can see *comment placeholders* in the pages for MVC & Blazor applications. These are hook-points provided by the ABP Suite and you can write your custom code between these comment sections: +On the UI side, you can see *comment placeholders* on the pages for MVC & Blazor applications. These are hook-points provided by the ABP Suite and you can write your custom code between these comment sections: Folder structure | Books/Index.cshtml :-------------------------:|:-------------------------: @@ -148,25 +150,25 @@ Folder structure | Books/Index.cshtml ### MAUI & React Native UI Revisions -In this version, we have revised MAUI & React Native mobile applications and added new pages, functionalities and make improvements on the UI side. +In this version, we have revised MAUI & React Native mobile applications and added new pages, functionalities and made improvements on the UI side. ![](maui.png) -For example, in the MAUI application, we have implemented the following functionalities and change the UI completely: +For example, in the MAUI application, we have implemented the following functionalities and changed the UI completely: * **User Management Page**: Management page for your application users. You can search, add, update, or delete users of your application. * **Tenants**: Management page for your tenants. * **Settings**: Management page for your application settings. On this page, you can change **the current language**, **the profile picture**, **the current password**, or/and **the current theme**. -Also, we have aligned the features on both of these mobile options (MAUI & React Native) and showed in the ["ABP Community Talks 2023.5: Exploring the Options for Mobile Development with the ABP Framework"](https://community.abp.io/events/mobile-development-with-the-abp-framework-ogtwaz5l). +Also, we have aligned the features on both of these mobile options (MAUI & React Native) and showed them in the ["ABP Community Talks 2023.5: Exploring the Options for Mobile Development with the ABP Framework"](https://community.abp.io/events/mobile-development-with-the-abp-framework-ogtwaz5l). > If you have missed the event, you can watch from 👉 [here](https://www.youtube.com/watch?v=-wrdngeKgZw). ### Check & Move Related Entities on Deletion/Demand -In application modules, there are some entities those have complete relationship with each other such as role-user relation. Such cases, it's a typical requirement to check & move related entities that who have relation with the other entity that is about to be deleted. +In application modules, there are some entities that have complete relationships with each other such as role-user relations. In such cases, it's a typical requirement to check & move related entities that have a relation with the other entity that is about to be deleted. -For example, if you need to delete an editon from your system, you would typically want to move the tenant that are associated to that edition. For this purpose, in this version, ABP Commercial allows you to move related entities on deletion/demand. +For example, if you need to delete an edition from your system, you would typically want to move the tenant that is associated with that edition. For this purpose, in this version, ABP Commercial allows you to move related entities on deletion/demand. ![](editions.png) @@ -184,13 +186,15 @@ Also, it's possible to move the related associated-records before deleting the r ### CMS Kit Pro: Page Feedback -In this version, **Page Feedback** feature has been added to the [CMS Kit Pro](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index) module. This feature allows you to get feedback from a page in your application. This is especially useful, if you have content that need feedback from users. For example if you have a documentation, or blog website, it's a common requirement to assess the quality of the articles and get feedback from users. In that case, you can use the **Page Feedback** feature. +In this version, the **Page Feedback** feature has been added to the [CMS Kit Pro](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index) module. This feature allows you to get feedback from a page in your application. + +This is especially useful if you have content that needs feedback from users. For example, if you have documentation or a blog website, it's a common requirement to assess the quality of the articles and get feedback from users. In that case, you can use this feature: ![](page-feedback.png) ### Chat Module: Deleting Messages & Conversations -In this version, the [Chat Module](https://docs.abp.io/en/commercial/latest/modules/chat) allows you to delete individiual messages or a complete conversation. +In this version, the [Chat Module](https://docs.abp.io/en/commercial/latest/modules/chat) allows you to delete individual messages or a complete conversation. You can enable or disable the message/conversation deletion globally on your application: @@ -204,7 +208,7 @@ You can enable or disable the message/conversation deletion globally on your app ![](developersummit.jpg) -We are thrilled to announce that the co-founder of [Volosoft](https://volosoft.com/) and Lead Developer of the ABP Framework, Halil Ibrahim Kalkan will give a speech about "Building a Kubernetes Integrated Local Development Environment" in the [DevNot's Developer Summit 2023 event](https://summit.devnot.com/) on the 7th of October. +We are thrilled to announce that the co-founder of [Volosoft](https://volosoft.com/) and Lead Developer of the ABP Framework, Halil Ibrahim Kalkan will give a speech about "Building a Kubernetes Integrated Local Development Environment" in the [Developer Summit 2023 event](https://summit.devnot.com/) on the 7th of October. ### New ABP Community Posts From e05d105247cbca8e9fa4fd9292fce7ef80e33a54 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 16 Aug 2023 09:19:48 +0800 Subject: [PATCH 07/92] Update DefaultObjectMapper.cs --- .../Abp/ObjectMapping/DefaultObjectMapper.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs index 9751a4a063..17c821f3ce 100644 --- a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs +++ b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs @@ -7,7 +7,6 @@ using System.Collections.ObjectModel; using System.Linq; using System.Reflection; using Volo.Abp.DependencyInjection; -using Volo.Abp.Reflection; namespace Volo.Abp.ObjectMapping; @@ -134,21 +133,27 @@ public class DefaultObjectMapper : IObjectMapper, ITransientDependency var sourceGenericTypeDefinition = typeof(TSource).GenericTypeArguments[0]; var destinationGenericTypeDefinition = typeof(TDestination).GenericTypeArguments[0]; - var specificGenericTypeDefinitionMapper = serviceScope.ServiceProvider.GetService(typeof(IObjectMapper<,>).MakeGenericType(sourceGenericTypeDefinition, destinationGenericTypeDefinition)); - if (specificGenericTypeDefinitionMapper == null) + var mapperType = typeof(IObjectMapper<,>).MakeGenericType(sourceGenericTypeDefinition, destinationGenericTypeDefinition); + var specificMapper = serviceScope.ServiceProvider.GetService(mapperType); + if (specificMapper == null) { //skip, no specific mapper return default; } - var cacheKey = $"{specificGenericTypeDefinitionMapper.GetType().FullName}-{(destination == null ? "MapMethodWithSingleParameter" : "MapMethodWithDoubleParameters")}"; - var method = MethodInfoCache.GetOrAdd(cacheKey, x => specificGenericTypeDefinitionMapper.GetType().GetMethods().First(m => m.Name == nameof(IObjectMapper.Map) && m.GetParameters().Length == (destination == null ? 1 : 2))); + var cacheKey = $"{mapperType.FullName}{(destination == null ? "MapMethodWithSingleParameter" : "MapMethodWithDoubleParameters")}"; + var method = MethodInfoCache.GetOrAdd(cacheKey, _ => + { + return specificMapper.GetType().GetMethods().First(x => x.Name == nameof(IObjectMapper.Map) && + x.GetParameters().Length == (destination == null ? 1 : 2)); + }); + var result = Activator.CreateInstance(typeof(Collection<>).MakeGenericType(destinationGenericTypeDefinition))!.As(); foreach (var sourceItem in (IEnumerable)source!) { result.Add(destination == null - ? method.Invoke(specificGenericTypeDefinitionMapper, new [] {sourceItem})! - : method.Invoke(specificGenericTypeDefinitionMapper, new [] {sourceItem, Activator.CreateInstance(destinationGenericTypeDefinition)!})!); + ? method.Invoke(specificMapper, new [] { sourceItem })! + : method.Invoke(specificMapper, new [] { sourceItem, Activator.CreateInstance(destinationGenericTypeDefinition)! })!); } return (TDestination)result!; From 9d9fa7075fd6d5d0079d71412a87f816d355766b Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 16 Aug 2023 13:43:21 +0800 Subject: [PATCH 08/92] Support more collection types. --- .../Abp/ObjectMapping/DefaultObjectMapper.cs | 88 ++++++++++++++++--- ...apperModule_Specific_ObjectMapper_Tests.cs | 40 +++++++-- 2 files changed, 111 insertions(+), 17 deletions(-) diff --git a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs index 17c821f3ce..21a001266a 100644 --- a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs +++ b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs @@ -124,16 +124,12 @@ public class DefaultObjectMapper : IObjectMapper, ITransientDependency protected virtual TDestination? TryToMapCollection(IServiceScope serviceScope, TSource source, TDestination? destination) { - if (!typeof(TSource).IsGenericType || typeof(TSource).GetGenericTypeDefinition() != typeof(ICollection<>) || - !typeof(TDestination).IsGenericType || typeof(TDestination).GetGenericTypeDefinition() != typeof(ICollection<>)) + if (!IsCollectionGenericType(out var sourceArgumentType, out var destinationArgumentType, out var definitionGenericType)) { - //skip, not a collection return default; } - var sourceGenericTypeDefinition = typeof(TSource).GenericTypeArguments[0]; - var destinationGenericTypeDefinition = typeof(TDestination).GenericTypeArguments[0]; - var mapperType = typeof(IObjectMapper<,>).MakeGenericType(sourceGenericTypeDefinition, destinationGenericTypeDefinition); + var mapperType = typeof(IObjectMapper<,>).MakeGenericType(sourceArgumentType, destinationArgumentType); var specificMapper = serviceScope.ServiceProvider.GetService(mapperType); if (specificMapper == null) { @@ -148,17 +144,87 @@ public class DefaultObjectMapper : IObjectMapper, ITransientDependency x.GetParameters().Length == (destination == null ? 1 : 2)); }); - var result = Activator.CreateInstance(typeof(Collection<>).MakeGenericType(destinationGenericTypeDefinition))!.As(); - foreach (var sourceItem in (IEnumerable)source!) + var sourceList = source!.As(); + var result = definitionGenericType.IsGenericType + ? Activator.CreateInstance(definitionGenericType.MakeGenericType(destinationArgumentType))!.As() + : Array.CreateInstance(destinationArgumentType, sourceList.Count); + + for (var i = 0; i < sourceList.Count; i++) { - result.Add(destination == null - ? method.Invoke(specificMapper, new [] { sourceItem })! - : method.Invoke(specificMapper, new [] { sourceItem, Activator.CreateInstance(destinationGenericTypeDefinition)! })!); + var invokeResult = destination == null + ? method.Invoke(specificMapper, new [] { sourceList[i] })! + : method.Invoke(specificMapper, new [] { sourceList[i], Activator.CreateInstance(destinationArgumentType)! })!; + + if (definitionGenericType.IsGenericType) + { + result.Add(invokeResult); + } + else + { + result[i] = invokeResult; + } } return (TDestination)result!; } + protected virtual bool IsCollectionGenericType(out Type sourceArgumentType, out Type destinationArgumentType, out Type definitionGenericType) + { + sourceArgumentType = default!; + destinationArgumentType = default!; + definitionGenericType = default!; + + if ((!typeof(TSource).IsGenericType && !typeof(TSource).IsArray) || + (!typeof(TDestination).IsGenericType && !typeof(TDestination).IsArray)) + { + return false; + } + + var supportedCollectionTypes = new[] + { + typeof(IEnumerable<>), + typeof(ICollection<>), + typeof(Collection<>), + typeof(IList<>), + typeof(List<>) + }; + + if (typeof(TSource).IsGenericType && supportedCollectionTypes.Any(x => x == typeof(TSource).GetGenericTypeDefinition())) + { + sourceArgumentType = typeof(TSource).GenericTypeArguments[0]; + } + + if (typeof(TSource).IsArray) + { + sourceArgumentType = typeof(TSource).GetElementType()!; + } + + if (sourceArgumentType == default!) + { + return false; + } + + definitionGenericType = typeof(List<>); + if (typeof(TDestination).IsGenericType && supportedCollectionTypes.Any(x => x == typeof(TDestination).GetGenericTypeDefinition())) + { + destinationArgumentType = typeof(TDestination).GenericTypeArguments[0]; + + if (typeof(TDestination).GetGenericTypeDefinition() == typeof(ICollection<>) || + typeof(TDestination).GetGenericTypeDefinition() == typeof(Collection<>)) + { + definitionGenericType = typeof(Collection<>); + } + } + + if (typeof(TDestination).IsArray) + { + destinationArgumentType = typeof(TDestination).GetElementType()!; + definitionGenericType = typeof(Array); + } + + return destinationArgumentType != default!; + } + protected virtual TDestination AutoMap(object source) { return AutoObjectMappingProvider.Map(source); diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs index af94bac5b8..9eb537cec5 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Shouldly; @@ -29,20 +30,47 @@ public class AbpAutoMapperModule_Specific_ObjectMapper_Tests : AbpIntegratedTest [Fact] public void Specific_Object_Mapper_Should_Be_Used_For_Collections_If_Registered() { - var dtos = _objectMapper.Map, ICollection>(new List() + _objectMapper.Map, IEnumerable>(new List() { new MyEntity { Number = 42 } - }); - dtos.First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. - dtos = _objectMapper.Map, ICollection>(new List() + _objectMapper.Map, ICollection>(new List() + { + new MyEntity { Number = 42 } + }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + + _objectMapper.Map, Collection>(new Collection() + { + new MyEntity { Number = 42 } + }, new Collection() //When mapping to an existing collection, the destination collection is cleared first + { + new MyEntityDto2 { Number = 44 } + }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + + _objectMapper.Map, IList>(new List() + { + new MyEntity { Number = 42 } + }, new Collection() //When mapping to an existing collection, the destination collection is cleared first + { + new MyEntityDto2 { Number = 44 } + }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + + _objectMapper.Map, List>(new List() { new MyEntity { Number = 42 } }, new List() //When mapping to an existing collection, the destination collection is cleared first { new MyEntityDto2 { Number = 44 } - }); - dtos.First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + + _objectMapper.Map(new MyEntity[] + { + new MyEntity { Number = 42 } + }, new MyEntityDto2[] //When mapping to an existing collection, the destination collection is cleared first + { + new MyEntityDto2 { Number = 44 } + }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. } [Fact] From 7614573a181d211374eed4216d602b77645112fe Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 16 Aug 2023 14:21:10 +0800 Subject: [PATCH 09/92] Add `Collection Mapping` document. --- docs/en/Object-To-Object-Mapping.md | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/docs/en/Object-To-Object-Mapping.md b/docs/en/Object-To-Object-Mapping.md index c12b260921..f184468bbc 100644 --- a/docs/en/Object-To-Object-Mapping.md +++ b/docs/en/Object-To-Object-Mapping.md @@ -326,3 +326,51 @@ A single class may implement more than one `IObjectMapper > This approach is powerful since `MyCustomUserMapper` can inject any other service and use in the `Map` methods. +#### Collection Mapping + +You only requires configuration of element types, not of any array or list type that might be used. + +For example, we might have a simple source and destination type: + +````csharp +public class Source +{ + public int Value { get; set; } +} + +public class Destination +{ + public int Value { get; set; } +} +```` + +All the basic generic collection types are supported: + +````csharp +IObjectMapper _objectMapper //inject it. + +var sources = new[] +{ + new Source { Value = 5 }, + new Source { Value = 6 }, + new Source { Value = 7 } +}; + +IEnumerable ienumerableDest = _objectMapper.Map>(sources); +ICollection icollectionDest = _objectMapper.Map>(sources); +ICollection collectionDest = _objectMapper.Map>(sources); +IList ilistDest = _objectMapper.Map>(sources); +List listDest = _objectMapper.Map>(sources); +Destination[] arrayDest = _objectMapper.Map(sources); +```` + +To be specific, the source collection types supported include: + +* `IEnumerable` +* `ICollection` +* `Collection` +* `IList` +* `List` +* `T[]` + +> When mapping to an existing collection, the destination collection is cleared first. From 7211245c8521090861a289f19b09db3e4a48f9f0 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 16 Aug 2023 14:28:36 +0800 Subject: [PATCH 10/92] Update Object-To-Object-Mapping.md --- docs/en/Object-To-Object-Mapping.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Object-To-Object-Mapping.md b/docs/en/Object-To-Object-Mapping.md index f184468bbc..f3eab7de67 100644 --- a/docs/en/Object-To-Object-Mapping.md +++ b/docs/en/Object-To-Object-Mapping.md @@ -335,12 +335,12 @@ For example, we might have a simple source and destination type: ````csharp public class Source { - public int Value { get; set; } + public int Value { get; set; } } public class Destination { - public int Value { get; set; } + public int Value { get; set; } } ```` From 958c4cedb5a739ee0e9f5d0ad9ff95bbdc491557 Mon Sep 17 00:00:00 2001 From: Hamza Albreem <94292623+braim23@users.noreply.github.com> Date: Wed, 16 Aug 2023 09:54:06 +0300 Subject: [PATCH 11/92] 7.4 preview release doc fix --- .../2023-08-15 v7_4_Preview/POST.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md index 5520d6fb4b..70ad765780 100644 --- a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md +++ b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md @@ -51,7 +51,7 @@ In this section, I will introduce some major features released in this version. ### Dynamic Setting Store -Prior to this version, it was hard to define settings in different microservices and centrally manage all setting definitions in a single admin application. To make that possible, we were adding project references for all the microservices' service contract packages from a single microservice, so it can know all the setting definitions and manage them. +Prior to this version, it was hard to define settings in different microservices and centrally manage all setting definitions in a single admin application. To make that possible, we used to add project references for all the microservices' service contract packages from a single microservice, so it can know all the setting definitions and manage them. In this version, ABP Framework introduces the Dynamic Setting Store, which is an important feature that allows you to collect and get all setting definitions from a single point and overcome the setting management problems on microservices. @@ -59,7 +59,7 @@ In this version, ABP Framework introduces the Dynamic Setting Store, which is an ### Introducing the `AdditionalAssemblyAttribute` -In this version, we have introduced the `AdditionalAssemblyAttribute` to define additional assemblies to be part of a module. ABP Framework automatically registers all the services of your module to the [Dependency Injection System](https://docs.abp.io/en/abp/latest/Dependency-Injection). It finds the service types by scanning types in the assembly that defines your module class. Typically, every assembly contains a separate module class definition and modules depend on each other using the `DependsOn` attribute. +In this version, we have introduced the `AdditionalAssemblyAttribute` to define additional assemblies to be part of a module. ABP Framework automatically registers all the services of your module to the [Dependency Injection System](https://docs.abp.io/en/abp/latest/Dependency-Injection). It finds the service types by scanning types in the assembly that define your module class. Typically, every assembly contains a separate module class definition and modules depend on each other using the `DependsOn` attribute. In some rare cases, your module may consist of multiple assemblies and only one of them defines a module class, and you want to make the other assemblies parts of your module. This is especially useful if you don't want to depend on that module's dependencies. @@ -74,7 +74,7 @@ public class IdentityServiceTestModule : AbpModule } ``` -With the `AdditonalAssembly` attribute definition, ABP loads the assembly containing the `IdentityServiceModule` class as a part of the identity service module. Notice that, in this case, none of the module dependencies of the `IdentityServiceModule` are loaded. Because we are not depending on the `IdentityServiceModule`, instead we are just adding its assembly as a part of the `IdentityServiceTestModule`. +With the `AdditonalAssembly` attribute definition, ABP loads the assembly containing the `IdentityServiceModule` class as a part of the identity service module. Notice that in this case, none of the module dependencies of the `IdentityServiceModule` are loaded. Because we are not depending on the `IdentityServiceModule`, instead we are just adding its assembly as a part of the `IdentityServiceTestModule`. > You can check the [Module Development Basics](https://docs.abp.io/en/abp/7.4/Module-Development-Basics) documentation to learn more. @@ -88,13 +88,13 @@ ABP Framework generates a `correlationId` for the first time when an operation i ### Database Migration System for EF Core -In this version, ABP Framework provides base classes and events to migrate the database schema and seed the database on application startup. This system works compatible with multi-tenancy and whenever a new tenant is created or a tenant's database connection string has been updated, it checks and applies database migrations for the new tenant state. +In this version, ABP Framework provides base classes and events to migrate the database schema and seed the database on application startup. This system works compatibly with multi-tenancy and whenever a new tenant is created or a tenant's database connection string has been updated, it checks and applies database migrations for the new tenant state. This system is especially useful to migrate databases for microservices. In this way, when you deploy a new version of a microservice, you don't need to manually migrate its database. You need to take the following actions to use the database migration system: -* Create a class that derives from `EfCoreRuntimeDatabaseMigratorBase` class, override and implement its `SeedAsync` method. Lastly, execute the `CheckAndApplyDatabaseMigrationsAsync` method of your class in the `OnPostApplicationInitializationAsync` method of your module class. +* Create a class that derives from `EfCoreRuntimeDatabaseMigratorBase` class, override and implement its `SeedAsync` method. And lastly, execute the `CheckAndApplyDatabaseMigrationsAsync` method of your class in the `OnPostApplicationInitializationAsync` method of your module class. * Create a class that derives from `DatabaseMigrationEventHandlerBase` class, override and implement its `SeedAsync` method. Then, whenever a new tenant is created or a tenant's connection string is changed then the `SeedAsync` method will be executed. ### Other News @@ -113,11 +113,11 @@ Prior to this version, it was hard to create text templates in different microse For this reason, in this version, the Dynamic Text Template Store has been introduced to make the [Text Template Management module](https://docs.abp.io/en/commercial/latest/modules/text-template-management) compatible with microservices and distributed systems. It allows you to store and get all text templates from a single point. Thanks to that, you can centrally manage the text templates in your admin application. -> *Note*: If you are upgrading from an earlier version and using the Text Template Management module, you need to create a new migration and apply it to your database. +> *Note*: If you are upgrading from an earlier version and are using the Text Template Management module, you need to create a new migration and apply it to your database. We will update the [Text Template Management module](https://docs.abp.io/en/commercial/latest/modules/text-template-management) in the next few days to state the configurations, while it mostly works automatically. -To enable the dynamic template store, you just need to configure the `TextTemplateManagementOptions` and set the `IsDynamicTemplateStoreEnabled` as true in you module class: +To enable the dynamic template store, you just need to configure the `TextTemplateManagementOptions` and set the `IsDynamicTemplateStoreEnabled` as true in your module class: ```csharp Configure(options => @@ -132,9 +132,9 @@ In this version, we have implemented the custom code support in Suite. This allo ![](suite-custom-code.png) -To enable custom code support, you should check the *Customizable code* in the crud page generation page. When you enable the custom code support, you will be seeing some hook-points in your application. +To enable custom code support, you should check the *Customizable code* option in the crud page generation page. When you enable the custom code support, you will be seeing some hook-points in your application. -For example, on the C# side, you'll be seeing some abstract classes and classes that derive from them (for entities, application services, interfaces, domain services, and so on...). You can write your custom code in those classes (`*.Extended.cs`) and the next time when you need to re-generate the entity, your custom code will not be overridden (only the base abstract classes will be re-generated and your changes on the Suite will be respected): +For example, on the C# side, you'll be seeing some abstract classes and classes that derive from them (for entities, application services, interfaces, domain services, and so on...). You can write your custom code in those classes (`*.Extended.cs`) and the next time when you need to re-generate the entity, your custom code will not be overridden (only the base abstract classes will be re-generated and your changes on Suite will be respected): Folder structure | Book.Extended.cs :-------------------------:|:-------------------------: @@ -142,7 +142,7 @@ Folder structure | Book.Extended.cs > *Note*: If you want to override the entity and add custom code, please do not touch the code between `...` placeholders, because the constructor of the entity should be always re-generated in case of a new property added. -On the UI side, you can see *comment placeholders* on the pages for MVC & Blazor applications. These are hook-points provided by the ABP Suite and you can write your custom code between these comment sections: +On the UI side, you can see the *comment placeholders* on the pages for MVC & Blazor applications. These are hook-points provided by ABP Suite and you can write your custom code between these comment sections: Folder structure | Books/Index.cshtml :-------------------------:|:-------------------------: @@ -200,11 +200,11 @@ You can enable or disable the message/conversation deletion globally on your app ![](settings.png) -> **Note**: The Angular UI hasn't been completed yet. We aim to complete it asap and include it in the next release. +> **Note**: The Angular UI hasn't been completed yet. We aim to complete it as soon as possible and include it in the next release. ## Community News -### Volosoft Will Attend to DevNot Developer Summit 2023 +### Volosoft Will Attend DevNot Developer Summit 2023 ![](developersummit.jpg) @@ -227,4 +227,4 @@ Thanks to the ABP Community for all the content they have published. You can als This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/7.4/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v7.4 RC and provide feedback to help us release a more stable version. -Thanks for being a part of this community! \ No newline at end of file +Thanks for being a part of this community! From a00d1dfe5d7166bb42dd872091ea0149ce28e0b5 Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 16 Aug 2023 14:52:00 +0300 Subject: [PATCH 12/92] Update campaign localizations --- .../AbpIoLocalization/Base/Localization/Resources/ar.json | 2 +- .../AbpIoLocalization/Base/Localization/Resources/en.json | 7 ++++--- .../AbpIoLocalization/Base/Localization/Resources/fi.json | 2 +- .../AbpIoLocalization/Base/Localization/Resources/hu.json | 2 +- .../Base/Localization/Resources/zh-Hans.json | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json index 4a7e64125f..d3537d3742 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json @@ -167,7 +167,7 @@ "ABPDiscordServer": "ABP سيرفر الدسكورد", "ABPCommunityTalks": "برامج منتدى ABP الحوارية", "ABPCommunityPosts": "منشورات منتدى ABP", - "BuyAndGetMonths": "شراء 12 شهر، احصل على 14 شهرا!", + "BuyAndGetMonths": "شراء 12 شهر، احصل على 14 شهرا!", "GetYourDeal": "احصل على صفقتك", "BuyOrRenewLicense": "اشترِ أو جدد الرخصة الآن واحصل على شهرين إضافيين!", "BuyOrRenewLicenseToGetExtra2Months": "اشترِ أو جدد الرخصة الآن واحصل على شهرين إضافيين! اسرع! ⏰ آخر يوم: {0}", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 9ef432a8bd..63f78103d9 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -171,7 +171,7 @@ "ABPDiscordServer": "ABP Discord Server", "ABPCommunityTalks": "ABP Community Talks", "ABPCommunityPosts": "ABP Community Posts", - "BuyAndGetMonths": "BUY 12 MONTHS, GET 14 MONTHS!", + "BuyAndGetMonths": "BUY 12 MONTHS, GET 14 MONTHS!", "GetYourDeal": "Get Your Deal", "BuyOrRenewLicense": "Buy or Renew License Now and Get 2 Extra Months!", "BuyOrRenewLicenseToGetExtra2Months": "Buy or Renew License Now and Get 2 Extra Months! HURRY UP! ⏰ Last Day: {0}", @@ -187,7 +187,7 @@ "GiveAwayForNewPurchases": "Application Development Classroom Training will be given away for the new purchases!", "BlackFriday": "BLACK FRIDAY", "ValidForExistingCustomers": "Also valid for the
existing customers!", - "CampaignBetweenDates": "From {0}
to {1}", + "CampaignBetweenDates": "From {0}
To {1}", "SaveUpTo": "SAVE UP TO${0}K", "ImplementingDDD": "Implementing Domain Driven Design", "ExploreTheEBook": "Explore the E-Book", @@ -220,6 +220,7 @@ "NoContent": "No content", "More": "More", "WhyABPIOPlatform": "Why ABP.IO Platform?", - "AbpStudio": "ABP Studio" + "AbpStudio": "ABP Studio", + "ExtraMonths": "{0}EXTRA MONTHS" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json index 16437480ef..80f351043f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json @@ -170,7 +170,7 @@ "ABPDiscordServer": "ABP Discord-palvelin", "ABPCommunityTalks": "ABP Community Talks", "ABPCommunityPosts": "ABP-yhteisön viestit", - "BuyAndGetMonths": "OSTA 12 KUUKAUTA, SAAT 14 KUUKAUTA!", + "BuyAndGetMonths": "OSTA 12 KUUKAUTA, SAAT 14 KUUKAUTA!", "GetYourDeal": "Hanki tarjouksesi", "BuyOrRenewLicense": "Osta tai uusi lisenssi nyt ja saat 2 lisäkuukautta!", "BuyOrRenewLicenseToGetExtra2Months": "Osta tai uusi lisenssi nyt ja saat 2 lisäkuukautta! KIIREHDI! ⏰ Viimeinen päivä: {0}", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json index b9ccddecf4..d785f418aa 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json @@ -168,7 +168,7 @@ "ABPDiscordServer": "ABP Discord szerver", "ABPCommunityTalks": "ABP közösségi beszélgetések", "ABPCommunityPosts": "ABP közösségi bejegyzések", - "BuyAndGetMonths": "VÁSÁROLJON 12 HÓNAPOT, 14 HÓNAPOT KAP!", + "BuyAndGetMonths": "VÁSÁROLJON 12 HÓNAPOT, 14 HÓNAPOT KAP!", "GetYourDeal": "Szerezze meg az ajánlatát", "BuyOrRenewLicense": "Vásároljon vagy újítson meg licencet most, és 2 további hónapot kap!", "BuyOrRenewLicenseToGetExtra2Months": "Vásároljon vagy újítson meg licencet most, és 2 további hónapot kap! SIESS! ⏰ Utolsó nap: {0}", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json index d1a0db7176..545a909abf 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json @@ -170,7 +170,7 @@ "ABPDiscordServer": "ABP Discord 服务器", "ABPCommunityTalks": "ABP社区讲话", "ABPCommunityPosts": "ABP社区文章", - "BuyAndGetMonths": "购买 12 个月,获得 14 个月!", + "BuyAndGetMonths": "购买 12 个月,获得 14 个月!", "GetYourDeal": "得到你的交易", "BuyOrRenewLicense": "立即购买或续订许可证并额外获得 2 个月!", "BuyOrRenewLicenseToGetExtra2Months": "立即购买或续订 ABP 商业许可证(适用于所有版本)并额外获得 2 个月!", From e70a0ac86a10bfd0dc8bf5df3f0cb6422cfea0e5 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 16 Aug 2023 20:29:15 +0800 Subject: [PATCH 13/92] Clear destination collection. --- .../Abp/ObjectMapping/DefaultObjectMapper.cs | 16 +++- ...apperModule_Specific_ObjectMapper_Tests.cs | 79 ++++++++++++++++--- 2 files changed, 83 insertions(+), 12 deletions(-) diff --git a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs index 21a001266a..4286672a7e 100644 --- a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs +++ b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs @@ -149,6 +149,12 @@ public class DefaultObjectMapper : IObjectMapper, ITransientDependency ? Activator.CreateInstance(definitionGenericType.MakeGenericType(destinationArgumentType))!.As() : Array.CreateInstance(destinationArgumentType, sourceList.Count); + if (destination != null && !destination.GetType().IsArray) + { + //Clear destination collection if destination not an array, We won't change array just same behavior as AutoMapper. + destination.As().Clear(); + } + for (var i = 0; i < sourceList.Count; i++) { var invokeResult = destination == null @@ -158,6 +164,7 @@ public class DefaultObjectMapper : IObjectMapper, ITransientDependency if (definitionGenericType.IsGenericType) { result.Add(invokeResult); + destination?.As().Add(invokeResult); } else { @@ -165,7 +172,14 @@ public class DefaultObjectMapper : IObjectMapper, ITransientDependency } } - return (TDestination)result!; + if (destination != null && destination.GetType().IsArray) + { + //Return the new collection if destination is an array, We won't change array just same behavior as AutoMapper. + return (TDestination)result; + } + + //Return the destination if destination exists. The parameter reference equals with return object. + return destination ?? (TDestination)result; } protected virtual bool IsCollectionGenericType(out Type sourceArgumentType, out Type destinationArgumentType, out Type definitionGenericType) diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs index 9eb537cec5..46f028596d 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Specific_ObjectMapper_Tests.cs @@ -30,47 +30,104 @@ public class AbpAutoMapperModule_Specific_ObjectMapper_Tests : AbpIntegratedTest [Fact] public void Specific_Object_Mapper_Should_Be_Used_For_Collections_If_Registered() { + // IEnumerable _objectMapper.Map, IEnumerable>(new List() { new MyEntity { Number = 42 } }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + var destination = new List() + { + new MyEntityDto2 { Number = 44 } + }; + var returnIEnumerable = _objectMapper.Map, IEnumerable>( + new List() + { + new MyEntity { Number = 42 } + }, destination); + returnIEnumerable.First().Number.ShouldBe(43); + ReferenceEquals(destination, returnIEnumerable).ShouldBeTrue(); + + // ICollection _objectMapper.Map, ICollection>(new List() { new MyEntity { Number = 42 } }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + var returnICollection = _objectMapper.Map, ICollection>( + new List() + { + new MyEntity { Number = 42 } + }, destination); + returnICollection.First().Number.ShouldBe(43); + ReferenceEquals(destination, returnICollection).ShouldBeTrue(); + + // Collection _objectMapper.Map, Collection>(new Collection() { new MyEntity { Number = 42 } - }, new Collection() //When mapping to an existing collection, the destination collection is cleared first + }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + + var destination2 = new Collection() { new MyEntityDto2 { Number = 44 } - }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + }; + var returnCollection = _objectMapper.Map, Collection>( + new Collection() + { + new MyEntity { Number = 42 } + }, destination2); + returnCollection.First().Number.ShouldBe(43); + ReferenceEquals(destination2, returnCollection).ShouldBeTrue(); + // IList _objectMapper.Map, IList>(new List() { new MyEntity { Number = 42 } - }, new Collection() //When mapping to an existing collection, the destination collection is cleared first - { - new MyEntityDto2 { Number = 44 } }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + var returnIList = _objectMapper.Map, IList>( + new List() + { + new MyEntity { Number = 42 } + }, destination); + returnIList.First().Number.ShouldBe(43); + ReferenceEquals(destination, returnIList).ShouldBeTrue(); + + // List _objectMapper.Map, List>(new List() { new MyEntity { Number = 42 } - }, new List() //When mapping to an existing collection, the destination collection is cleared first - { - new MyEntityDto2 { Number = 44 } }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + var returnList = _objectMapper.Map, List>( + new List() + { + new MyEntity { Number = 42 } + }, destination); + returnList.First().Number.ShouldBe(43); + ReferenceEquals(destination, returnList).ShouldBeTrue(); + + // Array _objectMapper.Map(new MyEntity[] { new MyEntity { Number = 42 } - }, new MyEntityDto2[] //When mapping to an existing collection, the destination collection is cleared first - { - new MyEntityDto2 { Number = 44 } }).First().Number.ShouldBe(43); //MyEntityToMyEntityDto2Mapper adds 1 to number of the source. + + var destinationArray = new MyEntityDto2[] + { + new MyEntityDto2 { Number = 40 } + }; + var returnArray = _objectMapper.Map(new MyEntity[] + { + new MyEntity { Number = 42 } + }, destinationArray); + + returnArray.First().Number.ShouldBe(43); + + // array should not be changed. Same as AutoMapper. + destinationArray.First().Number.ShouldBe(40); + ReferenceEquals(returnArray, destinationArray).ShouldBeFalse(); } [Fact] From 0f2e9a1ea8c5a52825567f8f58dfabb8641fd585 Mon Sep 17 00:00:00 2001 From: selman koc <64414348+skoc10@users.noreply.github.com> Date: Wed, 16 Aug 2023 16:10:03 +0300 Subject: [PATCH 14/92] Update version for nightly build --- common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.props b/common.props index 90cd1a1b4a..e956b17835 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 7.4.0 + 8.0.0 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ From 21735f8843caa9768d23216e84deeecaa3ace9dc Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Thu, 17 Aug 2023 10:11:17 +0300 Subject: [PATCH 15/92] Update POST.md --- docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md index 70ad765780..cb67e643b5 100644 --- a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md +++ b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md @@ -35,7 +35,7 @@ You can use any IDE that supports .NET 7.x, like [Visual Studio 2022](https://vi ## Migration Guides There are a few breaking changes in this version that may affect your application. -Please see the following migration documents, if you are upgrading from v7.3: +Please see the following migration documents, if you are upgrading from v7.3 or earlier: * [ABP Framework 7.3 to 7.4 Migration Guide](https://docs.abp.io/en/abp/7.4/Migration-Guides/Abp-7_4) @@ -61,7 +61,7 @@ In this version, ABP Framework introduces the Dynamic Setting Store, which is an In this version, we have introduced the `AdditionalAssemblyAttribute` to define additional assemblies to be part of a module. ABP Framework automatically registers all the services of your module to the [Dependency Injection System](https://docs.abp.io/en/abp/latest/Dependency-Injection). It finds the service types by scanning types in the assembly that define your module class. Typically, every assembly contains a separate module class definition and modules depend on each other using the `DependsOn` attribute. -In some rare cases, your module may consist of multiple assemblies and only one of them defines a module class, and you want to make the other assemblies parts of your module. This is especially useful if you don't want to depend on that module's dependencies. +In some rare cases, your module may consist of multiple assemblies and only one of them defines a module class, and you want to make the other assemblies parts of your module. This is especially useful if you can't define a module class in the target assembly or you don't want to depend on that module's dependencies. In that case, you can use the `AdditionalAssembly` attribute as shown below: @@ -74,7 +74,7 @@ public class IdentityServiceTestModule : AbpModule } ``` -With the `AdditonalAssembly` attribute definition, ABP loads the assembly containing the `IdentityServiceModule` class as a part of the identity service module. Notice that in this case, none of the module dependencies of the `IdentityServiceModule` are loaded. Because we are not depending on the `IdentityServiceModule`, instead we are just adding its assembly as a part of the `IdentityServiceTestModule`. +With the `AdditionalAssembly` attribute definition, ABP loads the assembly containing the `IdentityServiceModule` class as a part of the identity service module. Notice that in this case, none of the module dependencies of the `IdentityServiceModule` are loaded. Because we are not depending on the `IdentityServiceModule`, instead we are just adding its assembly as a part of the `IdentityServiceTestModule`. > You can check the [Module Development Basics](https://docs.abp.io/en/abp/7.4/Module-Development-Basics) documentation to learn more. @@ -115,8 +115,6 @@ For this reason, in this version, the Dynamic Text Template Store has been intro > *Note*: If you are upgrading from an earlier version and are using the Text Template Management module, you need to create a new migration and apply it to your database. -We will update the [Text Template Management module](https://docs.abp.io/en/commercial/latest/modules/text-template-management) in the next few days to state the configurations, while it mostly works automatically. - To enable the dynamic template store, you just need to configure the `TextTemplateManagementOptions` and set the `IsDynamicTemplateStoreEnabled` as true in your module class: ```csharp @@ -126,6 +124,8 @@ Configure(options => }); ``` +Notice this is only needed in the microservice where you centrally manage your text template contents. So, typically you would use the configuration above in your administration microservice. Other microservices automatically save their text template contents to the central database. + ### Suite: Custom Code Support In this version, we have implemented the custom code support in Suite. This allows you to customize the generated code-blocks and preserve your custom code changes in the next CRUD Page Generation in Suite. ABP Suite specifies hook-points to allow adding custom code blocks. Then, the code that you wrote to these hook points will be respected and will not be overridden in the next entity generation. @@ -204,7 +204,7 @@ You can enable or disable the message/conversation deletion globally on your app ## Community News -### Volosoft Will Attend DevNot Developer Summit 2023 +### DevNot Developer Summit 2023 ![](developersummit.jpg) From 6fb756391d513fe7f47142f04caba7772d22cf20 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Thu, 17 Aug 2023 11:09:20 +0300 Subject: [PATCH 16/92] Mention new leptonx features in the v7.4 release post --- .../2023-08-15 v7_4_Preview/POST.md | 57 ++++++++++++++++++ .../2023-08-15 v7_4_Preview/error-page.png | Bin 0 -> 53807 bytes .../2023-08-15 v7_4_Preview/fluid-layout.png | Bin 0 -> 317072 bytes .../mobile-toolbars.png | Bin 0 -> 28690 bytes .../password-complexity.png | Bin 0 -> 10271 bytes 5 files changed, 57 insertions(+) create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/error-page.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/fluid-layout.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/mobile-toolbars.png create mode 100644 docs/en/Blog-Posts/2023-08-15 v7_4_Preview/password-complexity.png diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md index cb67e643b5..c7d8411886 100644 --- a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md +++ b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/POST.md @@ -164,6 +164,53 @@ Also, we have aligned the features on both of these mobile options (MAUI & React > If you have missed the event, you can watch from 👉 [here](https://www.youtube.com/watch?v=-wrdngeKgZw). +### New LeptonX Theme Features + +In the new version of LeptonX Theme, which is v2.4.0-rc.1, there are some new features that we want to mention. + +#### Mobile Toolbars + +The [Toolbar System](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Toolbars) is used to define *toolbars* on the user interface. Modules (or your application) can add items to a toolbar, then the UI themes can render the toolbar on the layout. + +LeptonX Theme extends this system even further and introduces mobile toolbars with this version. You can create a component and add it as a mobile toolbar as below: + +```csharp +public class MyToolbarContributor : IToolbarContributor +{ + public Task ConfigureToolbarAsync(IToolbarConfigurationContext context) + { + if (context.Toolbar.Name == LeptonXToolbars.MainMobile) + { + context.Toolbar.Items.Add(new ToolbarItem(typeof(ShoppingCardToolbarComponent))); + + //other mobile toolbars... + } + + return Task.CompletedTask; + } +} +``` + +Then, the LeptonX Theme will render these mobile toolbars like in the figure below: + +![](mobile-toolbars.png) + +> **Note**: The Angular UI hasn't been completed yet. We aim to complete it as soon as possible and include it in the next release. + +#### New Error Page Designs + +In this version, we have implemented new error pages. Encounter a fresh look during error situations with the 'New Error Page Designs,' providing informative and visually appealing error displays that enhance user experience: + +![](error-page.png) + +#### Fluid Layout + +In this version, LeptonX Theme introduces the fresh-looking **Fluid Layout**, which is a layout that lets you align elements so that they automatically adjust their alignment and proportions for different page sizes and orientations. + +![](fluid-layout.png) + +> You can visit [the live demo of LeptonX Theme](https://x.leptontheme.com/side-menu) and try the Fluid Layout now! + ### Check & Move Related Entities on Deletion/Demand In application modules, there are some entities that have complete relationships with each other such as role-user relations. In such cases, it's a typical requirement to check & move related entities that have a relation with the other entity that is about to be deleted. @@ -202,6 +249,16 @@ You can enable or disable the message/conversation deletion globally on your app > **Note**: The Angular UI hasn't been completed yet. We aim to complete it as soon as possible and include it in the next release. +### Password Complexity Indicators + +In this version, ABP Framework introduces an innovative ["Password Complexity Indicator"](https://docs.abp.io/en/commercial/7.4/ui/angular/password-complexity-indicator-component) feature, designed to enhance security and user experience. This feature dynamically evaluates and rates the strength of user-generated passwords, providing real-time feedback to users as they create or update their passwords. By visually indicating the complexity level, users are guided toward crafting stronger passwords that meet modern security standards. + +![](password-complexity.png) + +You can check the [Password Complexity Indicator Angular documentation](https://docs.abp.io/en/commercial/7.4/ui/angular/password-complexity-indicator-component) to learn more. + +> **Note**: Currently, this feature is only available for the Angular UI, but we will be implemented for other UIs in the next version. + ## Community News ### DevNot Developer Summit 2023 diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/error-page.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/error-page.png new file mode 100644 index 0000000000000000000000000000000000000000..8ece260ec3c2c0d3fa28cb92ec47678ce48e1ae0 GIT binary patch literal 53807 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%0DF>zLoHGsW8JKa=x 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%0A?| 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 literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/fluid-layout.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/fluid-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..6150f3e2bd9730838ef83e23aba79064d810179b GIT binary patch literal 317072 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ٴ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

|wW^SNAD`jMm}$NMTF!vg4$qsf-oCL99F+ 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%0D6kIgT4#`%pVSIbr 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 z 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 literal 0 HcmV?d00001 From 710de856c394eeff73cf69f5402295ba221f4fb4 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 17 Aug 2023 16:27:33 +0800 Subject: [PATCH 17/92] Static C# API client proxy compatible ReplaceEmbeddedByPhysical --- .../ClientProxyApiDescriptionFinder.cs | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs index 9c54fe840e..f7b9b838b5 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs @@ -1,8 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.FileProviders.Physical; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Modeling; using Volo.Abp.Json; @@ -92,15 +94,35 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder, { if (directoryContent.IsDirectory) { - GetGenerateProxyFileInfos(fileInfoList, directoryContent.PhysicalPath); + GetGenerateProxyFileInfos(fileInfoList, GetDirectoryContentPath(path, directoryContent)); } else { if (directoryContent.Name.EndsWith("generate-proxy.json")) { - fileInfoList.Add(VirtualFileProvider.GetFileInfo(directoryContent.GetVirtualOrPhysicalPathOrNull())); + fileInfoList.Add(VirtualFileProvider.GetFileInfo(GetProxyFileInfoPath(path, directoryContent))); } } } } + + private string GetDirectoryContentPath(string rootPath, IFileInfo fileInfo) + { + if (fileInfo is PhysicalDirectoryInfo physicalDirectoryInfo) + { + return rootPath + physicalDirectoryInfo.Name.EnsureStartsWith('/'); + } + + return fileInfo.PhysicalPath; + } + + private string GetProxyFileInfoPath(string rootPath, IFileInfo fileInfo) + { + if (fileInfo is PhysicalFileInfo physicalFileInfo) + { + return rootPath + physicalFileInfo.Name.EnsureStartsWith('/'); + } + + return fileInfo.GetVirtualOrPhysicalPathOrNull(); + } } From 4d8cd89f377a3631f3d9d3df41afff6e0957b59f Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 17 Aug 2023 16:18:47 +0300 Subject: [PATCH 18/92] Fix Images don't appear issue --- .../Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index 737bc2fe36..4898baf215 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -6,6 +6,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; +using Microsoft.AspNetCore.Http.Extensions; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.Extensions.Localization; @@ -108,6 +109,12 @@ namespace Volo.Docs.Pages.Documents.Project public virtual async Task OnGetAsync() { + var displayUrl = Request.GetDisplayUrl(); + var decodedUrl = HttpUtility.UrlDecode(displayUrl); + if (decodedUrl != displayUrl) + { + return Redirect(decodedUrl); + } try { return await SetPageAsync(); From 0eb6fa3bb4e93a7cf416ccc8dc6af601ae4bbd37 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Fri, 18 Aug 2023 09:39:07 +0300 Subject: [PATCH 19/92] Update 02_feature_request.yml --- .github/ISSUE_TEMPLATE/02_feature_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml index 21189e3a30..029830c7c5 100644 --- a/.github/ISSUE_TEMPLATE/02_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -1,6 +1,6 @@ name: 💡 Feature request description: Suggest an idea for this project -labels: [feature] +labels: [feature-request] body: - type: checkboxes attributes: From b8ce549f93b04163437ec2191073ddb0c8b3a4b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 18 Aug 2023 10:12:52 +0300 Subject: [PATCH 20/92] Update Object-To-Object-Mapping.md --- docs/en/Object-To-Object-Mapping.md | 53 +++++------------------------ 1 file changed, 9 insertions(+), 44 deletions(-) diff --git a/docs/en/Object-To-Object-Mapping.md b/docs/en/Object-To-Object-Mapping.md index f3eab7de67..40efdd7ee6 100644 --- a/docs/en/Object-To-Object-Mapping.md +++ b/docs/en/Object-To-Object-Mapping.md @@ -320,57 +320,22 @@ public class MyCustomUserMapper : IObjectMapper, ITransientDepend } ```` -ABP automatically discovers and registers the `MyCustomUserMapper` and it is automatically used whenever you use the `IObjectMapper` to map `User` to `UserDto`. - -A single class may implement more than one `IObjectMapper` each for a different object pairs. +ABP automatically discovers and registers the `MyCustomUserMapper` and it is automatically used whenever you use the `IObjectMapper` to map `User` to `UserDto`. A single class may implement more than one `IObjectMapper` each for a different object pairs. > This approach is powerful since `MyCustomUserMapper` can inject any other service and use in the `Map` methods. -#### Collection Mapping - -You only requires configuration of element types, not of any array or list type that might be used. - -For example, we might have a simple source and destination type: - -````csharp -public class Source -{ - public int Value { get; set; } -} - -public class Destination -{ - public int Value { get; set; } -} -```` - -All the basic generic collection types are supported: - -````csharp -IObjectMapper _objectMapper //inject it. - -var sources = new[] -{ - new Source { Value = 5 }, - new Source { Value = 6 }, - new Source { Value = 7 } -}; - -IEnumerable ienumerableDest = _objectMapper.Map>(sources); -ICollection icollectionDest = _objectMapper.Map>(sources); -ICollection collectionDest = _objectMapper.Map>(sources); -IList ilistDest = _objectMapper.Map>(sources); -List listDest = _objectMapper.Map>(sources); -Destination[] arrayDest = _objectMapper.Map(sources); -```` - -To be specific, the source collection types supported include: +Once you implement `IObjectMapper`, ABP can automatically convert a collection of `User` objects to a collection of `UserDto` objects. The following generic collection types are supported: * `IEnumerable` * `ICollection` * `Collection` * `IList` * `List` -* `T[]` +* `T[]` (array) + +**Example:** -> When mapping to an existing collection, the destination collection is cleared first. +````csharp +var users = await _userRepository.GetListAsync(); // returns List +var dtos = ObjectMapper.Map, List>(users); // creates List +```` From d31827579d91cdb000db98da89157af6a3c54ff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 18 Aug 2023 10:20:15 +0300 Subject: [PATCH 21/92] Refactor styling --- .../Abp/ObjectMapping/DefaultObjectMapper.cs | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs index 4286672a7e..6a2ab27870 100644 --- a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs +++ b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs @@ -137,12 +137,20 @@ public class DefaultObjectMapper : IObjectMapper, ITransientDependency return default; } - var cacheKey = $"{mapperType.FullName}{(destination == null ? "MapMethodWithSingleParameter" : "MapMethodWithDoubleParameters")}"; - var method = MethodInfoCache.GetOrAdd(cacheKey, _ => - { - return specificMapper.GetType().GetMethods().First(x => x.Name == nameof(IObjectMapper.Map) && - x.GetParameters().Length == (destination == null ? 1 : 2)); - }); + var cacheKey = $"{mapperType.FullName}_{(destination == null ? "MapMethodWithSingleParameter" : "MapMethodWithDoubleParameters")}"; + var method = MethodInfoCache.GetOrAdd( + cacheKey, + _ => + { + return specificMapper + .GetType() + .GetMethods() + .First(x => + x.Name == nameof(IObjectMapper.Map) && + x.GetParameters().Length == (destination == null ? 1 : 2) + ); + } + ); var sourceList = source!.As(); var result = definitionGenericType.IsGenericType From b72a5c8d4cae90a9348d85bd457f473d6fd8eaec Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 18 Aug 2023 16:35:27 +0800 Subject: [PATCH 22/92] Add social media register options to Register page --- .../Account/Localization/Resources/ar.json | 4 +- .../Account/Localization/Resources/cs.json | 4 +- .../Account/Localization/Resources/da.json | 4 +- .../Account/Localization/Resources/de.json | 4 +- .../Account/Localization/Resources/el.json | 4 +- .../Account/Localization/Resources/en-GB.json | 4 +- .../Account/Localization/Resources/en.json | 4 +- .../Account/Localization/Resources/es-mx.json | 4 +- .../Account/Localization/Resources/es.json | 4 +- .../Account/Localization/Resources/fa.json | 4 +- .../Account/Localization/Resources/fi.json | 4 +- .../Account/Localization/Resources/fr.json | 4 +- .../Account/Localization/Resources/hi.json | 4 +- .../Account/Localization/Resources/hr.json | 4 +- .../Account/Localization/Resources/hu.json | 4 +- .../Account/Localization/Resources/is.json | 4 +- .../Account/Localization/Resources/it.json | 4 +- .../Account/Localization/Resources/nl.json | 4 +- .../Account/Localization/Resources/pl-PL.json | 4 +- .../Account/Localization/Resources/pt-BR.json | 4 +- .../Account/Localization/Resources/ro-RO.json | 4 +- .../Account/Localization/Resources/ru.json | 4 +- .../Account/Localization/Resources/sk.json | 4 +- .../Account/Localization/Resources/sl.json | 4 +- .../Account/Localization/Resources/tr.json | 4 +- .../Account/Localization/Resources/vi.json | 4 +- .../Localization/Resources/zh-Hans.json | 4 +- .../Localization/Resources/zh-Hant.json | 4 +- .../Pages/Account/Register.cshtml | 14 +++++++ .../Pages/Account/Register.cshtml.cs | 41 ++++++++++++++++++- 30 files changed, 137 insertions(+), 30 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ar.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ar.json index cdabc68af1..4691a2268e 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ar.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ar.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "لقد تلقينا طلب استرداد الحساب! إذا بدأت هذا الطلب ، فانقر فوق الارتباط التالي لإعادة تعيين كلمة المرور الخاصة بك.", "ResetMyPassword": "إعادة تعيين كلمة المرور الخاصة بي", "AccessDenied": "تم الرفض!", - "AccessDeniedMessage": "ليس لديك حق الوصول إلى هذا المورد." + "AccessDeniedMessage": "ليس لديك حق الوصول إلى هذا المورد.", + "OrRegisterWith": "أو التسجيل بـ:", + "RegisterUsingYourProviderAccount": "قم بالتسجيل باستخدام حسابك في {0}" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/cs.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/cs.json index faec2b2a22..aeae890d54 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/cs.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/cs.json @@ -63,6 +63,8 @@ "PasswordResetInfoInEmail": "Obdrželi jsme žádost o obnovení účtu! Pokud jste tento požadavek iniciovali, klikněte na následující odkaz a obnovte své heslo.", "ResetMyPassword": "Obnovit moje heslo", "AccessDenied": "Přístup odepřen!", - "AccessDeniedMessage": "K tomuto zdroji nemáte přístup." + "AccessDeniedMessage": "K tomuto zdroji nemáte přístup.", + "OrRegisterWith": "Nebo se registrujte pomocí:", + "RegisterUsingYourProviderAccount": "Registrovat pomocí vašeho účtu {0}" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/da.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/da.json index 895638aede..24283d06c8 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/da.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/da.json @@ -63,6 +63,8 @@ "PasswordResetInfoInEmail": "Vi har modtaget en forespørgsel for gendannelse af konto! Hvis du har lavet denne forespørgsel, klik på det efterfølgende link for at nulstille dit kodeord.", "ResetMyPassword": "Nulstil mit kodeord", "AccessDenied": "Adgang nægtet!", - "AccessDeniedMessage": "Du har ikke adgang til denne ressource." + "AccessDeniedMessage": "Du har ikke adgang til denne ressource.", + "OrRegisterWith": "Eller registrér med:", + "RegisterUsingYourProviderAccount": "Registrér med din {0} konto" } } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json index fb1f4b7153..64c86e4abe 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "Wir haben eine Anfrage zur Wiederherstellung des Kontos erhalten! Wenn Sie diese Anforderung initiiert haben, klicken Sie auf den folgenden Link, um Ihr Passwort zurückzusetzen.", "ResetMyPassword": "Mein Passwort zurücksetzen", "AccessDenied": "Zugriff abgelehnt!", - "AccessDeniedMessage": "Sie haben keinen Zugriff auf diese Ressource." + "AccessDeniedMessage": "Sie haben keinen Zugriff auf diese Ressource.", + "OrRegisterWith": "Oder registrieren Sie sich mit:", + "RegisterUsingYourProviderAccount": "Registrieren Sie sich mit Ihrem {0} Benutzerkonto" } } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/el.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/el.json index 6a6788300d..a64dca5ef5 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/el.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/el.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "Λάβαμε ένα αίτημα ανάκτησης λογαριασμού! Εάν υποβάλατε αυτό το αίτημα, κάντε κλικ στον παρακάτω σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας.", "ResetMyPassword": "Επαναφορά του κωδικού πρόσβασής μου", "AccessDenied": "Δεν επιτρέπεται η πρόσβαση!", - "AccessDeniedMessage": "Δεν έχετε πρόσβαση σε αυτόν τον πόρο." + "AccessDeniedMessage": "Δεν έχετε πρόσβαση σε αυτόν τον πόρο.", + "OrRegisterWith": "Ή εγγραφείτε με:", + "RegisterUsingYourProviderAccount": "Εγγραφείτε χρησιμοποιώντας τον λογαριασμό σας {0}" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en-GB.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en-GB.json index 4f1486a78e..f4208335b5 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en-GB.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en-GB.json @@ -61,6 +61,8 @@ "Volo.Account:InvalidEmailAddress": "Cannot find the given email address: {0}", "PasswordReset": "Password reset", "PasswordResetInfoInEmail": "We received an account recovery request! If you initiated this request, click the following link to reset your password.", - "ResetMyPassword": "Reset my password" + "ResetMyPassword": "Reset my password", + "OrRegisterWith": "Or register with", + "RegisterUsingYourProviderAccount": "Register using your {0} account" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json index 706f92bbd5..183bb5363e 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json @@ -66,6 +66,8 @@ "PasswordResetInfoInEmail": "We received an account recovery request! If you initiated this request, click the following link to reset your password.", "ResetMyPassword": "Reset my password", "AccessDenied": "Access denied!", - "AccessDeniedMessage": "You do not have access to this resource." + "AccessDeniedMessage": "You do not have access to this resource.", + "OrRegisterWith": "Or register with", + "RegisterUsingYourProviderAccount": "Register using your {0} account" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es-mx.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es-mx.json index b3bcad86f9..6793e58986 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es-mx.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es-mx.json @@ -34,6 +34,8 @@ "NewPasswordConfirmFailed": "Por favor, confirme la nueva contraseña.", "NewPasswordSameAsOld": "La nueva contraseña debe ser diferente de la contraseña actual.", "Manage": "Administrar", - "MyAccount": "Mi cuenta" + "MyAccount": "Mi cuenta", + "OrRegisterWith": "O registrarse con", + "RegisterUsingYourProviderAccount": "Registrarse con su cuenta de {0} " } } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json index 0e883a1372..9fd52c8450 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "Recibimos una solicitud de recuperación de cuenta. Si inició esta solicitud, haga clic en el siguiente enlace para restablecer su contraseña.", "ResetMyPassword": "Restablecer mi contraseña", "AccessDenied": "¡Acceso denegado!", - "AccessDeniedMessage": "No tienes acceso a este recurso." + "AccessDeniedMessage": "No tienes acceso a este recurso.", + "OrRegisterWith": "O registrarse con:", + "RegisterUsingYourProviderAccount": "Registrarse con su cuenta de {0} " } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fa.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fa.json index e7c5ee084e..4fc0685b79 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fa.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fa.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "ما درخواست بازیابی حساب دریافت کردیم! اگر این درخواست را آغاز کرده اید, برای بازنشانی گذرواژه خود روی پیوند زیر کلیک کنید.", "ResetMyPassword": "بازنشانی گذرواژه من", "AccessDenied": "دسترسی ممنوع!", - "AccessDeniedMessage": "شما به این منبع دسترسی ندارید." + "AccessDeniedMessage": "شما به این منبع دسترسی ندارید.", + "OrRegisterWith": "یا ثبت نام کنید با:", + "RegisterUsingYourProviderAccount": "با استفاده از حساب {0} خود ثبت نام کنید" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fi.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fi.json index 027928ead3..2f0ae2c574 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fi.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fi.json @@ -66,6 +66,8 @@ "PasswordResetInfoInEmail": "Saimme tilin palautuspyynnön! Jos aloitit tämän pyynnön, voit nollata salasanasi napsauttamalla seuraavaa linkkiä.", "ResetMyPassword": "Vaihda salasanani", "AccessDenied": "Pääsy evätty!", - "AccessDeniedMessage": "Sinulla ei ole pääsyä tähän resurssiin." + "AccessDeniedMessage": "Sinulla ei ole pääsyä tähän resurssiin.", + "OrRegisterWith": "Tai rekisteröidy:", + "RegisterUsingYourProviderAccount": "Rekisteröidy {0} -tililläsi" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json index b1e547652d..aa640abf1a 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "Nous avons reçu une demande de récupération de compte! Si vous avez lancé cette demande, cliquez sur le lien suivant pour réinitialiser votre mot de passe.", "ResetMyPassword": "Réinitialiser mon mot de passe", "AccessDenied": "Accès refusé!", - "AccessDeniedMessage": "Vous n'avez pas accès à cette ressource." + "AccessDeniedMessage": "Vous n'avez pas accès à cette ressource.", + "OrRegisterWith": "Or register with", + "RegisterUsingYourProviderAccount": "Register using your {0} account" } } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hi.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hi.json index fd93420216..a424deae00 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hi.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hi.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "हमें एक खाता पुनर्प्राप्ति अनुरोध प्राप्त हुआ! यदि आपने यह अनुरोध किया है, तो अपना पासवर्ड रीसेट करने के लिए निम्न लिंक पर क्लिक करें।", "ResetMyPassword": "अपना पासवर्ड रीसेट करें", "AccessDenied": "पहुंच अस्वीकृत!", - "AccessDeniedMessage": "आपके पास इस संसाधन तक पहुँच नहीं है।" + "AccessDeniedMessage": "आपके पास इस संसाधन तक पहुँच नहीं है।", + "OrRegisterWith": "या इसके साथ पंजीकरण करें:", + "RegisterUsingYourProviderAccount": "अपने {0} खाते का उपयोग करके पंजीकरण करें" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hr.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hr.json index 665755a2dd..8ec48e7a09 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hr.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hr.json @@ -66,6 +66,8 @@ "PasswordResetInfoInEmail": "Primili smo zahtjev za oporavak računa! Ako ste vi pokrenuli ovaj zahtjev, kliknite na sljedeću poveznicu za ponovno postavljanje lozinke.", "ResetMyPassword": "Resetirati moju lozinku", "AccessDenied": "Pristup odbijen!", - "AccessDeniedMessage": "Nemate pristup ovom resursu." + "AccessDeniedMessage": "Nemate pristup ovom resursu.", + "OrRegisterWith": "Ili se registrirajte sa:", + "RegisterUsingYourProviderAccount": "Registrirajte se koristeći svoj {0} račun" } } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hu.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hu.json index 3c97fd290d..481fa2733a 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hu.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hu.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "Fiók-helyreállítási kérelmet kaptunk! Ha Ön kezdeményezte ezt a kérést, kattintson a következő hivatkozásra jelszava visszaállításához.", "ResetMyPassword": "Jelszavam visszaállítása", "AccessDenied": "Hozzáférés megtagadva!", - "AccessDeniedMessage": "Nincs hozzáférése ehhez az erőforráshoz." + "AccessDeniedMessage": "Nincs hozzáférése ehhez az erőforráshoz.", + "OrRegisterWith": "Vagy regisztráljon:", + "RegisterUsingYourProviderAccount": "Regisztráljon a(z) {0} fiókjával" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/is.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/is.json index e309962242..f33db6eadb 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/is.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/is.json @@ -63,6 +63,8 @@ "PasswordResetInfoInEmail": "Við fengum beiðni um endurheimt reiknings! Ef þú stofnaðir þessa beiðni skaltu smella á eftirfarandi krækju til að endurstilla lykilorðið þitt.", "ResetMyPassword": "Endurstilla lykilorðið mitt", "AccessDenied": "Aðgangi hafnað!", - "AccessDeniedMessage": "Þú hefur ekki aðgang að þessari auðlind." + "AccessDeniedMessage": "Þú hefur ekki aðgang að þessari auðlind.", + "OrRegisterWith": "Eða skráðu þig með:", + "RegisterUsingYourProviderAccount": "Skráðu þig með {0} aðganginum þínum" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json index 6e4521c8f7..0b5f3dbcf2 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "Abbiamo ricevuto una richiesta di recupero dell'account! Se hai fatto tu questa richiesta fai clic sul seguente collegamento per reimpostare la password.", "ResetMyPassword": "Reimposta la mia password", "AccessDenied": "Accesso negato!", - "AccessDeniedMessage": "Non hai accesso a questa risorsa." + "AccessDeniedMessage": "Non hai accesso a questa risorsa.", + "OrRegisterWith": "Oppure registrati con:", + "RegisterUsingYourProviderAccount": "Registrati utilizzando il tuo account {0}" } } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/nl.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/nl.json index b804e517a9..d5d400277f 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/nl.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/nl.json @@ -63,6 +63,8 @@ "PasswordResetInfoInEmail": "We hebben een verzoek ontvangen om uw wachtwoord opnieuw in te stellen. Als u dit verzoek heeft ingediend, klikt u op de volgende link om een nieuw wachtwoord in te stellen.", "ResetMyPassword": "Reset mijn wachtwoord", "AccessDenied": "Toegang geweigerd!", - "AccessDeniedMessage": "U heeft geen toegang tot deze bron." + "AccessDeniedMessage": "U heeft geen toegang tot deze bron.", + "OrRegisterWith": "Of registreer met:", + "RegisterUsingYourProviderAccount": "Registreer met uw {0} -account" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/pl-PL.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/pl-PL.json index c3596c8aa5..0fdab745de 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/pl-PL.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/pl-PL.json @@ -63,6 +63,8 @@ "PasswordResetInfoInEmail": "Otrzymaliśmy prośbę o odzyskanie konta! Jeśli zainicjowałeś to żądanie, kliknij poniższy link, aby zresetować hasło.", "ResetMyPassword": "Zresetować moje hasło", "AccessDenied": "Brak dostępu!", - "AccessDeniedMessage": "Nie masz dostępu do tego zasobu." + "AccessDeniedMessage": "Nie masz dostępu do tego zasobu.", + "OrRegisterWith": "Lub zarejestruj się za pomocą:", + "RegisterUsingYourProviderAccount": "Zarejestruj się za pomocą konta {0}" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/pt-BR.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/pt-BR.json index 732d804bbe..5b54bc91c5 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/pt-BR.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/pt-BR.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "Recebemos um pedido de recuperação de conta! Se você iniciou esta solicitação, clique no link a seguir para redefinir sua senha.", "ResetMyPassword": "Resetar minha senha", "AccessDenied": "Acesso negado!", - "AccessDeniedMessage": "Você não tem acesso a este recurso." + "AccessDeniedMessage": "Você não tem acesso a este recurso.", + "OrRegisterWith": "Ou registre-se com:", + "RegisterUsingYourProviderAccount": "Registre-se utilizando sua conta {0}" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json index c2a75c3401..732a4103ec 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json @@ -63,6 +63,8 @@ "PasswordResetInfoInEmail": "Am primit o cerere de recuperare a contului! Dacă dumneavoastră aţi iniţiat această cerere, daţi click pe următorul link pentru a vă reseta parola.", "ResetMyPassword": "Resetează-mi parola", "AccessDenied": "Acces interzis!", - "AccessDeniedMessage": "Nu aveţi acces la această resursă." + "AccessDeniedMessage": "Nu aveţi acces la această resursă.", + "OrRegisterWith": "Sau înregistraţi-vă cu:", + "RegisterUsingYourProviderAccount": "Înregistraţi-vă folosindu-vă contul {0}" } } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ru.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ru.json index 88250e8d03..8413c32831 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ru.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ru.json @@ -63,6 +63,8 @@ "PasswordResetInfoInEmail": "Мы получили запрос на восстановление аккаунта! Если вы инициировали этот запрос, щелкните следующую ссылку, чтобы сбросить пароль.", "ResetMyPassword": "Сбросить пароль", "AccessDenied": "В доступе отказано!", - "AccessDeniedMessage": "У вас нет доступа к этому ресурсу." + "AccessDeniedMessage": "У вас нет доступа к этому ресурсу.", + "OrRegisterWith": "Или зарегистрируйтесь с помощью:", + "RegisterUsingYourProviderAccount": "Зарегистрируйтесь, используя свой {0} аккаунт" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sk.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sk.json index 6ca224455a..d69c0da03e 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sk.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sk.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "Dostali sme žiadosť na obnovenie účtu! Ak ste o zmenu žiadali vy, kliknite na nasledujúci link a obnovte svoje heslo.", "ResetMyPassword": "Obnovte moje heslo", "AccessDenied": "Prístup zamietnutý!", - "AccessDeniedMessage": "K tomuto zdroju nemáte prístup." + "AccessDeniedMessage": "K tomuto zdroju nemáte prístup.", + "OrRegisterWith": "Alebo sa zaregistrujte pomocou:", + "RegisterUsingYourProviderAccount": "Zaregistrujte sa pomocou svojho {0} účtu" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sl.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sl.json index 322e04cf76..4442227ad6 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sl.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sl.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "Prejeta je bila zahteva za obnovitev računa! V kolikor ste vi sprožili zahtevo, kliknite na sledečo povezavo, da ponastavite geslo.", "ResetMyPassword": "Ponastavi geslo", "AccessDenied": "Dostop zavrnjen!", - "AccessDeniedMessage": "Nimate dostopa do tega vira." + "AccessDeniedMessage": "Nimate dostopa do tega vira.", + "OrRegisterWith": "Ali pa se registrirajte z:", + "RegisterUsingYourProviderAccount": "Registrirajte se z uporabo vašega {0} računa" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json index c63eb86cef..0e53963f9a 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json @@ -66,6 +66,8 @@ "PasswordResetInfoInEmail": "Şifrenizi sıfırlamanız için bir talep aldık! Eğer bu talebi siz gerçekleştirmişseniz, şifrenizi sıfırlamak için bağlantıya tıklayın.", "ResetMyPassword": "Şifremi sıfırla", "AccessDenied": "Erişim reddedildi!", - "AccessDeniedMessage": "Bu kaynağa erişiminiz yok." + "AccessDeniedMessage": "Bu kaynağa erişiminiz yok.", + "OrRegisterWith": "Veya bunlarla kayıt ol:", + "RegisterUsingYourProviderAccount": "{0} hesabınızla kayıt olun." } } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/vi.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/vi.json index e10ae3ebe1..eae396b011 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/vi.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/vi.json @@ -63,6 +63,8 @@ "PasswordResetInfoInEmail": "Chúng tôi đã nhận được yêu cầu khôi phục tài khoản! Nếu bạn bắt đầu yêu cầu này, hãy nhấp vào liên kết sau để đặt lại mật khẩu của bạn.", "ResetMyPassword": "Đặt lại mật khẩu của tôi", "AccessDenied": "Quyền truy cập bị từ chối!", - "AccessDeniedMessage": "Bạn không có quyền truy cập vào tài nguyên này." + "AccessDeniedMessage": "Bạn không có quyền truy cập vào tài nguyên này.", + "OrRegisterWith": "Hoặc đăng ký bằng:", + "RegisterUsingYourProviderAccount": "Đăng ký bằng tài khoản {0} của bạn" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json index 1cfabd4d62..635971e7db 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json @@ -66,6 +66,8 @@ "PasswordResetInfoInEmail": "我们收到了帐户恢复请求!如果你发起了此请求,请单击以下链接以重置密码.", "ResetMyPassword": "重置我的密码", "AccessDenied": "拒绝访问!", - "AccessDeniedMessage": "你无权访问此资源." + "AccessDeniedMessage": "你无权访问此资源.", + "OrRegisterWith": "或注册:", + "RegisterUsingYourProviderAccount": "使用你的{0}帐户注册" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json index 8749163c1d..a782aa42dc 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json @@ -64,6 +64,8 @@ "PasswordResetInfoInEmail": "我們收到了帳戶恢復請求!如果你發起了此請求,請點擊以下連結以重置密碼.", "ResetMyPassword": "重置我的密碼", "AccessDenied": "拒絕訪問!", - "AccessDeniedMessage": "您無權訪問此資源." + "AccessDeniedMessage": "您無權訪問此資源.", + "OrRegisterWith": "或是註冊用:", + "RegisterUsingYourProviderAccount": "使用你的{0}帳號註冊" } } diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml index 59d5ee852f..aa5ecba592 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml @@ -27,5 +27,19 @@ @L["Register"] + + @if (!Model.IsExternalLogin && Model.VisibleExternalProviders.Any()) + { +

+ } + diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs index f9489f7797..11d8b92c91 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs @@ -1,7 +1,10 @@ +using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; @@ -32,16 +35,29 @@ public class RegisterModel : AccountPageModel [BindProperty(SupportsGet = true)] public string ExternalLoginAuthSchema { get; set; } - - public RegisterModel(IAccountAppService accountAppService) + + public IEnumerable ExternalProviders { get; set; } + public IEnumerable VisibleExternalProviders => ExternalProviders.Where(x => !string.IsNullOrWhiteSpace(x.DisplayName)); + + protected IAuthenticationSchemeProvider SchemeProvider { get; } + + protected AbpAccountOptions AccountOptions { get; } + + public RegisterModel( + IAccountAppService accountAppService, + IAuthenticationSchemeProvider schemeProvider, + IOptions accountOptions) { + SchemeProvider = schemeProvider; AccountAppService = accountAppService; + AccountOptions = accountOptions.Value; } public virtual async Task OnGetAsync() { await CheckSelfRegistrationAsync(); await TrySetEmailAsync(); + ExternalProviders = await GetExternalProviders(); return Page(); } @@ -77,6 +93,7 @@ public class RegisterModel : AccountPageModel try { await CheckSelfRegistrationAsync(); + ExternalProviders = await GetExternalProviders(); if (IsExternalLogin) { @@ -155,6 +172,20 @@ public class RegisterModel : AccountPageModel throw new UserFriendlyException(L["SelfRegistrationDisabledMessage"]); } } + + protected virtual async Task> GetExternalProviders() + { + var schemes = await SchemeProvider.GetAllSchemesAsync(); + + return schemes + .Where(x => x.DisplayName != null || x.Name.Equals(AccountOptions.WindowsAuthenticationSchemeName, StringComparison.OrdinalIgnoreCase)) + .Select(x => new ExternalProviderModel + { + DisplayName = x.DisplayName, + AuthenticationScheme = x.Name + }) + .ToList(); + } public class PostInput { @@ -173,4 +204,10 @@ public class RegisterModel : AccountPageModel [DisableAuditing] public string Password { get; set; } } + + public class ExternalProviderModel + { + public string DisplayName { get; set; } + public string AuthenticationScheme { get; set; } + } } From 1b4bac0b63daca0fbf1dcaa4032d58ba6349631d Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 18 Aug 2023 17:21:38 +0800 Subject: [PATCH 23/92] Update Register.cshtml.cs --- .../Pages/Account/Register.cshtml.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs index 11d8b92c91..5836ec2123 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs @@ -55,7 +55,11 @@ public class RegisterModel : AccountPageModel public virtual async Task OnGetAsync() { - await CheckSelfRegistrationAsync(); + if (!IsExternalLogin) + { + await CheckSelfRegistrationAsync(); + } + await TrySetEmailAsync(); ExternalProviders = await GetExternalProviders(); return Page(); @@ -92,7 +96,11 @@ public class RegisterModel : AccountPageModel { try { - await CheckSelfRegistrationAsync(); + if (!IsExternalLogin) + { + await CheckSelfRegistrationAsync(); + } + ExternalProviders = await GetExternalProviders(); if (IsExternalLogin) From 22c72c51e5280b40e8975188955d20c3054ba47b Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 18 Aug 2023 19:55:54 +0800 Subject: [PATCH 24/92] Improve --- .../Pages/Account/Register.cshtml | 22 +++++--- .../Pages/Account/Register.cshtml.cs | 51 +++++++++++++++---- 2 files changed, 55 insertions(+), 18 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml index aa5ecba592..137715804a 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml @@ -12,20 +12,28 @@ @L["Login"]
- @if (!Model.IsExternalLogin) + @if (!Model.IsExternalLogin && Model.EnableLocalRegister) { } + + @if(Model.EnableLocalRegister || Model.IsExternalLogin) + { + + } - - - @if (!Model.IsExternalLogin) + @if (!Model.IsExternalLogin && Model.EnableLocalRegister) { } -
- @L["Register"] -
+ + @if(Model.EnableLocalRegister || Model.IsExternalLogin) + { +
+ @L["Register"] +
+ } + @if (!Model.IsExternalLogin && Model.VisibleExternalProviders.Any()) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs index 5836ec2123..1b1a02d201 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs @@ -38,6 +38,9 @@ public class RegisterModel : AccountPageModel public IEnumerable ExternalProviders { get; set; } public IEnumerable VisibleExternalProviders => ExternalProviders.Where(x => !string.IsNullOrWhiteSpace(x.DisplayName)); + public bool EnableLocalRegister { get; set; } + public bool IsExternalLoginOnly => EnableLocalRegister == false && ExternalProviders?.Count() == 1; + public string ExternalLoginScheme => IsExternalLoginOnly ? ExternalProviders?.SingleOrDefault()?.AuthenticationScheme : null; protected IAuthenticationSchemeProvider SchemeProvider { get; } @@ -55,13 +58,20 @@ public class RegisterModel : AccountPageModel public virtual async Task OnGetAsync() { - if (!IsExternalLogin) + ExternalProviders = await GetExternalProviders(); + + if (!await CheckSelfRegistrationAsync()) { - await CheckSelfRegistrationAsync(); + if (!IsExternalLogin && IsExternalLoginOnly) + { + return await OnPostExternalLogin(ExternalLoginScheme); + } + + Alerts.Warning(L["SelfRegistrationDisabledMessage"]); } await TrySetEmailAsync(); - ExternalProviders = await GetExternalProviders(); + return Page(); } @@ -96,12 +106,12 @@ public class RegisterModel : AccountPageModel { try { - if (!IsExternalLogin) + ExternalProviders = await GetExternalProviders(); + + if (!await CheckSelfRegistrationAsync()) { - await CheckSelfRegistrationAsync(); + throw new UserFriendlyException(L["SelfRegistrationDisabledMessage"]); } - - ExternalProviders = await GetExternalProviders(); if (IsExternalLogin) { @@ -172,17 +182,27 @@ public class RegisterModel : AccountPageModel await SignInManager.SignInAsync(user, isPersistent: true, ExternalLoginAuthSchema); } - protected virtual async Task CheckSelfRegistrationAsync() + protected virtual async Task CheckSelfRegistrationAsync() { - if (!await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled) || - !await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin)) + EnableLocalRegister = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin) && + await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled); + + if (IsExternalLogin) + { + return true; + } + + if (!EnableLocalRegister) { - throw new UserFriendlyException(L["SelfRegistrationDisabledMessage"]); + return false; } + + return true; } protected virtual async Task> GetExternalProviders() { + var schemes = await SchemeProvider.GetAllSchemesAsync(); return schemes @@ -194,6 +214,15 @@ public class RegisterModel : AccountPageModel }) .ToList(); } + + protected virtual async Task OnPostExternalLogin(string provider) + { + var redirectUrl = Url.Page("./Login", pageHandler: "ExternalLoginCallback", values: new { ReturnUrl, ReturnUrlHash }); + var properties = SignInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl); + properties.Items["scheme"] = provider; + + return await Task.FromResult(Challenge(properties, provider)); + } public class PostInput { From 019144e746d7fe72c8a5ca26f64242bb2107c426 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 18 Aug 2023 20:20:39 +0800 Subject: [PATCH 25/92] Update Register.cshtml.cs --- .../src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs index 1b1a02d201..7bc536ba9d 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs @@ -62,7 +62,7 @@ public class RegisterModel : AccountPageModel if (!await CheckSelfRegistrationAsync()) { - if (!IsExternalLogin && IsExternalLoginOnly) + if (IsExternalLoginOnly) { return await OnPostExternalLogin(ExternalLoginScheme); } From d7cf09578921e45001b14c285b985cc9a586894c Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 21 Aug 2023 10:35:59 +0800 Subject: [PATCH 26/92] Add `IsReadOnly` to `IRepository`. --- .../ServiceCollectionRepositoryExtensions.cs | 29 +++++++++---- .../Repositories/BasicRepositoryBase.cs | 3 ++ .../Abp/Domain/Repositories/IRepository.cs | 2 +- .../ServiceCollectionShouldlyExtensions.cs | 11 +++++ .../RepositoryRegistration_Tests.cs | 42 +++++++++---------- 5 files changed, 58 insertions(+), 29 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs index c63a5442c7..f1e5068bc6 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs @@ -1,5 +1,6 @@ using System; using Microsoft.Extensions.DependencyInjection.Extensions; +using Volo.Abp; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories; @@ -17,13 +18,13 @@ public static class ServiceCollectionRepositoryExtensions var readOnlyBasicRepositoryInterface = typeof(IReadOnlyBasicRepository<>).MakeGenericType(entityType); if (readOnlyBasicRepositoryInterface.IsAssignableFrom(repositoryImplementationType)) { - RegisterService(services, readOnlyBasicRepositoryInterface, repositoryImplementationType, replaceExisting); + RegisterService(services, readOnlyBasicRepositoryInterface, repositoryImplementationType, replaceExisting, true); //IReadOnlyRepository var readOnlyRepositoryInterface = typeof(IReadOnlyRepository<>).MakeGenericType(entityType); if (readOnlyRepositoryInterface.IsAssignableFrom(repositoryImplementationType)) { - RegisterService(services, readOnlyRepositoryInterface, repositoryImplementationType, replaceExisting); + RegisterService(services, readOnlyRepositoryInterface, repositoryImplementationType, replaceExisting, true); } //IBasicRepository @@ -48,13 +49,13 @@ public static class ServiceCollectionRepositoryExtensions var readOnlyBasicRepositoryInterfaceWithPk = typeof(IReadOnlyBasicRepository<,>).MakeGenericType(entityType, primaryKeyType); if (readOnlyBasicRepositoryInterfaceWithPk.IsAssignableFrom(repositoryImplementationType)) { - RegisterService(services, readOnlyBasicRepositoryInterfaceWithPk, repositoryImplementationType, replaceExisting); + RegisterService(services, readOnlyBasicRepositoryInterfaceWithPk, repositoryImplementationType, replaceExisting, true); //IReadOnlyRepository var readOnlyRepositoryInterfaceWithPk = typeof(IReadOnlyRepository<,>).MakeGenericType(entityType, primaryKeyType); if (readOnlyRepositoryInterfaceWithPk.IsAssignableFrom(repositoryImplementationType)) { - RegisterService(services, readOnlyRepositoryInterfaceWithPk, repositoryImplementationType, replaceExisting); + RegisterService(services, readOnlyRepositoryInterfaceWithPk, repositoryImplementationType, replaceExisting, true); } //IBasicRepository @@ -80,15 +81,29 @@ public static class ServiceCollectionRepositoryExtensions IServiceCollection services, Type serviceType, Type implementationType, - bool replaceExisting) + bool replaceExisting, + bool isReadOnly = false) { + var descriptor = ServiceDescriptor.Transient(serviceType, implementationType); + + if (isReadOnly) + { + services.AddTransient(implementationType); + descriptor = ServiceDescriptor.Transient(serviceType, provider => + { + var repository = provider.GetRequiredService(implementationType); + ObjectHelper.TrySetProperty(repository.As(), x => x.IsReadOnly, _ => true); + return repository; + }); + } + if (replaceExisting) { - services.Replace(ServiceDescriptor.Transient(serviceType, implementationType)); + services.Replace(descriptor); } else { - services.TryAddTransient(serviceType, implementationType); + services.TryAdd(descriptor); } } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs index 0d86045eea..44d10b36ae 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs @@ -34,6 +34,9 @@ public abstract class BasicRepositoryBase : public ICancellationTokenProvider CancellationTokenProvider => LazyServiceProvider.LazyGetService(NullCancellationTokenProvider.Instance); + + public bool IsReadOnly { get; set; } = false; + protected BasicRepositoryBase() { diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs index 3c7ae81875..d50a881c28 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Domain.Repositories; /// public interface IRepository { - + bool IsReadOnly { get; } } public interface IRepository : IReadOnlyRepository, IBasicRepository diff --git a/framework/test/AbpTestBase/Microsoft/Extensions/DependencyInjection/ServiceCollectionShouldlyExtensions.cs b/framework/test/AbpTestBase/Microsoft/Extensions/DependencyInjection/ServiceCollectionShouldlyExtensions.cs index 6c3f8e5090..541b62f58d 100644 --- a/framework/test/AbpTestBase/Microsoft/Extensions/DependencyInjection/ServiceCollectionShouldlyExtensions.cs +++ b/framework/test/AbpTestBase/Microsoft/Extensions/DependencyInjection/ServiceCollectionShouldlyExtensions.cs @@ -17,6 +17,17 @@ public static class ServiceCollectionShouldlyExtensions serviceDescriptor.Lifetime.ShouldBe(ServiceLifetime.Transient); } + public static void ShouldContainTransientImplementationFactory(this IServiceCollection services, Type serviceType) + { + var serviceDescriptor = services.FirstOrDefault(s => s.ServiceType == serviceType); + + serviceDescriptor.ShouldNotBeNull(); + serviceDescriptor.ImplementationType.ShouldBeNull(); + serviceDescriptor.ImplementationFactory.ShouldNotBeNull(); + serviceDescriptor.ImplementationInstance.ShouldBeNull(); + serviceDescriptor.Lifetime.ShouldBe(ServiceLifetime.Transient); + } + public static void ShouldContainSingleton(this IServiceCollection services, Type serviceType, Type implementationType = null) { var serviceDescriptor = services.FirstOrDefault(s => s.ServiceType == serviceType); diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs index e6e17b253c..c12909bc98 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs @@ -31,15 +31,15 @@ public class RepositoryRegistration_Tests //Assert //MyTestAggregateRootWithoutPk - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); //MyTestAggregateRootWithGuidPk - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); @@ -69,24 +69,24 @@ public class RepositoryRegistration_Tests //Assert //MyTestAggregateRootWithoutPk - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); //MyTestAggregateRootWithGuidPk - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); //MyTestEntityWithInt32Pk - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IReadOnlyBasicRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyBasicRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); } @@ -114,20 +114,20 @@ public class RepositoryRegistration_Tests services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); //MyTestAggregateRootWithGuidPk - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); - services.ShouldContainTransient(typeof(IReadOnlyBasicRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyBasicRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); //MyTestEntityWithInt32Pk - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IReadOnlyBasicRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyBasicRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); } @@ -209,10 +209,10 @@ public class RepositoryRegistration_Tests services.ShouldNotContainService(typeof(IRepository)); //MyTestAggregateRootWithGuidPk - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); } @@ -234,11 +234,11 @@ public class RepositoryRegistration_Tests new MyTestRepositoryRegistrar(options).AddRepositories(); //MyTestAggregateRootWithGuidPk - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); - services.ShouldContainTransient(typeof(IReadOnlyRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); - services.ShouldContainTransient(typeof(IReadOnlyBasicRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyRepository)); + services.ShouldContainTransientImplementationFactory(typeof(IReadOnlyBasicRepository)); services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); services.ShouldContainTransient(typeof(IRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); } @@ -407,7 +407,7 @@ public class RepositoryRegistration_Tests public class MyTestAggregateRootWithDefaultPkEmptyRepository : IMyTestAggregateRootWithDefaultPkEmptyRepository { - + public bool IsReadOnly { get; set; } = false; } public class TestDbContextRegistrationOptions : AbpCommonDbContextRegistrationOptions From 2c24f0c706802aa21a5163ef5220bc84d8ea30b9 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 21 Aug 2023 11:33:04 +0800 Subject: [PATCH 27/92] Throw `AbpRepositoryIsReadOnlyException` when the read-only repository writes method calls. --- .../Data/AbpRepositoryIsReadOnlyException.cs | 22 +++++ .../EntityFrameworkCore/EfCoreRepository.cs | 88 +++++++++++++------ .../Repositories/ReadOnlyRepository_Tests.cs | 75 ++++++++++++++++ 3 files changed, 159 insertions(+), 26 deletions(-) create mode 100644 framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpRepositoryIsReadOnlyException.cs create mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpRepositoryIsReadOnlyException.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpRepositoryIsReadOnlyException.cs new file mode 100644 index 0000000000..6c648fd022 --- /dev/null +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpRepositoryIsReadOnlyException.cs @@ -0,0 +1,22 @@ +namespace Volo.Abp.Data; + +public class AbpRepositoryIsReadOnlyException : AbpException +{ + /// + /// Creates a new object. + /// + public AbpRepositoryIsReadOnlyException() + { + + } + + /// + /// Creates a new object. + /// + /// Exception message + public AbpRepositoryIsReadOnlyException(string message) + : base(message) + { + + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 96d7b4111e..e2b40d6886 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -1,4 +1,3 @@ -using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -6,16 +5,15 @@ using System; using System.Collections.Generic; using System.Data; using System.Linq; -using System.Linq.Dynamic.Core; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore.Storage; +using Volo.Abp.Data; using Volo.Abp.Domain.Entities; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.DependencyInjection; using Volo.Abp.Guids; -using Volo.Abp.MultiTenancy; namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore; @@ -37,30 +35,50 @@ public class EfCoreRepository : RepositoryBase, IE [Obsolete("Use GetDbContextAsync() method.")] private TDbContext GetDbContext() { + TDbContext dbContext; // Multi-tenancy unaware entities should always use the host connection string if (!EntityHelper.IsMultiTenant()) { using (CurrentTenant.Change(null)) { - return _dbContextProvider.GetDbContext(); + dbContext = _dbContextProvider.GetDbContext(); } } + else + { + dbContext = _dbContextProvider.GetDbContext(); + } + + if (IsReadOnly) + { + dbContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; + } - return _dbContextProvider.GetDbContext(); + return dbContext; } - protected virtual Task GetDbContextAsync() + protected virtual async Task GetDbContextAsync() { + TDbContext dbContext; // Multi-tenancy unaware entities should always use the host connection string if (!EntityHelper.IsMultiTenant()) { using (CurrentTenant.Change(null)) { - return _dbContextProvider.GetDbContextAsync(); + dbContext = await _dbContextProvider.GetDbContextAsync(); } } + else + { + dbContext = await _dbContextProvider.GetDbContextAsync(); + } + + if (IsReadOnly) + { + dbContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; + } - return _dbContextProvider.GetDbContextAsync(); + return dbContext; } [Obsolete("Use GetDbSetAsync() method.")] @@ -75,7 +93,7 @@ public class EfCoreRepository : RepositoryBase, IE { return (await GetDbContextAsync()).Set(); } - + protected async Task GetDbConnectionAsync() { return (await GetDbContextAsync()).Database.GetDbConnection(); @@ -107,8 +125,9 @@ public class EfCoreRepository : RepositoryBase, IE ); } - public override async Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { + CheckReadOnly(); CheckAndSetId(entity); var dbContext = await GetDbContextAsync(); @@ -123,8 +142,9 @@ public class EfCoreRepository : RepositoryBase, IE return savedEntity; } - public override async Task InsertManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task InsertManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { + CheckReadOnly(); var entityArray = entities.ToArray(); var dbContext = await GetDbContextAsync(); cancellationToken = GetCancellationToken(cancellationToken); @@ -153,8 +173,9 @@ public class EfCoreRepository : RepositoryBase, IE } } - public override async Task UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { + CheckReadOnly(); var dbContext = await GetDbContextAsync(); dbContext.Attach(entity); @@ -169,8 +190,9 @@ public class EfCoreRepository : RepositoryBase, IE return updatedEntity; } - public override async Task UpdateManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task UpdateManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { + CheckReadOnly(); cancellationToken = GetCancellationToken(cancellationToken); if (BulkOperationProvider != null) @@ -195,8 +217,9 @@ public class EfCoreRepository : RepositoryBase, IE } } - public override async Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { + CheckReadOnly(); var dbContext = await GetDbContextAsync(); dbContext.Set().Remove(entity); @@ -207,8 +230,9 @@ public class EfCoreRepository : RepositoryBase, IE } } - public override async Task DeleteManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task DeleteManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { + CheckReadOnly(); cancellationToken = GetCancellationToken(cancellationToken); if (BulkOperationProvider != null) @@ -233,26 +257,26 @@ public class EfCoreRepository : RepositoryBase, IE } } - public override async Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) + public async override Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) { return includeDetails ? await (await WithDetailsAsync()).ToListAsync(GetCancellationToken(cancellationToken)) : await (await GetDbSetAsync()).ToListAsync(GetCancellationToken(cancellationToken)); } - public override async Task> GetListAsync(Expression> predicate, bool includeDetails = false, CancellationToken cancellationToken = default) + public async override Task> GetListAsync(Expression> predicate, bool includeDetails = false, CancellationToken cancellationToken = default) { return includeDetails ? await (await WithDetailsAsync()).Where(predicate).ToListAsync(GetCancellationToken(cancellationToken)) : await (await GetDbSetAsync()).Where(predicate).ToListAsync(GetCancellationToken(cancellationToken)); } - public override async Task GetCountAsync(CancellationToken cancellationToken = default) + public async override Task GetCountAsync(CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()).LongCountAsync(GetCancellationToken(cancellationToken)); } - public override async Task> GetPagedListAsync( + public async override Task> GetPagedListAsync( int skipCount, int maxResultCount, string sorting, @@ -275,17 +299,17 @@ public class EfCoreRepository : RepositoryBase, IE return DbSet.AsQueryable(); } - public override async Task> GetQueryableAsync() + public async override Task> GetQueryableAsync() { return (await GetDbSetAsync()).AsQueryable(); } - protected override async Task SaveChangesAsync(CancellationToken cancellationToken) + protected async override Task SaveChangesAsync(CancellationToken cancellationToken) { await (await GetDbContextAsync()).SaveChangesAsync(cancellationToken); } - public override async Task FindAsync( + public async override Task FindAsync( Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) @@ -299,8 +323,9 @@ public class EfCoreRepository : RepositoryBase, IE .SingleOrDefaultAsync(GetCancellationToken(cancellationToken)); } - public override async Task DeleteAsync(Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task DeleteAsync(Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) { + CheckReadOnly(); var dbContext = await GetDbContextAsync(); var dbSet = dbContext.Set(); @@ -316,8 +341,9 @@ public class EfCoreRepository : RepositoryBase, IE } } - public override async Task DeleteDirectAsync(Expression> predicate, CancellationToken cancellationToken = default) + public async override Task DeleteDirectAsync(Expression> predicate, CancellationToken cancellationToken = default) { + CheckReadOnly(); var dbContext = await GetDbContextAsync(); var dbSet = dbContext.Set(); await dbSet.Where(predicate).ExecuteDeleteAsync(GetCancellationToken(cancellationToken)); @@ -358,7 +384,7 @@ public class EfCoreRepository : RepositoryBase, IE return AbpEntityOptions.DefaultWithDetailsFunc(GetQueryable()); } - public override async Task> WithDetailsAsync() + public async override Task> WithDetailsAsync() { if (AbpEntityOptions.DefaultWithDetailsFunc == null) { @@ -377,7 +403,7 @@ public class EfCoreRepository : RepositoryBase, IE ); } - public override async Task> WithDetailsAsync(params Expression>[] propertySelectors) + public async override Task> WithDetailsAsync(params Expression>[] propertySelectors) { return IncludeDetails( await GetQueryableAsync(), @@ -421,6 +447,14 @@ public class EfCoreRepository : RepositoryBase, IE true ); } + + protected virtual void CheckReadOnly() + { + if (IsReadOnly) + { + throw new AbpRepositoryIsReadOnlyException($"Can not call {nameof(InsertAsync)}, {nameof(UpdateAsync)}, {nameof(DeleteAsync)}, {nameof(DeleteManyAsync)} methods on a read-only repository!"); + } + } } public class EfCoreRepository : EfCoreRepository, @@ -457,6 +491,7 @@ public class EfCoreRepository : EfCoreRepository : EfCoreRepository ids, bool autoSave = false, CancellationToken cancellationToken = default) { + CheckReadOnly(); cancellationToken = GetCancellationToken(cancellationToken); var entities = await (await GetDbSetAsync()).Where(x => ids.Contains(x.Id)).ToListAsync(cancellationToken); diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs new file mode 100644 index 0000000000..bd073ce15a --- /dev/null +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs @@ -0,0 +1,75 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Shouldly; +using Volo.Abp.Data; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.TestApp.Domain; +using Volo.Abp.TestApp.EntityFrameworkCore; +using Volo.Abp.TestApp.Testing; +using Xunit; + +namespace Volo.Abp.EntityFrameworkCore.Repositories; + +public class ReadOnlyRepository_Tests : TestAppTestBase +{ + [Fact] + public async Task ReadOnlyRepository_Should_NoTracking() + { + // Non-read-only repository tracking default + await WithUnitOfWorkAsync(async () => + { + var repository = GetRequiredService>(); + var db = await repository.GetDbContextAsync(); + db.ChangeTracker.Entries().Count().ShouldBe(0); + var list = await repository.GetListAsync(); + list.Count.ShouldBeGreaterThan(0); + db.ChangeTracker.Entries().Count().ShouldBe(list.Count); + }); + + // Read-only repository no tracking default + await WithUnitOfWorkAsync(async () => + { + var readonlyRepository = GetRequiredService>(); + var db = await readonlyRepository.GetDbContextAsync(); + db.ChangeTracker.Entries().Count().ShouldBe(0); + var list = await readonlyRepository.GetListAsync(); + list.Count.ShouldBeGreaterThan(0); + db.ChangeTracker.Entries().Count().ShouldBe(0); + }); + + // Read-only repository can tracking manually by AsTracking + await WithUnitOfWorkAsync(async () => + { + var readonlyRepository = GetRequiredService>(); + var db = await readonlyRepository.GetDbContextAsync(); + db.ChangeTracker.Entries().Count().ShouldBe(0); + var list = await (await readonlyRepository.ToEfCoreRepository().GetQueryableAsync()).AsTracking().ToListAsync(); + list.Count.ShouldBeGreaterThan(0); + db.ChangeTracker.Entries().Count().ShouldBe(list.Count); + }); + } + + [Fact] + public async Task ReadOnlyRepository_Should_Throw_AbpRepositoryIsReadOnlyException_When_Write_Method_Call() + { + await WithUnitOfWorkAsync(async () => + { + var repository = GetRequiredService>(); + await repository.ToEfCoreRepository().InsertAsync(new Person(Guid.NewGuid(), "test", 18)); + var person = await repository.ToEfCoreRepository().FirstOrDefaultAsync(); + person.ShouldNotBeNull(); + }); + + await WithUnitOfWorkAsync(async () => + { + await Assert.ThrowsAsync(async () => + { + var readonlyRepository = GetRequiredService>(); + await readonlyRepository.ToEfCoreRepository().As>().InsertAsync(new Person(Guid.NewGuid(), "test readonly", 18)); + }); + }); + } +} From 599b39fa5210841502325a0b06e366546a4c5b08 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 21 Aug 2023 13:21:06 +0800 Subject: [PATCH 28/92] Update Repositories.md --- docs/en/Repositories.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/en/Repositories.md b/docs/en/Repositories.md index 95f908d004..57115f903b 100644 --- a/docs/en/Repositories.md +++ b/docs/en/Repositories.md @@ -217,6 +217,12 @@ They can all be seen as below: ![generic-repositories](images/generic-repositories.png) +#### Read Only Repositories behavior in EF Core + +EF Core will use No-tracking queries for read-only repositories. This means that the entities returned from the repository will not be tracked by the EF Core's change tracker. This is a performance optimization. + +However, if you need to track the entities, You can still add [AsTracking](https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.entityframeworkqueryableextensions.astracking) to make specific queries tracking. + ### Generic Repository without a Primary Key If your entity does not have an Id primary key (it may have a composite primary key for instance) then you cannot use the `IRepository` (or basic/readonly versions) defined above. In that case, you can inject and use `IRepository` for your entity. From f47a09d6024956c8f6df39d437d157b26cfffb28 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 21 Aug 2023 13:30:19 +0800 Subject: [PATCH 29/92] Update `AbpRepositoryIsReadOnlyException's` message. --- .../Repositories/EntityFrameworkCore/EfCoreRepository.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index e2b40d6886..2f89ac2b8a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -452,7 +452,14 @@ public class EfCoreRepository : RepositoryBase, IE { if (IsReadOnly) { - throw new AbpRepositoryIsReadOnlyException($"Can not call {nameof(InsertAsync)}, {nameof(UpdateAsync)}, {nameof(DeleteAsync)}, {nameof(DeleteManyAsync)} methods on a read-only repository!"); + throw new AbpRepositoryIsReadOnlyException($"Can not call " + + $"{nameof(InsertAsync)}, " + + $"{nameof(InsertManyAsync)}, " + + $"{nameof(UpdateAsync)}, " + + $"{nameof(UpdateManyAsync)}, " + + $"{nameof(DeleteAsync)}, " + + $"{nameof(DeleteManyAsync)}, " + + $"{nameof(DeleteDirectAsync)} methods on a read-only repository!"); } } } From 1344d44948135bd330344709164a9a1bd7899fc4 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 21 Aug 2023 13:46:54 +0800 Subject: [PATCH 30/92] Rename `isReadOnly` to `isReadOnlyRepository`. --- .../ServiceCollectionRepositoryExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs index f1e5068bc6..ae85fbe24c 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs @@ -82,11 +82,11 @@ public static class ServiceCollectionRepositoryExtensions Type serviceType, Type implementationType, bool replaceExisting, - bool isReadOnly = false) + bool isReadOnlyRepository = false) { var descriptor = ServiceDescriptor.Transient(serviceType, implementationType); - if (isReadOnly) + if (isReadOnlyRepository) { services.AddTransient(implementationType); descriptor = ServiceDescriptor.Transient(serviceType, provider => From 12f005c6c013f7bc22884f82d5683a8c65d9a1df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 21 Aug 2023 09:18:11 +0300 Subject: [PATCH 31/92] Improve the exception message --- .../Abp/Application/Services/AbstractKeyReadOnlyAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8602792701..3791c4202f 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 @@ -132,7 +132,7 @@ public abstract class AbstractKeyReadOnlyAppService ((IHasCreationTime)e).CreationTime); } - throw new AbpException("No sorting specified but this query requires sorting. Override the ApplyDefaultSorting method for your application service derived from AbstractKeyReadOnlyAppService!"); + throw new AbpException("No sorting specified but this query requires sorting. Override the ApplySorting or the ApplyDefaultSorting method for your application service derived from AbstractKeyReadOnlyAppService!"); } /// From 07ec9458392976b757b4f7fe6103b79500bac1ca Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 21 Aug 2023 17:04:01 +0800 Subject: [PATCH 32/92] Catch and ignore the `Exception` from `ValidationAttributeHelper`. --- .../Metadata/AbpModelMetadataProvider.cs | 4 ++-- .../Validation/ValidationAttributeHelper.cs | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/Metadata/AbpModelMetadataProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/Metadata/AbpModelMetadataProvider.cs index 8d5f2d4c4a..1301a5e823 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/Metadata/AbpModelMetadataProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/Metadata/AbpModelMetadataProvider.cs @@ -40,11 +40,11 @@ public class AbpModelMetadataProvider : DefaultModelMetadataProvider { foreach (var validationAttribute in detail.ModelAttributes.Attributes.OfType()) { - NormalizeValidationAttrbute(validationAttribute); + NormalizeValidationAttribute(validationAttribute); } } - protected virtual void NormalizeValidationAttrbute(ValidationAttribute validationAttribute) + protected virtual void NormalizeValidationAttribute(ValidationAttribute validationAttribute) { if (validationAttribute.ErrorMessage == null) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/ValidationAttributeHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/ValidationAttributeHelper.cs index 505c07a3e1..cd87c55ea4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/ValidationAttributeHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/ValidationAttributeHelper.cs @@ -1,14 +1,15 @@ -using System.ComponentModel.DataAnnotations; +using System; +using System.ComponentModel.DataAnnotations; using System.Reflection; namespace Volo.Abp.AspNetCore.Mvc.Validation; public static class ValidationAttributeHelper { - private static readonly PropertyInfo ValidationAttributeErrorMessageStringProperty = typeof(ValidationAttribute) + private readonly static PropertyInfo ValidationAttributeErrorMessageStringProperty = typeof(ValidationAttribute) .GetProperty("ErrorMessageString", BindingFlags.Instance | BindingFlags.NonPublic)!; - private static readonly PropertyInfo ValidationAttributeCustomErrorMessageSetProperty = typeof(ValidationAttribute) + private readonly static PropertyInfo ValidationAttributeCustomErrorMessageSetProperty = typeof(ValidationAttribute) .GetProperty("CustomErrorMessageSet", BindingFlags.Instance | BindingFlags.NonPublic)!; public static void SetDefaultErrorMessage(ValidationAttribute validationAttribute) @@ -24,7 +25,14 @@ public static class ValidationAttributeHelper } } - validationAttribute.ErrorMessage = - ValidationAttributeErrorMessageStringProperty.GetValue(validationAttribute) as string; + try + { + var errorMessageString = ValidationAttributeErrorMessageStringProperty.GetValue(validationAttribute) as string; + validationAttribute.ErrorMessage = errorMessageString; + } + catch (Exception e) + { + // ignored + } } } From a9fd6f4db7827553d667f632190637a624e1e37e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alper=20Ebi=C3=A7o=C4=9Flu?= <9526587+ebicoglu@users.noreply.github.com> Date: Mon, 21 Aug 2023 16:44:45 +0300 Subject: [PATCH 33/92] Update en.json replace payu with iyzico --- .../AbpIoLocalization/Commercial/Localization/Resources/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 1b8c972d5c..c2887ada84 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -567,7 +567,7 @@ "TotalPrice": "Total Price", "ThereIsNoInvoice": "There is no invoice", "MyOrganizations_Detail_PaymentProviderInfo": "If you have purchased your license through {0} gateway, it sends the PDF invoice to your email address, see {0} invoicing.", - "MyOrganizations_Detail_PayUInfo": "If you have purchased through the PayU gateway, click the \"Request Invoice\" button and fill in the billing information.", + "MyOrganizations_Detail_PayUInfo": "If you have purchased through the Iyzico gateway, click the \"Request Invoice\" button and fill in the billing information.", "MyOrganizations_Detail_ConclusionInfo": "Your invoice request will be concluded within {0} business days.", "ExtendYourLicense": "Extend your {0} license", "Continue": "Continue", From c2fb4d55614afedcf7a69de26a402a05949bd32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 21 Aug 2023 17:38:04 +0300 Subject: [PATCH 34/92] Create SECURITY.md --- SECURITY.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..43e9cba5de --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,14 @@ +# Security Policy + +## Supported Versions + +| Version | Supported | +| ------- | ------------------ | +| 7.x.x | :white_check_mark: | +| < 7.0.0 | :x: | + +## Reporting a Vulnerability + +Please don not share vulnerabilities publicly in GitHub or other platforms. +You can report security issues by sending a email to `security@abp.io` +Your report is immediately evaluated. We publish patch versions for critical vulnerabilities in a week at most. From 1832519ba97756069f8679e6e26921c8a487c50e Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 22 Aug 2023 13:33:15 +0800 Subject: [PATCH 35/92] Support attachments and `ExtraProperties` when sending emails. --- .../Abp/Emailing/BackgroundEmailSendingJob.cs | 6 +-- .../Emailing/BackgroundEmailSendingJobArgs.cs | 6 ++- .../Volo/Abp/Emailing/EmailAttachment.cs | 11 ++++ .../Volo/Abp/Emailing/EmailSenderBase.cs | 53 +++++++++++++------ .../Volo/Abp/Emailing/IEmailSender.cs | 20 +++++-- .../Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs | 2 +- .../Abp/MailKit/MailKitSmtpEmailSender.cs | 2 +- 7 files changed, 73 insertions(+), 27 deletions(-) create mode 100644 framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailAttachment.cs diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs index 07b4ca9bcd..f1d2812ae9 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs @@ -15,15 +15,15 @@ public class BackgroundEmailSendingJob : AsyncBackgroundJob public bool IsBodyHtml { get; set; } = true; - //TODO: Add other properties and attachments + public List? Attachments { get; set; } + + public ExtraPropertyDictionary? ExtraProperties { get; set; } } diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailAttachment.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailAttachment.cs new file mode 100644 index 0000000000..e2fe3a3a6b --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailAttachment.cs @@ -0,0 +1,11 @@ +using System; + +namespace Volo.Abp.Emailing; + +[Serializable] +public class EmailAttachment +{ + public string? Name { get; set; } + + public byte[]? File { get; set; } +} diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs index d8a46ca4b9..8de9f4c5a1 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs @@ -1,8 +1,12 @@ using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; using System.Net.Mail; using System.Text; using System.Threading.Tasks; using Volo.Abp.BackgroundJobs; +using Volo.Abp.Data; namespace Volo.Abp.Emailing; @@ -24,20 +28,33 @@ public abstract class EmailSenderBase : IEmailSender BackgroundJobManager = backgroundJobManager; } - public virtual async Task SendAsync(string to, string? subject, string? body, bool isBodyHtml = true) + public virtual async Task SendAsync(string to, string? subject, string? body, bool isBodyHtml = true, List? attachments = null, ExtraPropertyDictionary? extraProperties = null) { - await SendAsync(new MailMessage - { - To = { to }, - Subject = subject, - Body = body, - IsBodyHtml = isBodyHtml - }); + await SendAsync(BuildMailMessage(null, to, subject, body, isBodyHtml, attachments, extraProperties)); } - public virtual async Task SendAsync(string from, string to, string? subject, string? body, bool isBodyHtml = true) + public virtual async Task SendAsync(string from, string to, string? subject, string? body, bool isBodyHtml = true, List? attachments = null, ExtraPropertyDictionary? extraProperties = null) { - await SendAsync(new MailMessage(from, to, subject, body) { IsBodyHtml = isBodyHtml }); + await SendAsync(BuildMailMessage(from, to, subject, body, isBodyHtml, attachments, extraProperties)); + } + + protected virtual MailMessage BuildMailMessage(string? from, string to, string? subject, string? body, bool isBodyHtml = true, List? attachments = null, ExtraPropertyDictionary? extraProperties = null) + { + var message = from == null + ? new MailMessage { To = { to }, Subject = subject, Body = body, IsBodyHtml = isBodyHtml } + : new MailMessage(from, to, subject, body) { IsBodyHtml = isBodyHtml }; + + if (attachments != null) + { + foreach (var attachment in attachments.Where(x => x.File != null)) + { + var fileStream = new MemoryStream(attachment.File!); + fileStream.Seek(0, SeekOrigin.Begin); + message.Attachments.Add(new Attachment(fileStream, attachment.Name)); + } + } + + return message; } public virtual async Task SendAsync(MailMessage mail, bool normalize = true) @@ -50,11 +67,11 @@ public abstract class EmailSenderBase : IEmailSender await SendEmailAsync(mail); } - public virtual async Task QueueAsync(string to, string subject, string body, bool isBodyHtml = true) + public virtual async Task QueueAsync(string to, string subject, string body, bool isBodyHtml = true, List? attachments = null, ExtraPropertyDictionary? extraProperties = null) { if (!BackgroundJobManager.IsAvailable()) { - await SendAsync(to, subject, body, isBodyHtml); + await SendAsync(to, subject, body, isBodyHtml, attachments, extraProperties); return; } @@ -64,16 +81,18 @@ public abstract class EmailSenderBase : IEmailSender To = to, Subject = subject, Body = body, - IsBodyHtml = isBodyHtml + IsBodyHtml = isBodyHtml, + Attachments = attachments, + ExtraProperties = extraProperties } ); } - public virtual async Task QueueAsync(string from, string to, string subject, string body, bool isBodyHtml = true) + public virtual async Task QueueAsync(string from, string to, string subject, string body, bool isBodyHtml = true, List? attachments = null, ExtraPropertyDictionary? extraProperties = null) { if (!BackgroundJobManager.IsAvailable()) { - await SendAsync(from, to, subject, body, isBodyHtml); + await SendAsync(from, to, subject, body, isBodyHtml, attachments, extraProperties); return; } @@ -84,7 +103,9 @@ public abstract class EmailSenderBase : IEmailSender To = to, Subject = subject, Body = body, - IsBodyHtml = isBodyHtml + IsBodyHtml = isBodyHtml, + Attachments = attachments, + ExtraProperties = extraProperties } ); } diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs index 55456783c4..83e082d2a1 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs @@ -1,5 +1,7 @@ -using System.Net.Mail; +using System.Collections.Generic; +using System.Net.Mail; using System.Threading.Tasks; +using Volo.Abp.Data; namespace Volo.Abp.Emailing; @@ -15,7 +17,9 @@ public interface IEmailSender string to, string? subject, string? body, - bool isBodyHtml = true + bool isBodyHtml = true, + List? attachments = null, + ExtraPropertyDictionary? extraProperties = null ); /// @@ -26,7 +30,9 @@ public interface IEmailSender string to, string? subject, string? body, - bool isBodyHtml = true + bool isBodyHtml = true, + List? attachments = null, + ExtraPropertyDictionary? extraProperties = null ); /// @@ -49,7 +55,9 @@ public interface IEmailSender string to, string subject, string body, - bool isBodyHtml = true + bool isBodyHtml = true, + List? attachments = null, + ExtraPropertyDictionary? extraProperties = null ); /// @@ -60,7 +68,9 @@ public interface IEmailSender string to, string subject, string body, - bool isBodyHtml = true + bool isBodyHtml = true, + List? attachments = null, + ExtraPropertyDictionary? extraProperties = null ); //TODO: Add other Queue methods too. Problem: MailMessage is not serializable so can not be used in background jobs. diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs index 99a8f2e1e7..4bf7e18158 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs @@ -67,7 +67,7 @@ public class SmtpEmailSender : EmailSenderBase, ISmtpEmailSender, ITransientDepe } } - protected override async Task SendEmailAsync(MailMessage mail) + protected async override Task SendEmailAsync(MailMessage mail) { using (var smtpClient = await BuildClientAsync()) { diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs index c3523b4e1a..96e436760e 100644 --- a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs @@ -29,7 +29,7 @@ public class MailKitSmtpEmailSender : EmailSenderBase, IMailKitSmtpEmailSender SmtpConfiguration = smtpConfiguration; } - protected override async Task SendEmailAsync(MailMessage mail) + protected async override Task SendEmailAsync(MailMessage mail) { using (var client = await BuildClientAsync()) { From dc34d7435ac12fda30b844f63fb50832ddeabb8a Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 22 Aug 2023 14:39:02 +0800 Subject: [PATCH 36/92] Update the `Emailing.md`. --- docs/en/Emailing.md | 5 +++++ .../src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/en/Emailing.md b/docs/en/Emailing.md index bfb3058862..fd9e696b3e 100644 --- a/docs/en/Emailing.md +++ b/docs/en/Emailing.md @@ -58,7 +58,12 @@ namespace MyProject `SendAsync` method has overloads to supply more parameters like; * **from**: You can set this as the first argument to set a sender email address. If not provided, the default sender address is used (see the email settings below). +* **to**: You can set the target email address. +* **subject**: You can set the email subject. +* **body**: You can set the email body. * **isBodyHtml**: Indicates whether the email body may contain HTML tags. **Default: true**. +* **attachments**: You can pass a list of `EmailAttachment` to add attachments to the email. +* **extraProperties**: You can pass extra properties and use these properties in your own `IEmailSender` implementation to implement more mail sending features. > `IEmailSender` is the suggested way to send emails, since it makes your code provider independent. diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs index 83e082d2a1..d2952c2d47 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/IEmailSender.cs @@ -72,6 +72,4 @@ public interface IEmailSender List? attachments = null, ExtraPropertyDictionary? extraProperties = null ); - - //TODO: Add other Queue methods too. Problem: MailMessage is not serializable so can not be used in background jobs. } From cdc00198bb613cebe9659a45c9338a5831aee6ee Mon Sep 17 00:00:00 2001 From: Salih Date: Tue, 22 Aug 2023 09:39:27 +0300 Subject: [PATCH 37/92] Update en.json --- .../Commercial/Localization/Resources/en.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index c2887ada84..124ddcffa2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1073,6 +1073,8 @@ "ABPCommunity_Description2": "It is easy to share code or even re-usable libraries between ABP developers. A code snippet that works for you will also work for others. There are a lot of samples and tutorials that you can directly implement for your application.", "ABPCommunity_Description3": "When you hire a developer who worked before with the ABP architecture will immediately understand your solution and start development in a very short time.", "WhyAbpIo_Page_Title": "Why ABP.IO Platform?", - "AbpStudio_Page_Title": "ABP Studio" + "AbpStudio_Page_Title": "ABP Studio", + "CampaignInfo": "Buy a new license or renew your existing license and get an additional 2 months at no additional cost! This offer is valid for all license plans. Ensure you take advantage of this limited-time promotion to expand your access to premium features and upgrades.", + "HurryUpLastDay": "Hurry Up! Last Day: {0}" } } From fd5b9b0536a9864b979110c66dd8415b1d3ae361 Mon Sep 17 00:00:00 2001 From: Salih Date: Tue, 22 Aug 2023 16:54:02 +0300 Subject: [PATCH 38/92] Update Why Abp IO Page Localizations --- .../Commercial/Localization/Resources/en.json | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 124ddcffa2..d9794a06e4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1001,19 +1001,19 @@ "ABPSOLUTION": "ABP SOLUTION", "CreatingAnEmptySolution_ABPSOLUTION_Description": "ABP provides a well-architected, layered and production-ready startup solution based on the Domain Driven Design principles. The solution also includes a pre-configured unit and integration test projects for each layer.", "CommonLibraries": "Common Libraries", - "CommonLibraries_THEPROBLEM_Description": "Which libraries should you use to implement common requirements? The software development ecosystem is highly dynamic and it is hard to follow the latest tools, libraries, trends and approaches.", - "CommonLibraries_ABPSOLUTION_Description": "ABP pre-integrates the popular, mature and up-to-date libraries into the solution. You don't spend time integrating them and talking to each other. They properly work out of the box.", + "CommonLibraries_THEPROBLEM_Description": "Which libraries should you use to implement common requirements? The software development ecosystem is highly dynamic, making it challenging to keep up with the latest tools, libraries, trends, and approaches.", + "CommonLibraries_ABPSOLUTION_Description": "ABP pre-integrates popular, mature, and up-to-date libraries into the solution. You don't need to spend time integrating them or making them communicate with each other. They work properly out of the box.", "UITheme&Layout": "UI Theme & Layout", - "UITheme&Layout_THEPROBLEM_Description": "When it comes to the UI, there are a lot of challenges, including preparing a foundation to create a responsive, modern and flexible UI kit with a consistent look & feel and tons of features (like left/top navigation menu, header, toolbar, footer, widgets and so.).", - "UITheme&Layout_THEPROBLEM_Description2": "Even if you buy a pre-built theme, integrating it into your solution may take days of development. Upgrading such a theme is another problem. Most of the time, the theme's HTML/CSS structure is mixed with your UI code, and it is not easy to upgrade or change the theme later.", - "UITheme&Layout_ABPSOLUTION_Description": "ABP Framework provides a theming system that makes your UI code independent from the theme. Themes are isolated, and they are NuGet/NPM packages. Installing or upgrading a theme is just a minute. While you can build your theme (or integrate an existing theme), ABP Commercial offers professional and modern themes.", - "UITheme&Layout_ABPSOLUTION_Description2": "There are also UI component providers (like Telerik and DevExpress). But they only provide individual components. You are responsible for creating your own layout system. You can use such libraries in your ABP-based solutions just like in any other project.", + "UITheme&Layout_THEPROBLEM_Description": "When addressing UI concerns, a range of challenges surfaces. These include establishing the groundwork for a responsive, contemporary, and adaptable UI kit with a consistent appearance and a host of features like navigation menus, headers, toolbars, footers, widgets, and more.", + "UITheme&Layout_THEPROBLEM_Description2": "Even if you opt for a pre-designed theme, seamlessly integrating it into your project could demand days of development. An additional hurdle lies in upgrading such themes. Frequently, the theme's HTML/CSS structure becomes intertwined with your UI code, rendering future theme changes or upgrades intricate tasks. This interweaving of code and design complicates the flexibility of making adjustments down the line.", + "UITheme&Layout_ABPSOLUTION_Description": "ABP Framework offers a distinctive theming system that liberates your UI code from theme constraints. Themes exist in isolation, packaged as NuGet or NPM packages, making theme installation or upgrades a matter of minutes. While you retain the option to develop your custom theme or integrate an existing one, ABP Commercial presents a collection of polished and contemporary themes.", + "UITheme&Layout_ABPSOLUTION_Description2": "Additionally, there are UI component providers like Telerik and DevExpress. However, these providers primarily furnish individual components, placing the onus on you to establish your layout system. When working within ABP-based projects, you can seamlessly incorporate these libraries, similar to how you would in any other project.", "TestInfrastructure": "Test Infrastructure", - "TestInfrastructure_THEPROBLEM_Description": "Preparing a robust test environment takes time. You need to setup test projects in your solution, select the tools, mock the services and database, create the required base classes and utility services to reduce repeating code in the tests and so on.", - "TestInfrastructure_ABPSOLUTION_Description": "ABP Startup Templates comes with the test projects already configured for you, and you can immediately write your first unit or integration test code on day 1.", + "TestInfrastructure_THEPROBLEM_Description": "Establishing a robust testing environment is a time-consuming endeavor. It involves setting up dedicated test projects within your solution, carefully selecting the necessary tools, creating service and database mocks, crafting essential base classes and utility services to minimize redundant code across tests, and addressing various related tasks.", + "TestInfrastructure_ABPSOLUTION_Description": "ABP Startup Templates arrive pre-equipped with configured test projects, streamlining the process for you. This means that from day one, you can readily commence writing your initial unit or integration test code without delay.", "CodingStandards&Training": "Coding Standards & Training", - "CodingStandards&Training_THEPROBLEM_Description": "Once you create the development-ready solution, you typically need to train the developers to explain the system and develop it with the same conventions in a standard and consistent way. Even if you train the developers, it is hard to prepare and maintain your documentation. Over time, every developer will write the code differently, and coding standards will begin to diverge.", - "CodingStandards&Training_ABPSOLUTION_Description": "ABP solution is already well-defined and well-documented. Tutorials and best practice guides clearly explain how to make development on an ABP project.", + "CodingStandards&Training_THEPROBLEM_Description": "After you've set up the solution for development, you usually have to teach the developers how the system works and how to build it using the same agreed-upon methods. Even if you give them training, keeping the documentation up-to-date can be difficult. As time goes on, each developer might write code in their own way, causing the rules for writing code to become different from each other.", + "CodingStandards&Training_ABPSOLUTION_Description": "The ABP solution is already neatly organized and has clear explanations. Step-by-step tutorials and guides show you exactly how to work on an ABP project.", "KeepingYourSolutionUpToDate": "Keeping Your Solution Up to Date", "KeepingYourSolutionUpToDate_THEPROBLEM_Description": "After you start your development, you must keep track of the new versions of the libraries you use for upgrades & patches.", "KeepingYourSolutionUpToDate_ABPSOLUTION_Description": "We regularly update all packages to the latest versions and test them before the stable release. When you update the ABP Framework, all its dependencies are upgraded to edge technology.", From a5078f3679eef81335a2bb991207cece448b893c Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 23 Aug 2023 14:57:37 +0300 Subject: [PATCH 39/92] Fix unreadable text color on blog --- .../blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml | 3 --- modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css | 3 --- 2 files changed, 6 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml index e24b1dd5af..9ac8ee9462 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml @@ -1,11 +1,8 @@ @page -@using System.Globalization @using Microsoft.Extensions.Localization @using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab -@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Utils @using Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers @using Volo.Abp.Users -@using Volo.Blogging @using Volo.Blogging.Areas.Blog.Helpers.TagHelpers @using Volo.Blogging.Localization @model Volo.Blogging.Pages.Members.IndexModel diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css index 668e566cba..3a2c2675c5 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css @@ -1,6 +1,3 @@ .post-desc { overflow-wrap: break-word; } -a:not(#all-posts-tab,#edit-profile-tab) { - color: unset!important; -} From ee54691a3a4dea081fdd528194a7952f61f8dc84 Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 23 Aug 2023 16:03:36 +0300 Subject: [PATCH 40/92] Add reCaptcha to comment edit section if it's enabled --- .../Public/Comments/UpdateCommentInput.cs | 4 ++++ .../CmsKitPublicCommentsController.cs | 14 ++++++++++++- .../Commenting/CommentingViewComponent.cs | 19 ++++++++++------- .../Components/Commenting/Default.cshtml | 18 ++++++++++++++++ .../Shared/Components/Commenting/default.js | 21 +++++++++++++------ 5 files changed, 62 insertions(+), 14 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs index a85783ee3f..ca273cd94a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs @@ -15,4 +15,8 @@ public class UpdateCommentInput : ExtensibleObject, IHasConcurrencyStamp public string Text { get; set; } public string ConcurrencyStamp { get; set; } + + public Guid? CaptchaToken { get; set; } + + public int CaptchaAnswer { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicCommentsController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicCommentsController.cs index 00851bce15..e5613cb625 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicCommentsController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicCommentsController.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; @@ -39,4 +40,15 @@ public class CmsKitPublicCommentsController : AbpController var dto = ObjectMapper.Map (input); await CommentPublicAppService.CreateAsync(input.EntityType, input.EntityId, dto); } + + [HttpPost] + public virtual async Task UpdateAsync(Guid id, [FromBody] UpdateCommentInput input) + { + if (CmsKitCommentOptions.IsRecaptchaEnabled && input.CaptchaToken.HasValue) + { + SimpleMathsCaptchaGenerator.Validate(input.CaptchaToken.Value, input.CaptchaAnswer); + } + + await CommentPublicAppService.UpdateAsync(id, input); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs index b1ea42397f..4452dc5eec 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs @@ -80,12 +80,7 @@ public class CommentingViewComponent : AbpViewComponent if (CmsKitCommentOptions.IsRecaptchaEnabled) { - CaptchaOutput = SimpleMathsCaptchaGenerator.Generate(new CaptchaOptions( - number1MinValue: 1, - number1MaxValue: 10, - number2MinValue: 5, - number2MaxValue: 15) - ); + CaptchaOutput = GetCaptcha(); viewModel.CaptchaImageBase64 = GetCaptchaImageBase64(CaptchaOutput.ImageBytes); } @@ -93,7 +88,17 @@ public class CommentingViewComponent : AbpViewComponent return View("~/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml", this); } - private string GetCaptchaImageBase64(byte[] bytes) + public CaptchaOutput GetCaptcha() + { + return SimpleMathsCaptchaGenerator.Generate(new CaptchaOptions( + number1MinValue: 1, + number1MaxValue: 10, + number2MinValue: 5, + number2MaxValue: 15) + ); + } + + public string GetCaptchaImageBase64(byte[] bytes) { return $"data:image/jpg;base64,{Convert.ToBase64String(bytes)}"; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml index 34ce468187..68ad72bc84 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml @@ -136,6 +136,24 @@
@L["MarkdownSupported"]
+ + @if (CmsKitCommentOptions.Value.IsRecaptchaEnabled) + { + var output = Model.GetCaptcha(); +
+ +
+
+ +
+
+ +
+ +
+
+ } + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js index c5c26672f1..75f3288982 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js @@ -111,14 +111,23 @@ $form.submit(function (e) { e.preventDefault(); let formAsObject = $form.serializeFormToObject(); - volo.cmsKit.public.comments.commentPublic.update( - formAsObject.id, - { + $.ajax({ + type: 'POST', + url: '/CmsKitPublicComments/Update/' + formAsObject.id, + contentType: 'application/json; charset=utf-8', + dataType: 'json', + data: JSON.stringify({ text: formAsObject.commentText, - concurrencyStamp: formAsObject.commentConcurrencyStamp + concurrencyStamp: formAsObject.commentConcurrencyStamp, + captchaToken: formAsObject.captchaId, + captchaAnswer: formAsObject.input?.captcha + }), + success: function () { + widgetManager.refresh($widget); + }, + error: function (data) { + abp.message.error(data.responseJSON.error.message); } - ).then(function () { - widgetManager.refresh($widget); }); }); }); From 80036d2c11989c14b6d6104afdf391ae54e91801 Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 23 Aug 2023 16:12:19 +0300 Subject: [PATCH 41/92] Update Default.cshtml --- .../Shared/Components/Commenting/Default.cshtml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml index 68ad72bc84..5d11f624f3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml @@ -39,7 +39,7 @@
- @L["MarkdownSupported"] + @L["MarkdownSupported"]
@if (CmsKitCommentOptions.Value.IsRecaptchaEnabled) @@ -127,14 +127,8 @@ -
-
- @L["Update"] - @L["Cancel"] -
-
- @L["MarkdownSupported"] + @L["MarkdownSupported"]
@if (CmsKitCommentOptions.Value.IsRecaptchaEnabled) @@ -153,7 +147,12 @@ } - +
+
+ @L["Update"] + @L["Cancel"] +
+
From ba96fa19bd361bdbcf6db56ea510ba026456708f Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 23 Aug 2023 17:24:37 +0300 Subject: [PATCH 42/92] Support exact match in search --- .../Elastic/ElasticDocumentFullSearch.cs | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs index 30ebf9a96f..c0a5b1295f 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs @@ -143,6 +143,27 @@ namespace Volo.Docs.Documents.FullSearch.Elastic CancellationToken cancellationToken = default) { ValidateElasticSearchEnabled(); + + FieldNameQueryBase query; + // if context starts with " or ends with " then we search for exact match + if (context.StartsWith("\"") && context.EndsWith("\"")) + { + context = context.Trim('"'); + + query = new MatchPhraseQuery + { + Query = context + }; + } + else + { + query = new MatchQuery + { + Query = context + }; + } + + query.Field = "content"; var request = new SearchRequest { @@ -152,11 +173,7 @@ namespace Volo.Docs.Documents.FullSearch.Elastic { Must = new QueryContainer[] { - new MatchQuery - { - Field = "content", - Query = context - } + query, }, Filter = new QueryContainer[] { From da3e2cdc32aade5b6e30813179d05ad561fc6c82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Aug 2023 17:37:54 +0300 Subject: [PATCH 43/92] Enhance the documentation part for readonly repositories. --- docs/en/Entity-Framework-Core.md | 8 ++++++++ docs/en/Repositories.md | 8 +++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/en/Entity-Framework-Core.md b/docs/en/Entity-Framework-Core.md index e2cfd21a05..1f8b9e22f0 100644 --- a/docs/en/Entity-Framework-Core.md +++ b/docs/en/Entity-Framework-Core.md @@ -594,6 +594,14 @@ Whenever you access to a property/collection, EF Core automatically performs an See also [lazy loading document](https://docs.microsoft.com/en-us/ef/core/querying/related-data/lazy) of the EF Core. +## Read-Only Repositories + +ABP Framework provides read-only [repository](Repositories.md) interfaces (`IReadOnlyRepository<...>` or `IReadOnlyBasicRepository<...>`) to explicitly indicate that your purpose is to query data, but not change it. If so, you can inject these interfaces into your services. + +Entity Framework Core read-only repository implementation uses [EF Core's No-Tracking feature](https://learn.microsoft.com/en-us/ef/core/querying/tracking#no-tracking-queries). That means the entities returned from the repository will not be tracked by the EF Core [change tracker](https://learn.microsoft.com/en-us/ef/core/change-tracking/), because it is expected that you won't update entities queried from a read-only repository. + +> This behavior works only if the repository object is injected with one of the read-only repository interfaces (`IReadOnlyRepository<...>` or `IReadOnlyBasicRepository<...>`). It won't work if you have injected a standard repository (e.g. `IRepository<...>`) then casted it to a read-only repository interface. + ## Access to the EF Core API In most cases, you want to hide EF Core APIs behind a repository (this is the main purpose of the repository pattern). However, if you want to access the `DbContext` instance over the repository, you can use `GetDbContext()` or `GetDbSet()` extension methods. Example: diff --git a/docs/en/Repositories.md b/docs/en/Repositories.md index 57115f903b..a93460bbdd 100644 --- a/docs/en/Repositories.md +++ b/docs/en/Repositories.md @@ -205,8 +205,6 @@ Methods: - `WithDetails()` 1 overload - `WithDetailsAsync()` 1 overload - - Where as the `IReadOnlyBasicRepository` provides the following methods: - `GetCountAsync()` @@ -217,11 +215,11 @@ They can all be seen as below: ![generic-repositories](images/generic-repositories.png) -#### Read Only Repositories behavior in EF Core +#### Read Only Repositories behavior in Entity Framework Core -EF Core will use No-tracking queries for read-only repositories. This means that the entities returned from the repository will not be tracked by the EF Core's change tracker. This is a performance optimization. +Entity Framework Core read-only repository implementation uses [EF Core's No-Tracking feature](https://learn.microsoft.com/en-us/ef/core/querying/tracking#no-tracking-queries). That means the entities returned from the repository will not be tracked by the EF Core [change tracker](https://learn.microsoft.com/en-us/ef/core/change-tracking/), because it is expected that you won't update entities queried from a read-only repository. If you need to track the entities, you can still uses [AsTracking()](https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.entityframeworkqueryableextensions.astracking) extension method. -However, if you need to track the entities, You can still add [AsTracking](https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.entityframeworkqueryableextensions.astracking) to make specific queries tracking. +> This behavior works only if the repository object is injected with one of the read-only repository interfaces (`IReadOnlyRepository<...>` or `IReadOnlyBasicRepository<...>`). It won't work if you have injected a standard repository (e.g. `IRepository<...>`) then casted it to a read-only repository interface. ### Generic Repository without a Primary Key From 547bb83667b7aedbe0559931514f774c39496d53 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 24 Aug 2023 09:35:52 +0800 Subject: [PATCH 44/92] Change some code base on review cmment. --- .../ServiceCollectionRepositoryExtensions.cs | 8 ++++++-- .../Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs | 3 +-- .../Domain/Repositories/RepositoryRegistration_Tests.cs | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs index ae85fbe24c..0a2fa66b77 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs @@ -84,11 +84,11 @@ public static class ServiceCollectionRepositoryExtensions bool replaceExisting, bool isReadOnlyRepository = false) { - var descriptor = ServiceDescriptor.Transient(serviceType, implementationType); + ServiceDescriptor descriptor; if (isReadOnlyRepository) { - services.AddTransient(implementationType); + services.TryAddTransient(implementationType); descriptor = ServiceDescriptor.Transient(serviceType, provider => { var repository = provider.GetRequiredService(implementationType); @@ -96,6 +96,10 @@ public static class ServiceCollectionRepositoryExtensions return repository; }); } + else + { + descriptor = ServiceDescriptor.Transient(serviceType, implementationType); + } if (replaceExisting) { diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs index 44d10b36ae..6de2aa3208 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs @@ -34,8 +34,7 @@ public abstract class BasicRepositoryBase : public ICancellationTokenProvider CancellationTokenProvider => LazyServiceProvider.LazyGetService(NullCancellationTokenProvider.Instance); - - public bool IsReadOnly { get; set; } = false; + public bool IsReadOnly { get; protected set; } protected BasicRepositoryBase() { diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs index c12909bc98..f9b59e2c94 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs @@ -407,7 +407,7 @@ public class RepositoryRegistration_Tests public class MyTestAggregateRootWithDefaultPkEmptyRepository : IMyTestAggregateRootWithDefaultPkEmptyRepository { - public bool IsReadOnly { get; set; } = false; + public bool IsReadOnly { get; set; } } public class TestDbContextRegistrationOptions : AbpCommonDbContextRegistrationOptions From fe95e8ddd0d236dc4003d96a1a90cb64f6f7c619 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 24 Aug 2023 10:29:35 +0800 Subject: [PATCH 45/92] `AsNoTracking` for `Queryable` instead of `DbContext`. --- .../EfCoreRepositoryExtensions.cs | 7 +++ .../EntityFrameworkCore/EfCoreRepository.cs | 48 ++++++------------- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs index 94dba628d7..614ba135ff 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Entities; @@ -44,4 +45,10 @@ public static class EfCoreRepositoryExtensions throw new ArgumentException("Given repository does not implement " + typeof(IEfCoreRepository).AssemblyQualifiedName, nameof(repository)); } + + public static IQueryable AsNoTrackingIf(this IQueryable queryable, bool condition) + where TEntity : class, IEntity + { + return condition ? queryable.AsNoTracking() : queryable; + } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 2f89ac2b8a..b881c07245 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -35,50 +35,30 @@ public class EfCoreRepository : RepositoryBase, IE [Obsolete("Use GetDbContextAsync() method.")] private TDbContext GetDbContext() { - TDbContext dbContext; // Multi-tenancy unaware entities should always use the host connection string if (!EntityHelper.IsMultiTenant()) { using (CurrentTenant.Change(null)) { - dbContext = _dbContextProvider.GetDbContext(); + return _dbContextProvider.GetDbContext(); } } - else - { - dbContext = _dbContextProvider.GetDbContext(); - } - - if (IsReadOnly) - { - dbContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; - } - return dbContext; + return _dbContextProvider.GetDbContext(); } - protected virtual async Task GetDbContextAsync() + protected virtual Task GetDbContextAsync() { - TDbContext dbContext; // Multi-tenancy unaware entities should always use the host connection string if (!EntityHelper.IsMultiTenant()) { using (CurrentTenant.Change(null)) { - dbContext = await _dbContextProvider.GetDbContextAsync(); + return _dbContextProvider.GetDbContextAsync(); } } - else - { - dbContext = await _dbContextProvider.GetDbContextAsync(); - } - - if (IsReadOnly) - { - dbContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; - } - return dbContext; + return _dbContextProvider.GetDbContextAsync(); } [Obsolete("Use GetDbSetAsync() method.")] @@ -261,19 +241,19 @@ public class EfCoreRepository : RepositoryBase, IE { return includeDetails ? await (await WithDetailsAsync()).ToListAsync(GetCancellationToken(cancellationToken)) - : await (await GetDbSetAsync()).ToListAsync(GetCancellationToken(cancellationToken)); + : await (await GetQueryableAsync()).ToListAsync(GetCancellationToken(cancellationToken)); } public async override Task> GetListAsync(Expression> predicate, bool includeDetails = false, CancellationToken cancellationToken = default) { return includeDetails ? await (await WithDetailsAsync()).Where(predicate).ToListAsync(GetCancellationToken(cancellationToken)) - : await (await GetDbSetAsync()).Where(predicate).ToListAsync(GetCancellationToken(cancellationToken)); + : await (await GetQueryableAsync()).Where(predicate).ToListAsync(GetCancellationToken(cancellationToken)); } public async override Task GetCountAsync(CancellationToken cancellationToken = default) { - return await (await GetDbSetAsync()).LongCountAsync(GetCancellationToken(cancellationToken)); + return await (await GetQueryableAsync()).LongCountAsync(GetCancellationToken(cancellationToken)); } public async override Task> GetPagedListAsync( @@ -285,7 +265,7 @@ public class EfCoreRepository : RepositoryBase, IE { var queryable = includeDetails ? await WithDetailsAsync() - : await GetDbSetAsync(); + : await GetQueryableAsync(); return await queryable .OrderByIf>(!sorting.IsNullOrWhiteSpace(), sorting) @@ -296,12 +276,12 @@ public class EfCoreRepository : RepositoryBase, IE [Obsolete("Use GetQueryableAsync method.")] protected override IQueryable GetQueryable() { - return DbSet.AsQueryable(); + return DbSet.AsQueryable().AsNoTrackingIf(IsReadOnly); } public async override Task> GetQueryableAsync() { - return (await GetDbSetAsync()).AsQueryable(); + return (await GetDbSetAsync()).AsQueryable().AsNoTrackingIf(IsReadOnly); } protected async override Task SaveChangesAsync(CancellationToken cancellationToken) @@ -318,7 +298,7 @@ public class EfCoreRepository : RepositoryBase, IE ? await (await WithDetailsAsync()) .Where(predicate) .SingleOrDefaultAsync(GetCancellationToken(cancellationToken)) - : await (await GetDbSetAsync()) + : await (await GetQueryableAsync()) .Where(predicate) .SingleOrDefaultAsync(GetCancellationToken(cancellationToken)); } @@ -493,7 +473,9 @@ public class EfCoreRepository : EfCoreRepository e.Id).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) - : await (await GetDbSetAsync()).FindAsync(new object[] { id }, GetCancellationToken(cancellationToken)); + : IsReadOnly + ? await (await GetQueryableAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) + : await (await GetDbSetAsync()).FindAsync(new object[] {id}, GetCancellationToken(cancellationToken)); } public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) From 3ab5048856bc486dceb50719960264000500259f Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 24 Aug 2023 14:30:44 +0800 Subject: [PATCH 46/92] Add a new unit test for `ReadOnlyRepository`. --- .../Repositories/ReadOnlyRepository_Tests.cs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs index bd073ce15a..393b54dbe3 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs @@ -2,6 +2,7 @@ using System; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; using Shouldly; using Volo.Abp.Data; using Volo.Abp.Domain.Repositories; @@ -9,6 +10,7 @@ using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.TestApp.Domain; using Volo.Abp.TestApp.EntityFrameworkCore; using Volo.Abp.TestApp.Testing; +using Volo.Abp.Uow; using Xunit; namespace Volo.Abp.EntityFrameworkCore.Repositories; @@ -72,4 +74,39 @@ public class ReadOnlyRepository_Tests : TestAppTestBase>(); + var readonlyRepository = GetRequiredService>(); + + await WithUnitOfWorkAsync(async () => + { + await repository.InsertAsync(new Person(Guid.NewGuid(), "people1", 18)); + await repository.InsertAsync(new Person(Guid.NewGuid(), "people2", 19)); + }); + + using (var uow = GetRequiredService().Begin()) + { + var p1 = await repository.FirstOrDefaultAsync(x => x.Name == "people1"); + p1.ShouldNotBeNull(); + p1.ChangeName("people1-updated"); + + var p2 = await readonlyRepository.FirstOrDefaultAsync(x => x.Name == "people2"); + p2.ShouldNotBeNull(); + p2.ChangeName("people2-updated"); + + await uow.CompleteAsync(); + } + + await WithUnitOfWorkAsync(async () => + { + (await repository.FirstOrDefaultAsync(x => x.Name == "people1")).ShouldBeNull(); + (await repository.FirstOrDefaultAsync(x => x.Name == "people1-updated")).ShouldNotBeNull(); + + (await readonlyRepository.FirstOrDefaultAsync(x => x.Name == "people2")).ShouldNotBeNull(); + (await readonlyRepository.FirstOrDefaultAsync(x => x.Name == "people2-updated")).ShouldBeNull(); + }); + } } From a7929b547f2bbabafe6ae949ce41e128f1a0cfe8 Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 24 Aug 2023 09:58:53 +0300 Subject: [PATCH 47/92] Update en.json --- .../AbpIoLocalization/Community/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index e6b3cf46f7..4cc1e56a1f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -189,6 +189,7 @@ "SeeMoreVideos": "See more videos", "DiscordPageTitle": "ABP Discord Community", "ViewVideo": "View Video", - "AbpCommunityTitleContent": "ABP Community - Open Source ABP Framework" + "AbpCommunityTitleContent": "ABP Community - Open Source ABP Framework", + "CommunitySlogan": "A unique community platform for ABP Lovers" } } From 2ea87aaaa0144f7c48db3eb85d0b16afb3597754 Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 24 Aug 2023 12:48:37 +0300 Subject: [PATCH 48/92] Update en.json --- .../AbpIoLocalization/Community/Localization/Resources/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 4cc1e56a1f..0377689bfc 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -190,6 +190,6 @@ "DiscordPageTitle": "ABP Discord Community", "ViewVideo": "View Video", "AbpCommunityTitleContent": "ABP Community - Open Source ABP Framework", - "CommunitySlogan": "A unique community platform for ABP Lovers" + "CommunitySlogan": "A unique community platform for ABP Lovers" } } From a84e80cb46d992203b4b8d1790445422b74a750f Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Thu, 24 Aug 2023 14:53:54 +0300 Subject: [PATCH 49/92] CMS: Should provide recaptcha token if it's enabled for newsletter --- .../CmsKitPublicCommentsController.cs | 19 ++++++++++++++++--- .../Controllers/CmsKitPublicControllerBase.cs | 12 ++++++++++++ .../CmsKitPublicGlobalResourcesController.cs | 2 +- .../CmsKitPublicWidgetsController.cs | 2 +- 4 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicControllerBase.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicCommentsController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicCommentsController.cs index e5613cb625..a2e2dea013 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicCommentsController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicCommentsController.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; +using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.ObjectMapping; using Volo.CmsKit.Comments; @@ -13,7 +14,7 @@ using Volo.CmsKit.Public.Web.Security.Captcha; namespace Volo.CmsKit.Public.Web.Controllers; //[Route("cms-kit/public-comments")] -public class CmsKitPublicCommentsController : AbpController +public class CmsKitPublicCommentsController : CmsKitPublicControllerBase { public ICommentPublicAppService CommentPublicAppService { get; } protected CmsKitCommentOptions CmsKitCommentOptions { get; } @@ -32,8 +33,10 @@ public class CmsKitPublicCommentsController : AbpController [HttpPost] public virtual async Task ValidateAsync([FromBody] CreateCommentWithParametersInput input) { - if (CmsKitCommentOptions.IsRecaptchaEnabled && input.CaptchaToken.HasValue) + if (CmsKitCommentOptions.IsRecaptchaEnabled) { + CheckCaptchaTokenNullity(input.CaptchaToken); + SimpleMathsCaptchaGenerator.Validate(input.CaptchaToken.Value, input.CaptchaAnswer); } @@ -44,11 +47,21 @@ public class CmsKitPublicCommentsController : AbpController [HttpPost] public virtual async Task UpdateAsync(Guid id, [FromBody] UpdateCommentInput input) { - if (CmsKitCommentOptions.IsRecaptchaEnabled && input.CaptchaToken.HasValue) + if (CmsKitCommentOptions.IsRecaptchaEnabled) { + CheckCaptchaTokenNullity(input.CaptchaToken); + SimpleMathsCaptchaGenerator.Validate(input.CaptchaToken.Value, input.CaptchaAnswer); } await CommentPublicAppService.UpdateAsync(id, input); } + + private void CheckCaptchaTokenNullity(Guid? captchaToken) + { + if (!captchaToken.HasValue) + { + throw new UserFriendlyException(L["CaptchaCodeMissingMessage"]); + } + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicControllerBase.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicControllerBase.cs new file mode 100644 index 0000000000..f22444036d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicControllerBase.cs @@ -0,0 +1,12 @@ +using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Localization; + +namespace Volo.CmsKit.Public.Web.Controllers; + +public abstract class CmsKitPublicControllerBase : AbpController +{ + public CmsKitPublicControllerBase() + { + LocalizationResource = typeof(CmsKitResource); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicGlobalResourcesController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicGlobalResourcesController.cs index 115dfd3fcc..eb4356e8b9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicGlobalResourcesController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicGlobalResourcesController.cs @@ -11,7 +11,7 @@ using Volo.CmsKit.Public.GlobalResources; namespace Volo.CmsKit.Public.Web.Controllers; [Route("cms-kit/global-resources")] -public class CmsKitPublicGlobalResourcesController: AbpController +public class CmsKitPublicGlobalResourcesController : CmsKitPublicControllerBase { private readonly IGlobalResourcePublicAppService _globalResourcePublicAppService; private readonly IDistributedCache _resourceCache; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicWidgetsController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicWidgetsController.cs index c73fba95e7..67a9d64f67 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicWidgetsController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicWidgetsController.cs @@ -7,7 +7,7 @@ using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection; namespace Volo.CmsKit.Public.Web.Controllers; -public class CmsKitPublicWidgetsController : AbpController +public class CmsKitPublicWidgetsController : CmsKitPublicControllerBase { public Task ReactionSelection(string entityType, string entityId) { From 01d2cf3a8bee56ecd3b4846a4cbae7ed18f7bc53 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 27 Aug 2023 14:02:24 +0800 Subject: [PATCH 50/92] Use `IsChangeTrackingEnabled` to replace `IsReadOnly`. --- .../ServiceCollectionRepositoryExtensions.cs | 2 +- .../Repositories/BasicRepositoryBase.cs | 8 +++- .../Abp/Domain/Repositories/IRepository.cs | 2 +- .../Repositories/RepositoryExtensions.cs | 20 +++++++++ .../EntityFrameworkCore/EfCoreRepository.cs | 38 +++++++---------- .../RepositoryRegistration_Tests.cs | 2 +- .../Repositories/ReadOnlyRepository_Tests.cs | 41 +++++++++++++------ 7 files changed, 73 insertions(+), 40 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs index 0a2fa66b77..a877c673f1 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs @@ -92,7 +92,7 @@ public static class ServiceCollectionRepositoryExtensions descriptor = ServiceDescriptor.Transient(serviceType, provider => { var repository = provider.GetRequiredService(implementationType); - ObjectHelper.TrySetProperty(repository.As(), x => x.IsReadOnly, _ => true); + ObjectHelper.TrySetProperty(repository.As(), x => x.IsChangeTrackingEnabled, _ => false); return repository; }); } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs index 6de2aa3208..8257c4c8af 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs @@ -4,6 +4,8 @@ using System.Collections.Generic; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Entities; @@ -34,7 +36,11 @@ public abstract class BasicRepositoryBase : public ICancellationTokenProvider CancellationTokenProvider => LazyServiceProvider.LazyGetService(NullCancellationTokenProvider.Instance); - public bool IsReadOnly { get; protected set; } + public ILoggerFactory? LoggerFactory => LazyServiceProvider.LazyGetService(); + + public ILogger Logger => LazyServiceProvider.LazyGetService(provider => LoggerFactory?.CreateLogger(GetType().FullName!) ?? NullLogger.Instance); + + public bool IsChangeTrackingEnabled { get; protected set; } = true; protected BasicRepositoryBase() { diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs index d50a881c28..fda0c7ed94 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Domain.Repositories; ///
public interface IRepository { - bool IsReadOnly { get; } + bool IsChangeTrackingEnabled { get; } } public interface IRepository : IReadOnlyRepository, IBasicRepository diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs index cbebf62196..9ae120d2dc 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs @@ -145,6 +145,26 @@ public static class RepositoryExtensions } } + public static IDisposable DisableTracking(this IRepository repository) + { + return Tracking(repository, false); + } + + public static IDisposable EnableTracking(this IRepository repository) + { + return Tracking(repository, true); + } + + private static IDisposable Tracking(this IRepository repository, bool enabled) + { + var previous = repository.IsChangeTrackingEnabled; + ObjectHelper.TrySetProperty(ProxyHelper.UnProxy(repository).As(), x => x.IsChangeTrackingEnabled, _ => enabled); + return new DisposeAction(_ => + { + ObjectHelper.TrySetProperty(ProxyHelper.UnProxy(repository).As(), x => x.IsChangeTrackingEnabled, _ => previous); + }, repository); + } + private static IUnitOfWorkManager GetUnitOfWorkManager( this IBasicRepository repository, [CallerMemberName] string callingMethodName = nameof(GetUnitOfWorkManager) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index b881c07245..aa0b10913d 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -9,6 +9,7 @@ using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.Logging; using Volo.Abp.Data; using Volo.Abp.Domain.Entities; using Volo.Abp.EntityFrameworkCore; @@ -107,7 +108,7 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckReadOnly(); + CheckChangeTracking(); CheckAndSetId(entity); var dbContext = await GetDbContextAsync(); @@ -124,7 +125,7 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task InsertManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckReadOnly(); + CheckChangeTracking(); var entityArray = entities.ToArray(); var dbContext = await GetDbContextAsync(); cancellationToken = GetCancellationToken(cancellationToken); @@ -155,7 +156,7 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckReadOnly(); + CheckChangeTracking(); var dbContext = await GetDbContextAsync(); dbContext.Attach(entity); @@ -172,7 +173,7 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task UpdateManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckReadOnly(); + CheckChangeTracking(); cancellationToken = GetCancellationToken(cancellationToken); if (BulkOperationProvider != null) @@ -199,7 +200,7 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckReadOnly(); + CheckChangeTracking(); var dbContext = await GetDbContextAsync(); dbContext.Set().Remove(entity); @@ -212,7 +213,7 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task DeleteManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckReadOnly(); + CheckChangeTracking(); cancellationToken = GetCancellationToken(cancellationToken); if (BulkOperationProvider != null) @@ -276,12 +277,12 @@ public class EfCoreRepository : RepositoryBase, IE [Obsolete("Use GetQueryableAsync method.")] protected override IQueryable GetQueryable() { - return DbSet.AsQueryable().AsNoTrackingIf(IsReadOnly); + return DbSet.AsQueryable().AsNoTrackingIf(!IsChangeTrackingEnabled); } public async override Task> GetQueryableAsync() { - return (await GetDbSetAsync()).AsQueryable().AsNoTrackingIf(IsReadOnly); + return (await GetDbSetAsync()).AsQueryable().AsNoTrackingIf(!IsChangeTrackingEnabled); } protected async override Task SaveChangesAsync(CancellationToken cancellationToken) @@ -305,7 +306,7 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task DeleteAsync(Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckReadOnly(); + CheckChangeTracking(); var dbContext = await GetDbContextAsync(); var dbSet = dbContext.Set(); @@ -323,7 +324,6 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task DeleteDirectAsync(Expression> predicate, CancellationToken cancellationToken = default) { - CheckReadOnly(); var dbContext = await GetDbContextAsync(); var dbSet = dbContext.Set(); await dbSet.Where(predicate).ExecuteDeleteAsync(GetCancellationToken(cancellationToken)); @@ -428,18 +428,12 @@ public class EfCoreRepository : RepositoryBase, IE ); } - protected virtual void CheckReadOnly() + + protected virtual void CheckChangeTracking() { - if (IsReadOnly) + if (!IsChangeTrackingEnabled) { - throw new AbpRepositoryIsReadOnlyException($"Can not call " + - $"{nameof(InsertAsync)}, " + - $"{nameof(InsertManyAsync)}, " + - $"{nameof(UpdateAsync)}, " + - $"{nameof(UpdateManyAsync)}, " + - $"{nameof(DeleteAsync)}, " + - $"{nameof(DeleteManyAsync)}, " + - $"{nameof(DeleteDirectAsync)} methods on a read-only repository!"); + Logger.LogWarning("This repository has disabled change tracking. Your changes may not be saved!"); } } } @@ -473,14 +467,13 @@ public class EfCoreRepository : EfCoreRepository e.Id).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) - : IsReadOnly + : !IsChangeTrackingEnabled ? await (await GetQueryableAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) : await (await GetDbSetAsync()).FindAsync(new object[] {id}, GetCancellationToken(cancellationToken)); } public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckReadOnly(); var entity = await FindAsync(id, cancellationToken: cancellationToken); if (entity == null) { @@ -492,7 +485,6 @@ public class EfCoreRepository : EfCoreRepository ids, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckReadOnly(); cancellationToken = GetCancellationToken(cancellationToken); var entities = await (await GetDbSetAsync()).Where(x => ids.Contains(x.Id)).ToListAsync(cancellationToken); diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs index f9b59e2c94..00be2f9522 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs @@ -407,7 +407,7 @@ public class RepositoryRegistration_Tests public class MyTestAggregateRootWithDefaultPkEmptyRepository : IMyTestAggregateRootWithDefaultPkEmptyRepository { - public bool IsReadOnly { get; set; } + public bool IsChangeTrackingEnabled { get; set; } } public class TestDbContextRegistrationOptions : AbpCommonDbContextRegistrationOptions diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs index 393b54dbe3..6213a6e114 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/ReadOnlyRepository_Tests.cs @@ -2,13 +2,9 @@ using System; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; using Shouldly; -using Volo.Abp.Data; using Volo.Abp.Domain.Repositories; -using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.TestApp.Domain; -using Volo.Abp.TestApp.EntityFrameworkCore; using Volo.Abp.TestApp.Testing; using Volo.Abp.Uow; using Xunit; @@ -55,23 +51,42 @@ public class ReadOnlyRepository_Tests : TestAppTestBase>(); + await WithUnitOfWorkAsync(async () => { - var repository = GetRequiredService>(); - await repository.ToEfCoreRepository().InsertAsync(new Person(Guid.NewGuid(), "test", 18)); - var person = await repository.ToEfCoreRepository().FirstOrDefaultAsync(); - person.ShouldNotBeNull(); + await repository.InsertAsync(new Person(Guid.NewGuid(), "people1", 18)); + await repository.InsertAsync(new Person(Guid.NewGuid(), "people2", 19)); + await repository.InsertAsync(new Person(Guid.NewGuid(), "people3", 20)); + await repository.InsertAsync(new Person(Guid.NewGuid(), "people4", 21)); }); await WithUnitOfWorkAsync(async () => { - await Assert.ThrowsAsync(async () => + var db = await repository.GetDbContextAsync(); + db.ChangeTracker.Entries().Count().ShouldBe(0); + using (repository.DisableTracking()) { - var readonlyRepository = GetRequiredService>(); - await readonlyRepository.ToEfCoreRepository().As>().InsertAsync(new Person(Guid.NewGuid(), "test readonly", 18)); - }); + var p1 = await repository.FindAsync(x => x.Name == "people1"); + p1.ShouldNotBeNull(); + db.ChangeTracker.Entries().Count().ShouldBe(0); + } + + var p2 = await repository.FindAsync(x => x.Name == "people2"); + p2.ShouldNotBeNull(); + db.ChangeTracker.Entries().Count().ShouldBe(1); + + repository.DisableTracking(); + var p3 = await repository.FindAsync(x => x.Name == "people3"); + p3.ShouldNotBeNull(); + db.ChangeTracker.Entries().Count().ShouldBe(1); + + repository.EnableTracking(); + var p4 = await repository.FindAsync(x => x.Name == "people4"); + p4.ShouldNotBeNull(); + db.ChangeTracker.Entries().Count().ShouldBe(2); }); } From eb9b95471792d8350001215d5a67c229729f488c Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 27 Aug 2023 17:18:17 +0800 Subject: [PATCH 51/92] Add `RepositoryInterceptor`. --- .../Volo/Abp/Domain/AbpDddDomainModule.cs | 1 + .../Repositories/BasicRepositoryBase.cs | 22 +- .../DisableEntityChangeTrackingAttribute.cs | 12 + .../EnableEntityChangeTrackingAttribute.cs | 12 + .../EntityChangeTrackingAttribute.cs | 14 ++ .../EntityChangeTrackingProvider.cs | 19 ++ .../IEntityChangeTrackingProvider.cs | 10 + .../Abp/Domain/Repositories/IRepository.cs | 2 +- .../Domain/Repositories/RepositoryHelper.cs | 52 +++++ .../Repositories/RepositoryInterceptor.cs | 29 +++ .../RepositoryInterceptorRegistrar.cs | 22 ++ .../EntityFrameworkCore/EfCoreRepository.cs | 8 +- .../RepositoryRegistration_Tests.cs | 2 +- .../RepositoryInterceptor_Tests.cs | 211 ++++++++++++++++++ 14 files changed, 409 insertions(+), 7 deletions(-) create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingProvider.cs create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IEntityChangeTrackingProvider.cs create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptorRegistrar.cs create mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/RepositoryInterceptor_Tests.cs diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs index 536e31e51f..2e67c42820 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs @@ -30,5 +30,6 @@ public class AbpDddDomainModule : AbpModule public override void PreConfigureServices(ServiceConfigurationContext context) { context.Services.AddConventionalRegistrar(new AbpRepositoryConventionalRegistrar()); + context.Services.OnRegistered(RepositoryInterceptorRegistrar.RegisterIfNeeded); } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs index 8257c4c8af..cd85acce50 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs @@ -40,7 +40,9 @@ public abstract class BasicRepositoryBase : public ILogger Logger => LazyServiceProvider.LazyGetService(provider => LoggerFactory?.CreateLogger(GetType().FullName!) ?? NullLogger.Instance); - public bool IsChangeTrackingEnabled { get; protected set; } = true; + public IEntityChangeTrackingProvider EntityChangeTrackingProvider => LazyServiceProvider.LazyGetRequiredService(); + + public bool? IsChangeTrackingEnabled { get; protected set; } protected BasicRepositoryBase() { @@ -114,6 +116,24 @@ public abstract class BasicRepositoryBase : { return CancellationTokenProvider.FallbackToProvider(preferredValue); } + + protected virtual bool ShouldTrackingEntityChange() + { + // If IsChangeTrackingEnabled is set, it has the highest priority. This generally means the repository is read-only. + if (IsChangeTrackingEnabled.HasValue) + { + return IsChangeTrackingEnabled.Value; + } + + // If Interface/Class/Method has Enable/DisableEntityChangeTrackingAttribute, it has the second highest priority. + if (EntityChangeTrackingProvider.Enabled.HasValue) + { + return EntityChangeTrackingProvider.Enabled.Value; + } + + // Default behavior is tracking entity change. + return true; + } } public abstract class BasicRepositoryBase : BasicRepositoryBase, IBasicRepository diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs new file mode 100644 index 0000000000..d6a73cba32 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs @@ -0,0 +1,12 @@ +using System; + +namespace Volo.Abp.Domain.Repositories; + +[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)] +public class DisableEntityChangeTrackingAttribute : EntityChangeTrackingAttribute +{ + public DisableEntityChangeTrackingAttribute() + : base(false) + { + } +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs new file mode 100644 index 0000000000..a94df978fb --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs @@ -0,0 +1,12 @@ +using System; + +namespace Volo.Abp.Domain.Repositories; + +[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)] +public class EnableEntityChangeTrackingAttribute : EntityChangeTrackingAttribute +{ + public EnableEntityChangeTrackingAttribute() + : base(true) + { + } +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs new file mode 100644 index 0000000000..0bb6ca82e4 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs @@ -0,0 +1,14 @@ +using System; + +namespace Volo.Abp.Domain.Repositories; + +[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)] +public class EntityChangeTrackingAttribute : Attribute +{ + public bool Enabled { get; set; } + + public EntityChangeTrackingAttribute(bool enabled) + { + Enabled = enabled; + } +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingProvider.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingProvider.cs new file mode 100644 index 0000000000..19c10e9a3f --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingProvider.cs @@ -0,0 +1,19 @@ +using System; +using System.Threading; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Domain.Repositories; + +public class EntityChangeTrackingProvider : IEntityChangeTrackingProvider, ISingletonDependency +{ + public bool? Enabled => _current.Value; + + private readonly AsyncLocal _current = new AsyncLocal(); + + public IDisposable Change(bool? enabled) + { + var previousValue = Enabled; + _current.Value = enabled; + return new DisposeAction(() => _current.Value = previousValue); + } +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IEntityChangeTrackingProvider.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IEntityChangeTrackingProvider.cs new file mode 100644 index 0000000000..f1db1584fa --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IEntityChangeTrackingProvider.cs @@ -0,0 +1,10 @@ +using System; + +namespace Volo.Abp.Domain.Repositories; + +public interface IEntityChangeTrackingProvider +{ + bool? Enabled { get; } + + IDisposable Change(bool? enabled); +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs index fda0c7ed94..dc39255b25 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Domain.Repositories; ///
public interface IRepository { - bool IsChangeTrackingEnabled { get; } + bool? IsChangeTrackingEnabled { get; } } public interface IRepository : IReadOnlyRepository, IBasicRepository diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs new file mode 100644 index 0000000000..014970c527 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs @@ -0,0 +1,52 @@ +using System.Linq; +using System.Reflection; +using JetBrains.Annotations; + +namespace Volo.Abp.Domain.Repositories; + +public static class RepositoryHelper +{ + public static bool IsEntityChangeTrackingType(TypeInfo implementationType) + { + return HasEntityChangeTrackingAttribute(implementationType) || AnyMethodHasEntityChangeTrackingAttribute(implementationType); + } + + public static bool IsEntityChangeTrackingMethod([NotNull] MethodInfo methodInfo, out EntityChangeTrackingAttribute? entityChangeTrackingAttribute) + { + Check.NotNull(methodInfo, nameof(methodInfo)); + + //Method declaration + var attrs = methodInfo.GetCustomAttributes(true).OfType().ToArray(); + if (attrs.Any()) + { + entityChangeTrackingAttribute = attrs.First(); + return true; + } + + if (methodInfo.DeclaringType != null) + { + //Class declaration + attrs = methodInfo.DeclaringType.GetTypeInfo().GetCustomAttributes(true).OfType().ToArray(); + if (attrs.Any()) + { + entityChangeTrackingAttribute = attrs.First(); + return true; + } + } + + entityChangeTrackingAttribute = null; + return false; + } + + private static bool AnyMethodHasEntityChangeTrackingAttribute(TypeInfo implementationType) + { + return implementationType + .GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Any(HasEntityChangeTrackingAttribute); + } + + private static bool HasEntityChangeTrackingAttribute(MemberInfo methodInfo) + { + return methodInfo.IsDefined(typeof(EntityChangeTrackingAttribute), true); + } +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs new file mode 100644 index 0000000000..f322d1e87d --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.DynamicProxy; + +namespace Volo.Abp.Domain.Repositories; + +public class RepositoryInterceptor : AbpInterceptor, ITransientDependency +{ + private readonly IEntityChangeTrackingProvider _entityChangeTrackingProvider; + + public RepositoryInterceptor(IEntityChangeTrackingProvider entityChangeTrackingProvider) + { + _entityChangeTrackingProvider = entityChangeTrackingProvider; + } + + public async override Task InterceptAsync(IAbpMethodInvocation invocation) + { + if (!RepositoryHelper.IsEntityChangeTrackingMethod(invocation.Method, out var changeTrackingAttribute)) + { + await invocation.ProceedAsync(); + return; + } + + using (_entityChangeTrackingProvider.Change(changeTrackingAttribute?.Enabled)) + { + await invocation.ProceedAsync(); + } + } +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptorRegistrar.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptorRegistrar.cs new file mode 100644 index 0000000000..538fa72774 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptorRegistrar.cs @@ -0,0 +1,22 @@ +using System; +using System.Reflection; +using Volo.Abp.DependencyInjection; +using Volo.Abp.DynamicProxy; + +namespace Volo.Abp.Domain.Repositories; + +public class RepositoryInterceptorRegistrar +{ + public static void RegisterIfNeeded(IOnServiceRegistredContext context) + { + if (ShouldIntercept(context.ImplementationType)) + { + context.Interceptors.TryAdd(); + } + } + + private static bool ShouldIntercept(Type type) + { + return !DynamicProxyIgnoreTypes.Contains(type) && RepositoryHelper.IsEntityChangeTrackingType(type.GetTypeInfo()); + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index aa0b10913d..ff40c8a60b 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -277,12 +277,12 @@ public class EfCoreRepository : RepositoryBase, IE [Obsolete("Use GetQueryableAsync method.")] protected override IQueryable GetQueryable() { - return DbSet.AsQueryable().AsNoTrackingIf(!IsChangeTrackingEnabled); + return DbSet.AsQueryable().AsNoTrackingIf(!ShouldTrackingEntityChange()); } public async override Task> GetQueryableAsync() { - return (await GetDbSetAsync()).AsQueryable().AsNoTrackingIf(!IsChangeTrackingEnabled); + return (await GetDbSetAsync()).AsQueryable().AsNoTrackingIf(!ShouldTrackingEntityChange()); } protected async override Task SaveChangesAsync(CancellationToken cancellationToken) @@ -431,7 +431,7 @@ public class EfCoreRepository : RepositoryBase, IE protected virtual void CheckChangeTracking() { - if (!IsChangeTrackingEnabled) + if (!ShouldTrackingEntityChange()) { Logger.LogWarning("This repository has disabled change tracking. Your changes may not be saved!"); } @@ -467,7 +467,7 @@ public class EfCoreRepository : EfCoreRepository e.Id).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) - : !IsChangeTrackingEnabled + : !ShouldTrackingEntityChange() ? await (await GetQueryableAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) : await (await GetDbSetAsync()).FindAsync(new object[] {id}, GetCancellationToken(cancellationToken)); } diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs index 00be2f9522..ca98017e0a 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs @@ -407,7 +407,7 @@ public class RepositoryRegistration_Tests public class MyTestAggregateRootWithDefaultPkEmptyRepository : IMyTestAggregateRootWithDefaultPkEmptyRepository { - public bool IsChangeTrackingEnabled { get; set; } + public bool? IsChangeTrackingEnabled { get; set; } } public class TestDbContextRegistrationOptions : AbpCommonDbContextRegistrationOptions diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/RepositoryInterceptor_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/RepositoryInterceptor_Tests.cs new file mode 100644 index 0000000000..8230a6ec7e --- /dev/null +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/RepositoryInterceptor_Tests.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.TestApp.Domain; +using Volo.Abp.TestApp.Testing; +using Xunit; + +namespace Volo.Abp.EntityFrameworkCore.Repositories; + +public class RepositoryInterceptor_Tests : TestAppTestBase +{ + [Fact] + public async Task ReadOnly_Repository_Should_Not_Track_Entities() + { + await AddSomePeopleAsync(); + + var readOnlyRepository = GetRequiredService>(); + + await WithUnitOfWorkAsync(async () => + { + var db = await readOnlyRepository.GetDbContextAsync(); + db.ChangeTracker.Entries().Count().ShouldBe(0); + + var service = GetRequiredService(); + var list = await service.GetPeoplesAsync(); + list.Count.ShouldBeGreaterThan(0); + + // RepositoryInterceptor always not track entities + db.ChangeTracker.Entries().Count().ShouldBe(0); + }); + } + + [Fact] + public async Task RepositoryInterceptor_Test() + { + await AddSomePeopleAsync(); + + var repository = GetRequiredService>(); + + await WithUnitOfWorkAsync(async () => + { + var service = GetRequiredService(); + var db = await repository.GetDbContextAsync(); + db.ChangeTracker.Entries().Count().ShouldBe(0); + + var list = await service.GetPeoplesAsync(); + list.Count.ShouldBeGreaterThan(0); + + db.ChangeTracker.Entries().Count().ShouldBe(1); // Track one entity from GetPeopleAsync + }); + + await WithUnitOfWorkAsync(async () => + { + var service = GetRequiredService(); + var db = await repository.GetDbContextAsync(); + db.ChangeTracker.Entries().Count().ShouldBe(0); + + var list = await service.GetPeoplesAsync(); + list.Count.ShouldBeGreaterThan(0); + + db.ChangeTracker.Entries().Count().ShouldBe(1); // Track one entity from GetPeoplesAsync + }); + + await WithUnitOfWorkAsync(async () => + { + var service = GetRequiredService(); + var db = await repository.GetDbContextAsync(); + db.ChangeTracker.Entries().Count().ShouldBe(0); + + var list = await service.GetPeoplesAsync(); + list.Count.ShouldBeGreaterThan(0); + + db.ChangeTracker.Entries().Count().ShouldBe(1); // Track one entity from GetPeoplesAsync + }); + + await WithUnitOfWorkAsync(async () => + { + var service = GetRequiredService(); + var db = await repository.GetDbContextAsync(); + db.ChangeTracker.Entries().Count().ShouldBe(0); + + var entityChangeTrackingProvider = GetRequiredService(); + // Disable entity change tracking + using (entityChangeTrackingProvider.Change(false)) + { + var list = await service.GetPeoplesAsync(); + list.Count.ShouldBeGreaterThan(0); + db.ChangeTracker.Entries().Count().ShouldBe(0); + } + }); + } + + private async Task AddSomePeopleAsync() + { + var repository = GetRequiredService>(); + await repository.InsertAsync(new Person(Guid.NewGuid(), "people1", 18)); + await repository.InsertAsync(new Person(Guid.NewGuid(), "people2", 19)); + await repository.InsertAsync(new Person(Guid.NewGuid(), "people3", 20)); + await repository.InsertAsync(new Person(Guid.NewGuid(), "people4", 21)); + } +} + +public class MyService : ITransientDependency +{ + private readonly IRepository _repository; + + public MyService(IRepository repository) + { + _repository = repository; + } + + [DisableEntityChangeTracking] + public virtual async Task> GetPeoplesAsync() + { + await GetPeopleAsync(); + return await _repository.GetListAsync(); + } + + [EnableEntityChangeTracking] + public virtual async Task GetPeopleAsync() + { + var p1 = await _repository.FindAsync(x => x.Name == "people1"); + return p1; + } +} + +public class MyReadOnlyService : MyService +{ + public MyReadOnlyService(IReadOnlyRepository repository) + : base(repository.As>()) + { + } +} + + +[EnableEntityChangeTracking] +public class MyServiceEnableEntityChangeTracking : ITransientDependency +{ + private readonly IRepository _repository; + + public MyServiceEnableEntityChangeTracking(IRepository repository) + { + _repository = repository; + } + + public virtual async Task> GetPeoplesAsync() + { + var p1 = await GetPeopleAsync(); + var p2 = await _repository.FindAsync(x => x.Name == "people2"); + + return new List {p1, p2}; + } + + [DisableEntityChangeTracking] + public virtual async Task GetPeopleAsync() + { + var p1 = await _repository.FindAsync(x => x.Name == "people1"); + return p1; + } +} + + +[EnableEntityChangeTracking] +public interface IMyServiceEnableEntityChangeTrackingOnInterface +{ + +} + +public class MyServiceEnableEntityChangeTrackingOnInterface : IMyServiceEnableEntityChangeTrackingOnInterface, ITransientDependency +{ + private readonly IRepository _repository; + + public MyServiceEnableEntityChangeTrackingOnInterface(IRepository repository) + { + _repository = repository; + } + + public virtual async Task> GetPeoplesAsync() + { + var p1 = await GetPeopleAsync(); + var p2 = await _repository.FindAsync(x => x.Name == "people2"); + + return new List {p1, p2}; + } + + [DisableEntityChangeTracking] + public virtual async Task GetPeopleAsync() + { + var p1 = await _repository.FindAsync(x => x.Name == "people1"); + return p1; + } +} + +public class MyServiceChangeTrackingByEntityChangeTrackingProvider : ITransientDependency +{ + private readonly IRepository _repository; + + public MyServiceChangeTrackingByEntityChangeTrackingProvider(IRepository repository) + { + _repository = repository; + } + + public virtual async Task> GetPeoplesAsync() + { + return await _repository.GetListAsync(); + } +} From b6c41c9f28963f1b7d271f7066db3ad3ff1475ab Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 28 Aug 2023 10:53:28 +0800 Subject: [PATCH 52/92] Delete AbpRepositoryIsReadOnlyException.cs --- .../Data/AbpRepositoryIsReadOnlyException.cs | 22 ------------------- 1 file changed, 22 deletions(-) delete mode 100644 framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpRepositoryIsReadOnlyException.cs diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpRepositoryIsReadOnlyException.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpRepositoryIsReadOnlyException.cs deleted file mode 100644 index 6c648fd022..0000000000 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpRepositoryIsReadOnlyException.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace Volo.Abp.Data; - -public class AbpRepositoryIsReadOnlyException : AbpException -{ - /// - /// Creates a new object. - /// - public AbpRepositoryIsReadOnlyException() - { - - } - - /// - /// Creates a new object. - /// - /// Exception message - public AbpRepositoryIsReadOnlyException(string message) - : base(message) - { - - } -} From 0329dd29c1881a438a9a59c9df317262359cb9c0 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 29 Aug 2023 11:00:32 +0800 Subject: [PATCH 53/92] Using `WebApplicationFactory` as web unit test base class. Resolve #17484 --- .../Volo.Abp.AspNetCore.TestBase.csproj | 1 + ...WebApplicationFactoryIntegratedTestBase.cs | 87 +++++++++++++++++++ .../Volo/Abp/AspNetCore/App/Program.cs | 10 +++ .../Volo/Abp/AspNetCore/App/Startup.cs | 19 ---- .../AspNetCoreMultiTenancyTestBase.cs | 2 +- ...reMultiTenancy_WithDomainResolver_Tests.cs | 23 +++-- ...ltiTenancy_Without_DomainResolver_Tests.cs | 15 ++-- .../Mvc/AbpAspNetCoreMvcTestModule.cs | 7 ++ .../AspNetCore/Mvc/AspNetCoreMvcTestBase.cs | 5 +- ...tIntegrationServiceTestController_Tests.cs | 6 +- .../Mvc/Auditing/AuditTestController_Tests.cs | 4 +- .../Mvc/Auditing/AuditTestPage_Tests.cs | 4 +- .../ReplaceBuiltInController_Tests.cs | 2 +- ...horizationExceptionTestController_Tests.cs | 4 +- ...AbpAuthorizationExceptionTestPage_Tests.cs | 4 +- .../ExceptionTestController_Tests.cs | 4 +- .../ExceptionTestPage_Tests.cs | 4 +- .../Mvc/Json/JsonResultController_Tests.cs | 4 +- .../Mvc/Json/JsonSerializer_Tests.cs | 4 +- .../LocalizationTestController_Tests.cs | 2 +- .../ModelBindingController_Tests.cs | 8 +- .../Volo/Abp/AspNetCore/Mvc/Program.cs | 48 ++++++++++ .../SecurityHeadersTestController_Tests.cs | 4 +- .../Volo/Abp/AspNetCore/Mvc/Startup.cs | 56 ------------ ...WorkMiddleware_Exception_Rollback_Tests.cs | 2 +- ...WorkPageFilter_Exception_Rollback_Tests.cs | 2 +- .../ValidationTestController_Tests.cs | 4 +- .../Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs | 2 +- .../Volo/Abp/AspNetCore/Mvc/UI/Program.cs | 10 +++ .../Volo/Abp/AspNetCore/Mvc/UI/Startup.cs | 20 ----- .../Program.cs | 27 ++---- .../AbpAspNetCoreMvcUiThemeSharedTestBase.cs | 2 +- ...AbpAspNetCoreMvcUiThemeSharedTestModule.cs | 3 - .../Shared/PageToolbars/PageToolbar_Tests.cs | 2 +- .../AspNetCore/Mvc/UI/Theme/Shared/Startup.cs | 18 ---- .../UI/Theme/Shared/Toolbars/Toolbar_Tests.cs | 4 +- .../AspNetCoreMvcVersioningTestBase.cs | 2 +- .../Abp/AspNetCore/Mvc/Versioning/Program.cs | 10 +++ .../Abp/AspNetCore/Mvc/Versioning/Startup.cs | 20 ----- .../AspNetCore/App/AbpSerilogTestModule.cs | 9 ++ .../Volo/Abp/AspNetCore/App/Program.cs | 10 +++ .../Volo/Abp/AspNetCore/App/Startup.cs | 19 ---- .../AspNetCore/Serilog/AbpSerilogTestBase.cs | 8 +- .../Serilog/Serilog_Enrichers_Tests.cs | 14 ++- .../Abp/AspNetCore/AbpAspNetCoreTestBase.cs | 7 +- .../AspNetCore/AbpHostEnvironment_Tests.cs | 20 ++--- .../Volo/Abp/AspNetCore/Program.cs | 13 +++ .../Volo/Abp/AspNetCore/Startup.cs | 20 ----- .../WebApplicationBuilderExtensions.cs | 21 +++++ .../Volo/Abp/Http/AbpHttpClientTestBase.cs | 2 +- .../Volo/Abp/Http/AbpHttpClientTestModule.cs | 8 ++ ...lientProxy_AbpRemoteCallException_Tests.cs | 2 +- .../Volo/Abp/Http/Program.cs | 10 +++ .../Volo/Abp/Http/Startup.cs | 18 ---- 54 files changed, 328 insertions(+), 308 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreWebApplicationFactoryIntegratedTestBase.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Program.cs delete mode 100644 framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Startup.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs delete mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Startup.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Program.cs delete mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs delete mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/Startup.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Program.cs delete mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Startup.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Program.cs delete mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Program.cs delete mode 100644 framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Startup.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/WebApplicationBuilderExtensions.cs create mode 100644 framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Program.cs delete mode 100644 framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Startup.cs diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj index a6f6a55f39..5bf1cc54aa 100644 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj @@ -28,6 +28,7 @@ + diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreWebApplicationFactoryIntegratedTestBase.cs b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreWebApplicationFactoryIntegratedTestBase.cs new file mode 100644 index 0000000000..11d27221df --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreWebApplicationFactoryIntegratedTestBase.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using Microsoft.AspNetCore.Mvc.Testing; +using Microsoft.AspNetCore.Routing; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Volo.Abp.AspNetCore.TestBase; + +public abstract class AbpAspNetCoreWebApplicationFactoryIntegratedTestBase : WebApplicationFactory + where TProgram : class +{ + protected HttpClient Client { get; set; } + + public IServiceProvider ServiceProvider => Services; + + protected AbpAspNetCoreWebApplicationFactoryIntegratedTestBase() + { + Client = CreateClient(new WebApplicationFactoryClientOptions + { + AllowAutoRedirect = false + }); + ServiceProvider.GetRequiredService().Server = Server; + } + + protected override IHost CreateHost(IHostBuilder builder) + { + builder.ConfigureServices(ConfigureServices); + return base.CreateHost(builder); + } + + public virtual T? GetService() + { + return ServiceProvider!.GetService(); + } + + public virtual T GetRequiredService() where T : notnull + { + return ServiceProvider!.GetRequiredService(); + } + + protected virtual void ConfigureServices(IServiceCollection services) + { + + } + + #region GetUrl + + /// + /// Gets default URL for given controller type. + /// + /// The type of the controller. + protected virtual string GetUrl() + { + return "/" + typeof(TController).Name.RemovePostFix("Controller", "AppService", "ApplicationService", "IntService", "IntegrationService", "Service"); + } + + /// + /// Gets default URL for given controller type's given action. + /// + /// The type of the controller. + protected virtual string GetUrl(string actionName) + { + return GetUrl() + "/" + actionName; + } + + /// + /// Gets default URL for given controller type's given action with query string parameters (as anonymous object). + /// + /// The type of the controller. + protected virtual string GetUrl(string actionName, object queryStringParamsAsAnonymousObject) + { + var url = GetUrl(actionName); + + var dictionary = new RouteValueDictionary(queryStringParamsAsAnonymousObject); + if (dictionary.Any()) + { + url += "?" + dictionary.Select(d => $"{d.Key}={d.Value}").JoinAsString("&"); + } + + return url; + } + + #endregion +} diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Program.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Program.cs new file mode 100644 index 0000000000..e6960b28a4 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Program.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Builder; +using Volo.Abp.AspNetCore; +using Volo.Abp.AspNetCore.App; + +var builder = WebApplication.CreateBuilder(); +await builder.RunAbpModuleAsync(); + +public partial class Program +{ +} diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Startup.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Startup.cs deleted file mode 100644 index 46981d27be..0000000000 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Startup.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - -namespace Volo.Abp.AspNetCore.App; - -public class Startup -{ - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - } - - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) - { - app.InitializeApplication(); - } -} diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyTestBase.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyTestBase.cs index 15991117f4..7ff1acc7a5 100644 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyTestBase.cs @@ -1,7 +1,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy; -public abstract class AspNetCoreMultiTenancyTestBase : AbpAspNetCoreTestBase +public abstract class AspNetCoreMultiTenancyTestBase : AbpAspNetCoreTestBase { } diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_WithDomainResolver_Tests.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_WithDomainResolver_Tests.cs index a630df4986..e80b47b2a5 100644 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_WithDomainResolver_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_WithDomainResolver_Tests.cs @@ -24,23 +24,22 @@ public class AspNetCoreMultiTenancy_WithDomainResolver_Tests : AspNetCoreMultiTe _options = ServiceProvider.GetRequiredService>().Value; } - protected override IHostBuilder CreateHostBuilder() + protected override void ConfigureServices(IServiceCollection services) { - return base.CreateHostBuilder().ConfigureServices(services => + services.Configure(options => { - services.Configure(options => + options.Tenants = new[] { - options.Tenants = new[] - { - new TenantConfiguration(_testTenantId, _testTenantName) - }; - }); + new TenantConfiguration(_testTenantId, _testTenantName) + }; + }); - services.Configure(options => - { - options.AddDomainTenantResolver("{0}.abp.io:8080"); - }); + services.Configure(options => + { + options.AddDomainTenantResolver("{0}.abp.io:8080"); }); + + base.ConfigureServices(services); } [Fact] diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Without_DomainResolver_Tests.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Without_DomainResolver_Tests.cs index ccbd941bae..56da287ef8 100644 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Without_DomainResolver_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Without_DomainResolver_Tests.cs @@ -25,18 +25,17 @@ public class AspNetCoreMultiTenancy_Without_DomainResolver_Tests : AspNetCoreMul _options = ServiceProvider.GetRequiredService>().Value; } - protected override IHostBuilder CreateHostBuilder() + protected override void ConfigureServices(IServiceCollection services) { - return base.CreateHostBuilder().ConfigureServices(services => + services.Configure(options => { - services.Configure(options => + options.Tenants = new[] { - options.Tenants = new[] - { - new TenantConfiguration(_testTenantId, _testTenantName) - }; - }); + new TenantConfiguration(_testTenantId, _testTenantName) + }; }); + + base.ConfigureServices(services); } [Fact] diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs index 6051ae6520..1b2901d304 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Security.Claims; using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.AspNetCore.Mvc.Razor; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.DependencyInjection; @@ -37,6 +38,12 @@ public class AbpAspNetCoreMvcTestModule : AbpModule public override void PreConfigureServices(ServiceConfigurationContext context) { + PreConfigure(mvcBuilder => + { + mvcBuilder.PartManager.ApplicationParts.Add(new AssemblyPart(typeof(AbpAspNetCoreMvcTestModule).Assembly)); + mvcBuilder.PartManager.ApplicationParts.Add(new CompiledRazorAssemblyPart(typeof(AbpAspNetCoreMvcTestModule).Assembly)); + }); + context.Services.PreConfigure(options => { options.AddAssemblyResource( diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AspNetCoreMvcTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AspNetCoreMvcTestBase.cs index 6acbb77242..2792448d9c 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AspNetCoreMvcTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AspNetCoreMvcTestBase.cs @@ -5,7 +5,7 @@ using Microsoft.Extensions.Hosting; namespace Volo.Abp.AspNetCore.Mvc; -public abstract class AspNetCoreMvcTestBase : AbpAspNetCoreTestBase +public abstract class AspNetCoreMvcTestBase : AbpAspNetCoreTestBase { protected override IHostBuilder CreateHostBuilder() { @@ -17,8 +17,7 @@ public abstract class AspNetCoreMvcTestBase : AbpAspNetCoreTestBase ) ); - return base.CreateHostBuilder() - .UseContentRoot(contentRootPath); + return base.CreateHostBuilder()?.UseContentRoot(contentRootPath); } private static string CalculateContentRootPath(string projectFileName, string contentPath) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditIntegrationServiceTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditIntegrationServiceTestController_Tests.cs index 129035f406..74677b27c4 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditIntegrationServiceTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditIntegrationServiceTestController_Tests.cs @@ -22,11 +22,11 @@ public class AuditIntegrationServiceTestController_Tests : AspNetCoreMvcTestBase _auditingStore = ServiceProvider.GetRequiredService(); } - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { _auditingStore = Substitute.For(); services.Replace(ServiceDescriptor.Singleton(_auditingStore)); - base.ConfigureServices(context, services); + base.ConfigureServices(services); } [Fact] @@ -55,4 +55,4 @@ public class AuditIntegrationServiceTestController_Tests : AspNetCoreMvcTestBase await GetResponseAsync("/integration-api/audit-test/"); await _auditingStore.DidNotReceive().SaveAsync(Arg.Any()); } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs index 78d537e252..2a4ee0a8f2 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs @@ -23,11 +23,11 @@ public class AuditTestController_Tests : AspNetCoreMvcTestBase _auditingStore = ServiceProvider.GetRequiredService(); } - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { _auditingStore = Substitute.For(); services.Replace(ServiceDescriptor.Singleton(_auditingStore)); - base.ConfigureServices(context, services); + base.ConfigureServices(services); } [Fact] diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs index aae671d6d4..3758669457 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs @@ -22,11 +22,11 @@ public class AuditTestPage_Tests : AspNetCoreMvcTestBase _auditingStore = ServiceProvider.GetRequiredService(); } - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { _auditingStore = Substitute.For(); services.Replace(ServiceDescriptor.Singleton(_auditingStore)); - base.ConfigureServices(context, services); + base.ConfigureServices(services); } [Fact] diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Controllers/ReplaceBuiltInController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Controllers/ReplaceBuiltInController_Tests.cs index 46aa0369e3..7060a91b99 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Controllers/ReplaceBuiltInController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Controllers/ReplaceBuiltInController_Tests.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Controllers; public class ReplaceBuiltInController_Tests : AspNetCoreMvcTestBase { - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Configure(options => { diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpAuthorizationExceptionTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpAuthorizationExceptionTestController_Tests.cs index e8e49b4946..95e6b5ca47 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpAuthorizationExceptionTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpAuthorizationExceptionTestController_Tests.cs @@ -24,9 +24,9 @@ public class AbpAuthorizationExceptionTestController_Tests : AspNetCoreMvcTestBa FakeRequiredService = GetRequiredService(); } - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { - base.ConfigureServices(context, services); + base.ConfigureServices(services); FakeExceptionSubscriber = Substitute.For(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpAuthorizationExceptionTestPage_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpAuthorizationExceptionTestPage_Tests.cs index 689f3a00dc..0b10ff91da 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpAuthorizationExceptionTestPage_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpAuthorizationExceptionTestPage_Tests.cs @@ -24,9 +24,9 @@ public class AbpAuthorizationExceptionTestPage_Tests : AspNetCoreMvcTestBase _fakeRequiredService = GetRequiredService(); } - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { - base.ConfigureServices(context, services); + base.ConfigureServices(services); _fakeExceptionSubscriber = Substitute.For(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestController_Tests.cs index 2f10f4b027..1b79441de8 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestController_Tests.cs @@ -26,9 +26,9 @@ public class ExceptionTestController_Tests : AspNetCoreMvcTestBase FakeRequiredService = GetRequiredService(); } - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { - base.ConfigureServices(context, services); + base.ConfigureServices(services); _fakeExceptionSubscriber = Substitute.For(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestPage_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestPage_Tests.cs index 3290b37c95..48ccf6499f 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestPage_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestPage_Tests.cs @@ -26,9 +26,9 @@ public class ExceptionTestPage_Tests : AspNetCoreMvcTestBase _fakeRequiredService = GetRequiredService(); } - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { - base.ConfigureServices(context, services); + base.ConfigureServices(services); _fakeExceptionSubscriber = Substitute.For(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs index e7015313cb..23c16677e2 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs @@ -10,14 +10,14 @@ namespace Volo.Abp.AspNetCore.Mvc.Json; public class JsonResultController_Tests : AspNetCoreMvcTestBase { - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Configure(options => { options.OutputDateTimeFormat = "yyyy*MM*dd"; }); - base.ConfigureServices(context, services); + base.ConfigureServices(services); } [Fact] diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonSerializer_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonSerializer_Tests.cs index 1613e4bb49..d0888a0fdf 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonSerializer_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonSerializer_Tests.cs @@ -17,14 +17,14 @@ public class JsonSerializer_Tests : AspNetCoreMvcTestBase _jsonSerializer = ServiceProvider.GetRequiredService(); } - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Configure(options => { options.OutputDateTimeFormat = "yyyy*MM*dd"; }); - base.ConfigureServices(context, services); + base.ConfigureServices(services); } [Fact] diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/LocalizationTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/LocalizationTestController_Tests.cs index b575b4ce78..d23a5c1a9f 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/LocalizationTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/LocalizationTestController_Tests.cs @@ -21,7 +21,7 @@ public class LocalizationTestController_Tests : AspNetCoreMvcTestBase } } - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Configure(options => { diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs index 53bfff8b68..973e2f7192 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs @@ -122,22 +122,22 @@ public abstract class ModelBindingController_Tests : AspNetCoreMvcTestBase public class ModelBindingController_Utc_Tests : ModelBindingController_Tests { - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { Kind = DateTimeKind.Utc; services.Configure(x => x.Kind = Kind); - base.ConfigureServices(context, services); + base.ConfigureServices(services); } } public class ModelBindingController_Local_Tests : ModelBindingController_Tests { - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { Kind = DateTimeKind.Local; services.Configure(x => x.Kind = Kind); - base.ConfigureServices(context, services); + base.ConfigureServices(services); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs new file mode 100644 index 0000000000..5bba766f40 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs @@ -0,0 +1,48 @@ +using System; +using System.IO; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.AspNetCore; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Modularity.PlugIns; + +var builder = WebApplication.CreateBuilder(); +await builder.RunAbpModuleAsync(options => +{ + var hostEnvironment = options.Services.GetHostingEnvironment(); + var currentDirectory = hostEnvironment.ContentRootPath; + var plugDllInPath = ""; + + for (var i = 0; i < 10; i++) + { + var parentDirectory = new DirectoryInfo(currentDirectory).Parent; + if (parentDirectory == null) + { + break; + } + + if (parentDirectory.Name == "test") + { +#if DEBUG + plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Debug", "net7.0"); +#else + plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Release", "net7.0"); +#endif + break; + } + + currentDirectory = parentDirectory.FullName; + } + + if (plugDllInPath.IsNullOrWhiteSpace()) + { + throw new AbpException("Could not find the plug DLL path!"); + } + + options.PlugInSources.AddFolder(plugDllInPath); +}); + +public partial class Program +{ +} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Security/Headers/SecurityHeadersTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Security/Headers/SecurityHeadersTestController_Tests.cs index 4c419ef744..dab4a03466 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Security/Headers/SecurityHeadersTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Security/Headers/SecurityHeadersTestController_Tests.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Security.Headers; public class SecurityHeadersTestController_Tests : AspNetCoreMvcTestBase { - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Configure(options => { @@ -18,7 +18,7 @@ public class SecurityHeadersTestController_Tests : AspNetCoreMvcTestBase options.Headers["Referrer-Policy"] = "no-referrer"; }); - base.ConfigureServices(context, services); + base.ConfigureServices(services); } [Fact] diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Startup.cs deleted file mode 100644 index df5a8b7b9c..0000000000 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Startup.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Volo.Abp.Modularity.PlugIns; - -namespace Volo.Abp.AspNetCore.Mvc; - -public class Startup -{ - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(options => - { - var hostEnvironment = services.GetHostingEnvironment(); - var currentDirectory = hostEnvironment.ContentRootPath; - var plugDllInPath = ""; - - for (var i = 0; i < 10; i++) - { - var parentDirectory = new DirectoryInfo(currentDirectory).Parent; - if (parentDirectory == null) - { - break; - } - - if (parentDirectory.Name == "test") - { -#if DEBUG - plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Debug", "net7.0"); -#else - plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Release", "net7.0"); -#endif - break; - } - - currentDirectory = parentDirectory.FullName; - } - - if (plugDllInPath.IsNullOrWhiteSpace()) - { - throw new AbpException("Could not find the plug DLL path!"); - } - - options.PlugInSources.AddFolder(plugDllInPath); - }); - } - - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) - { - app.InitializeApplication(); - } -} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Exception_Rollback_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Exception_Rollback_Tests.cs index 068accad6a..7c0658638d 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Exception_Rollback_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Exception_Rollback_Tests.cs @@ -14,7 +14,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow; public class UnitOfWorkMiddleware_Exception_Rollback_Tests : AspNetCoreMvcTestBase { - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Replace(ServiceDescriptor.Transient()); } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkPageFilter_Exception_Rollback_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkPageFilter_Exception_Rollback_Tests.cs index f5e3bf2123..652c936276 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkPageFilter_Exception_Rollback_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkPageFilter_Exception_Rollback_Tests.cs @@ -14,7 +14,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow; public class UnitOfWorkPageFilter_Exception_Rollback_Tests : AspNetCoreMvcTestBase { - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Replace(ServiceDescriptor.Transient()); } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController_Tests.cs index 588c130a22..ab0fd586b3 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController_Tests.cs @@ -118,14 +118,14 @@ public class ValidationTestController_Tests : AspNetCoreMvcTestBase public class DisableAutoModelValidationTestController_Tests : AspNetCoreMvcTestBase { - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Configure(options => { options.AutoModelValidation = false; }); - base.ConfigureServices(context, services); + base.ConfigureServices(services); } [Fact] diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs index 99ca4da729..d6f6402eca 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs @@ -2,7 +2,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI; -public abstract class AbpAspNetCoreMvcUiTestBase : AbpAspNetCoreIntegratedTestBase +public abstract class AbpAspNetCoreMvcUiTestBase : AbpAspNetCoreIntegratedTestBase { } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Program.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Program.cs new file mode 100644 index 0000000000..9775d17edc --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Program.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Builder; +using Volo.Abp.AspNetCore; +using Volo.Abp.AspNetCore.Mvc.UI; + +var builder = WebApplication.CreateBuilder(); +await builder.RunAbpModuleAsync(); + +public partial class Program +{ +} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs deleted file mode 100644 index 0e1954b630..0000000000 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - -namespace Volo.Abp.AspNetCore.Mvc.UI; - -public class Startup -{ - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - } - - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) - { - app.InitializeApplication(); - } -} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Program.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Program.cs index 3f2eaedeb0..4bd87d1533 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Program.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Program.cs @@ -1,25 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Builder; +using Volo.Abp.AspNetCore; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; -namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests; +var builder = WebApplication.CreateBuilder(); +await builder.RunAbpModuleAsync(); -public class Program +public partial class Program { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/AbpAspNetCoreMvcUiThemeSharedTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/AbpAspNetCoreMvcUiThemeSharedTestBase.cs index b450dd97d2..1f7f5f2a82 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/AbpAspNetCoreMvcUiThemeSharedTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/AbpAspNetCoreMvcUiThemeSharedTestBase.cs @@ -1,5 +1,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; -public class AbpAspNetCoreMvcUiThemeSharedTestBase : AbpAspNetCoreTestBase +public class AbpAspNetCoreMvcUiThemeSharedTestBase : AbpAspNetCoreTestBase { } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/AbpAspNetCoreMvcUiThemeSharedTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/AbpAspNetCoreMvcUiThemeSharedTestModule.cs index bfc1303970..a665d2c49d 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/AbpAspNetCoreMvcUiThemeSharedTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/AbpAspNetCoreMvcUiThemeSharedTestModule.cs @@ -11,8 +11,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc. )] public class AbpAspNetCoreMvcUiThemeSharedTestModule : AbpModule { - public override void ConfigureServices(ServiceConfigurationContext context) - { - } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/PageToolbars/PageToolbar_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/PageToolbars/PageToolbar_Tests.cs index 4bd8c2d036..cab4ca631c 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/PageToolbars/PageToolbar_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/PageToolbars/PageToolbar_Tests.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc. public class PageToolbar_Tests : AbpAspNetCoreMvcUiThemeSharedTestBase { - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Configure(options => { diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/Startup.cs deleted file mode 100644 index d17ee6203b..0000000000 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/Startup.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.Logging; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; - -public class Startup -{ - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - } - - public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) - { - app.InitializeApplication(); - } -} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/Toolbars/Toolbar_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/Toolbars/Toolbar_Tests.cs index d9e5be8b2d..2c5394a931 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/Toolbars/Toolbar_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo/Abp/AspNetCore/Mvc/UI/Theme/Shared/Toolbars/Toolbar_Tests.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc. public class Toolbar_Tests : AbpAspNetCoreMvcUiThemeSharedTestBase { - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Configure(options => { @@ -35,7 +35,7 @@ public class Toolbar_Tests : AbpAspNetCoreMvcUiThemeSharedTestBase var claimsPrincipal = new ClaimsPrincipal(identity); var principalAccessor = Substitute.For(); principalAccessor.Principal.Returns(ci => claimsPrincipal); - Thread.CurrentPrincipal = claimsPrincipal; + services.Replace(ServiceDescriptor.Singleton(principalAccessor)); var themeManager = Substitute.For(); themeManager.CurrentTheme.Returns(x => null); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AspNetCoreMvcVersioningTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AspNetCoreMvcVersioningTestBase.cs index 0df183aca1..5792517562 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AspNetCoreMvcVersioningTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AspNetCoreMvcVersioningTestBase.cs @@ -1,5 +1,5 @@ namespace Volo.Abp.AspNetCore.Mvc.Versioning; -public abstract class AspNetCoreMvcVersioningTestBase : AbpAspNetCoreTestBase +public abstract class AspNetCoreMvcVersioningTestBase : AbpAspNetCoreTestBase { } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Program.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Program.cs new file mode 100644 index 0000000000..88a8601822 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Program.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Builder; +using Volo.Abp.AspNetCore; +using Volo.Abp.AspNetCore.Mvc.Versioning; + +var builder = WebApplication.CreateBuilder(); +await builder.RunAbpModuleAsync(); + +public partial class Program +{ +} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Startup.cs deleted file mode 100644 index 4ccb18feac..0000000000 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Startup.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - -namespace Volo.Abp.AspNetCore.Mvc.Versioning; - -public class Startup -{ - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - } - - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) - { - app.InitializeApplication(); - } -} diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs index 992800cda5..4088412b88 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Serilog; @@ -18,6 +19,14 @@ namespace Volo.Abp.AspNetCore.App; )] public class AbpSerilogTestModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(mvcBuilder => + { + mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpSerilogTestModule).Assembly); + }); + } + public override void ConfigureServices(ServiceConfigurationContext context) { Configure(options => { options.IsEnabled = true; }); diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Program.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Program.cs new file mode 100644 index 0000000000..1d6fc96801 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Program.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Builder; +using Volo.Abp.AspNetCore; +using Volo.Abp.AspNetCore.App; + +var builder = WebApplication.CreateBuilder(); +await builder.RunAbpModuleAsync(); + +public partial class Program +{ +} diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs deleted file mode 100644 index 8464f6e77b..0000000000 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - -namespace Volo.Abp.AspNetCore.App; - -public class Startup -{ - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - } - - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) - { - app.InitializeApplication(); - } -} diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs index acfb7e54d0..acf053ced7 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs @@ -6,11 +6,11 @@ using Volo.Abp.AspNetCore.App; namespace Volo.Abp.AspNetCore.Serilog; -public class AbpSerilogTestBase : AbpAspNetCoreTestBase +public class AbpSerilogTestBase : AbpAspNetCoreTestBase { protected readonly CollectingSink CollectingSink = new CollectingSink(); - protected override IHostBuilder CreateHostBuilder() + protected override IHost CreateHost(IHostBuilder builder) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() @@ -19,8 +19,8 @@ public class AbpSerilogTestBase : AbpAspNetCoreTestBase .WriteTo.Sink(CollectingSink) .CreateLogger(); - return base.CreateHostBuilder() - .UseSerilog(); + builder.UseSerilog(); + return base.CreateHost(builder);; } protected LogEvent GetLogEvent(string text) diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs index b8f197d3c1..4782a5e768 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs @@ -33,18 +33,16 @@ public class Serilog_Enrichers_Tests : AbpSerilogTestBase _logger = ServiceProvider.GetRequiredService>(); } - protected override IHostBuilder CreateHostBuilder() + protected override void ConfigureServices(IServiceCollection services) { - return base.CreateHostBuilder().ConfigureServices(services => + services.Configure(options => { - services.Configure(options => + options.Tenants = new[] { - options.Tenants = new[] - { - new TenantConfiguration(_testTenantId, _testTenantName) - }; - }); + new TenantConfiguration(_testTenantId, _testTenantName) + }; }); + base.ConfigureServices(services); } [Fact] diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs index a79c4998e8..29a157a3f5 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs @@ -9,13 +9,12 @@ using Volo.Abp.AspNetCore.TestBase; namespace Volo.Abp.AspNetCore; -public class AbpAspNetCoreTestBase : AbpAspNetCoreTestBase +public class AbpAspNetCoreTestBase : AbpAspNetCoreTestBase { - } -public abstract class AbpAspNetCoreTestBase : AbpAspNetCoreIntegratedTestBase - where TStartup : class +public abstract class AbpAspNetCoreTestBase : AbpAspNetCoreWebApplicationFactoryIntegratedTestBase + where TProgram : class { protected virtual async Task GetResponseAsObjectAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) { diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs index 16799162bb..dcd47ddc88 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs @@ -1,7 +1,5 @@ -using System.Collections.Generic; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.Configuration.Memory; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Shouldly; @@ -9,20 +7,12 @@ using Xunit; namespace Volo.Abp.AspNetCore; -public class AbpHostEnvironment_Tests : AbpAspNetCoreTestBase +public class AbpHostEnvironment_Tests : AbpAspNetCoreTestBase { - protected override IHostBuilder CreateHostBuilder() + protected override IHost CreateHost(IHostBuilder builder) { - var builder = base.CreateHostBuilder(); - builder.ConfigureHostConfiguration(x => x.Sources.Insert(0, - new MemoryConfigurationSource() - { - InitialData = new List> - { - new(HostDefaults.EnvironmentKey, Environments.Staging), - } - })); - return builder; + builder.UseEnvironment("test"); + return base.CreateHost(builder); } [Fact] diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Program.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Program.cs new file mode 100644 index 0000000000..112772fc82 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Program.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Hosting; +using Volo.Abp.AspNetCore; + +var builder = WebApplication.CreateBuilder(new WebApplicationOptions +{ + EnvironmentName = Environments.Staging +}); +await builder.RunAbpModuleAsync(); + +public partial class Program +{ +} diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Startup.cs deleted file mode 100644 index 133b77fcc8..0000000000 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Startup.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - -namespace Volo.Abp.AspNetCore; - -public class Startup -{ - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - } - - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) - { - app.InitializeApplication(); - } -} diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/WebApplicationBuilderExtensions.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/WebApplicationBuilderExtensions.cs new file mode 100644 index 0000000000..ff584d18c5 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/WebApplicationBuilderExtensions.cs @@ -0,0 +1,21 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore; + +public static class WebApplicationBuilderExtensions +{ + public async static Task RunAbpModuleAsync(this WebApplicationBuilder builder, Action optionsAction = null) + where TModule : IAbpModule + { + builder.Host.UseAutofac(); + await builder.AddApplicationAsync(optionsAction); + var app = builder.Build(); + await app.InitializeApplicationAsync(); + await app.RunAsync(); + } +} diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestBase.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestBase.cs index 9ae4370b38..dfa5c335b2 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestBase.cs +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestBase.cs @@ -2,7 +2,7 @@ using Volo.Abp.AspNetCore; namespace Volo.Abp.Http; -public abstract class AbpHttpClientTestBase : AbpAspNetCoreTestBase +public abstract class AbpHttpClientTestBase : AbpAspNetCoreTestBase { } diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs index 6540b717d3..003cd065e2 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs @@ -21,6 +21,14 @@ namespace Volo.Abp.Http; )] public class AbpHttpClientTestModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(mvcBuilder => + { + mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpHttpClientTestModule).Assembly); + }); + } + public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddHttpClientProxies(typeof(TestAppModule).Assembly); diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/RegularTestControllerClientProxy_AbpRemoteCallException_Tests.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/RegularTestControllerClientProxy_AbpRemoteCallException_Tests.cs index 8469ba121a..f679ccd9c9 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/RegularTestControllerClientProxy_AbpRemoteCallException_Tests.cs +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/RegularTestControllerClientProxy_AbpRemoteCallException_Tests.cs @@ -20,7 +20,7 @@ public class RegularTestControllerClientProxy_AbpRemoteCallException_Tests : Abp _controller = ServiceProvider.GetRequiredService(); } - protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + protected override void ConfigureServices(IServiceCollection services) { services.Replace(ServiceDescriptor.Singleton()); } diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Program.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Program.cs new file mode 100644 index 0000000000..0cf3a51d99 --- /dev/null +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Program.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Builder; +using Volo.Abp.AspNetCore; +using Volo.Abp.Http; + +var builder = WebApplication.CreateBuilder(); +await builder.RunAbpModuleAsync(); + +public partial class Program +{ +} diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Startup.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Startup.cs deleted file mode 100644 index 063b9999c1..0000000000 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Startup.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.DependencyInjection; - -namespace Volo.Abp.Http; - -public class Startup -{ - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - } - - public void Configure(IApplicationBuilder app) - { - app.InitializeApplication(); - } -} From 5b903a4eb5faf9be2702629da6be6dbcc587a627 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 29 Aug 2023 11:31:45 +0800 Subject: [PATCH 54/92] Use `WebApplicationFactory` in template project. --- .../WebApplicationBuilderExtensions.cs | 4 +-- .../Volo/Abp/AspNetCore/App/Program.cs | 1 + .../AspNetCore/Mvc/AspNetCoreMvcTestBase.cs | 34 ------------------- .../Volo/Abp/AspNetCore/Mvc/Program.cs | 1 + .../Volo/Abp/AspNetCore/Mvc/UI/Program.cs | 1 + .../Program.cs | 1 + .../Abp/AspNetCore/Mvc/Versioning/Program.cs | 1 + .../Volo/Abp/AspNetCore/App/Program.cs | 1 + .../AspNetCore/AbpHostEnvironment_Tests.cs | 6 ---- .../Volo/Abp/AspNetCore/Program.cs | 1 + .../Volo/Abp/Http/Program.cs | 1 + .../MyProjectNameWebTestBase.cs | 13 ++----- .../Program.cs | 10 ++++++ 13 files changed, 22 insertions(+), 53 deletions(-) rename framework/{test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore => src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase}/WebApplicationBuilderExtensions.cs (90%) create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Program.cs diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/WebApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs similarity index 90% rename from framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/WebApplicationBuilderExtensions.cs rename to framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs index ff584d18c5..026d4da2a5 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/WebApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs @@ -5,11 +5,11 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Volo.Abp.Modularity; -namespace Volo.Abp.AspNetCore; +namespace Volo.Abp.AspNetCore.TestBase; public static class WebApplicationBuilderExtensions { - public async static Task RunAbpModuleAsync(this WebApplicationBuilder builder, Action optionsAction = null) + public async static Task RunAbpModuleAsync(this WebApplicationBuilder builder, Action? optionsAction = null) where TModule : IAbpModule { builder.Host.UseAutofac(); diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Program.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Program.cs index e6960b28a4..d2e28ce2c1 100644 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Program.cs +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Program.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Builder; using Volo.Abp.AspNetCore; using Volo.Abp.AspNetCore.App; +using Volo.Abp.AspNetCore.TestBase; var builder = WebApplication.CreateBuilder(); await builder.RunAbpModuleAsync(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AspNetCoreMvcTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AspNetCoreMvcTestBase.cs index 2792448d9c..d1e02f8ebc 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AspNetCoreMvcTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AspNetCoreMvcTestBase.cs @@ -1,40 +1,6 @@ -using System.IO; -using System.Linq; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Hosting; - namespace Volo.Abp.AspNetCore.Mvc; public abstract class AspNetCoreMvcTestBase : AbpAspNetCoreTestBase { - protected override IHostBuilder CreateHostBuilder() - { - var contentRootPath = CalculateContentRootPath( - "Volo.Abp.AspNetCore.Mvc.Tests.csproj", - string.Format( - "Volo{0}Abp{0}AspNetCore{0}App", - Path.DirectorySeparatorChar - ) - ); - - return base.CreateHostBuilder()?.UseContentRoot(contentRootPath); - } - - private static string CalculateContentRootPath(string projectFileName, string contentPath) - { - var currentDirectory = Directory.GetCurrentDirectory(); - while (!ContainsFile(currentDirectory, projectFileName)) - { - currentDirectory = new DirectoryInfo(currentDirectory).Parent.FullName; - } - - return Path.Combine(currentDirectory, contentPath); - } - private static bool ContainsFile(string currentDirectory, string projectFileName) - { - return Directory - .GetFiles(currentDirectory, "*.*", SearchOption.TopDirectoryOnly) - .Any(f => Path.GetFileName(f) == projectFileName); - } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs index 5bba766f40..9e1bf5e51c 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp; using Volo.Abp.AspNetCore; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.TestBase; using Volo.Abp.Modularity.PlugIns; var builder = WebApplication.CreateBuilder(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Program.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Program.cs index 9775d17edc..bd6027c624 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Program.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Program.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Builder; using Volo.Abp.AspNetCore; using Volo.Abp.AspNetCore.Mvc.UI; +using Volo.Abp.AspNetCore.TestBase; var builder = WebApplication.CreateBuilder(); await builder.RunAbpModuleAsync(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Program.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Program.cs index 4bd87d1533..b7c7d4cd34 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Program.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Program.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Builder; using Volo.Abp.AspNetCore; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.TestBase; var builder = WebApplication.CreateBuilder(); await builder.RunAbpModuleAsync(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Program.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Program.cs index 88a8601822..3d85fb71f9 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Program.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Program.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Builder; using Volo.Abp.AspNetCore; using Volo.Abp.AspNetCore.Mvc.Versioning; +using Volo.Abp.AspNetCore.TestBase; var builder = WebApplication.CreateBuilder(); await builder.RunAbpModuleAsync(); diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Program.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Program.cs index 1d6fc96801..dbbce46a5e 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Program.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Program.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Builder; using Volo.Abp.AspNetCore; using Volo.Abp.AspNetCore.App; +using Volo.Abp.AspNetCore.TestBase; var builder = WebApplication.CreateBuilder(); await builder.RunAbpModuleAsync(); diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs index dcd47ddc88..a87772536b 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs @@ -9,12 +9,6 @@ namespace Volo.Abp.AspNetCore; public class AbpHostEnvironment_Tests : AbpAspNetCoreTestBase { - protected override IHost CreateHost(IHostBuilder builder) - { - builder.UseEnvironment("test"); - return base.CreateHost(builder); - } - [Fact] public void Should_Set_Environment_From_IWebHostEnvironment() { diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Program.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Program.cs index 112772fc82..841b2903c2 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Program.cs +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Program.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting; using Volo.Abp.AspNetCore; +using Volo.Abp.AspNetCore.TestBase; var builder = WebApplication.CreateBuilder(new WebApplicationOptions { diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Program.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Program.cs index 0cf3a51d99..a0cfe08f84 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Program.cs +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Program.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Builder; using Volo.Abp.AspNetCore; +using Volo.Abp.AspNetCore.TestBase; using Volo.Abp.Http; var builder = WebApplication.CreateBuilder(); diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs index d038106f5a..139ef8d69e 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs @@ -1,23 +1,14 @@ -using System; -using System.Net; +using System.Net; using System.Net.Http; using System.Text.Json; using System.Threading.Tasks; -using Microsoft.Extensions.Hosting; using Shouldly; using Volo.Abp.AspNetCore.TestBase; namespace MyCompanyName.MyProjectName; -public abstract class MyProjectNameWebTestBase : AbpAspNetCoreIntegratedTestBase +public abstract class MyProjectNameWebTestBase : AbpAspNetCoreWebApplicationFactoryIntegratedTestBase { - protected override IHostBuilder CreateHostBuilder() - { - return base - .CreateHostBuilder() - .UseContentRoot(WebContentDirectoryFinder.CalculateContentRootFolder() ?? throw new InvalidOperationException()); - } - protected virtual async Task GetResponseAsObjectAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) { var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode); diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Program.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Program.cs new file mode 100644 index 0000000000..f4c388685f --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Program.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Builder; +using MyCompanyName.MyProjectName; +using Volo.Abp.AspNetCore.TestBase; + +var builder = WebApplication.CreateBuilder(); +await builder.RunAbpModuleAsync(); + +public partial class Program +{ +} From 29005af5eac173e3b0f8ee30b55529b84acf1faf Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 29 Aug 2023 14:51:46 +0800 Subject: [PATCH 55/92] `Obsolete` the `AbpAspNetCoreAsyncIntegratedTestBase` and `AbpAspNetCoreIntegratedTestBase ` --- .../AbpAspNetCoreAsyncIntegratedTestBase.cs | 1 + .../TestBase/AbpAspNetCoreIntegratedTestBase.cs | 3 ++- ...s => AbpWebApplicationFactoryIntegratedTest.cs} | 14 +++++++------- .../Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs | 6 ++---- .../Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs | 2 +- .../MyProjectNameWebTestBase.cs | 3 ++- 6 files changed, 15 insertions(+), 14 deletions(-) rename framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/{AbpAspNetCoreWebApplicationFactoryIntegratedTestBase.cs => AbpWebApplicationFactoryIntegratedTest.cs} (83%) diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreAsyncIntegratedTestBase.cs b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreAsyncIntegratedTestBase.cs index 8892623364..e6c49d475c 100644 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreAsyncIntegratedTestBase.cs +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreAsyncIntegratedTestBase.cs @@ -13,6 +13,7 @@ using Volo.Abp.Modularity; namespace Volo.Abp.AspNetCore.TestBase; +[Obsolete("Use AbpWebApplicationFactoryIntegratedTest instead.")] public class AbpAspNetCoreAsyncIntegratedTestBase where TModule : IAbpModule { diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreIntegratedTestBase.cs b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreIntegratedTestBase.cs index c362d5074c..731b21ea03 100644 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreIntegratedTestBase.cs +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreIntegratedTestBase.cs @@ -14,6 +14,7 @@ namespace Volo.Abp.AspNetCore.TestBase; /// /// Can be a module type or old-style ASP.NET Core Startup class. /// +[Obsolete("Use AbpWebApplicationFactoryIntegratedTest instead.")] public abstract class AbpAspNetCoreIntegratedTestBase : AbpTestBaseWithServiceProvider, IDisposable where TStartupModule : class { @@ -51,7 +52,7 @@ public abstract class AbpAspNetCoreIntegratedTestBase : AbpTestB { webBuilder.UseStartup(); } - + webBuilder.UseAbpTestServer(); }) .UseAutofac() diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreWebApplicationFactoryIntegratedTestBase.cs b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpWebApplicationFactoryIntegratedTest.cs similarity index 83% rename from framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreWebApplicationFactoryIntegratedTestBase.cs rename to framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpWebApplicationFactoryIntegratedTest.cs index 11d27221df..c7b5f48ebe 100644 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpAspNetCoreWebApplicationFactoryIntegratedTestBase.cs +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/AbpWebApplicationFactoryIntegratedTest.cs @@ -9,14 +9,14 @@ using Microsoft.Extensions.Hosting; namespace Volo.Abp.AspNetCore.TestBase; -public abstract class AbpAspNetCoreWebApplicationFactoryIntegratedTestBase : WebApplicationFactory +public abstract class AbpWebApplicationFactoryIntegratedTest : WebApplicationFactory where TProgram : class { protected HttpClient Client { get; set; } - public IServiceProvider ServiceProvider => Services; + protected IServiceProvider ServiceProvider => Services; - protected AbpAspNetCoreWebApplicationFactoryIntegratedTestBase() + protected AbpWebApplicationFactoryIntegratedTest() { Client = CreateClient(new WebApplicationFactoryClientOptions { @@ -31,14 +31,14 @@ public abstract class AbpAspNetCoreWebApplicationFactoryIntegratedTestBase() + protected virtual T? GetService() { - return ServiceProvider!.GetService(); + return Services.GetService(); } - public virtual T GetRequiredService() where T : notnull + protected virtual T GetRequiredService() where T : notnull { - return ServiceProvider!.GetRequiredService(); + return Services.GetRequiredService(); } protected virtual void ConfigureServices(IServiceCollection services) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs index d6f6402eca..43167ce47d 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs @@ -1,8 +1,6 @@ -using Volo.Abp.AspNetCore.TestBase; +namespace Volo.Abp.AspNetCore.Mvc.UI; -namespace Volo.Abp.AspNetCore.Mvc.UI; - -public abstract class AbpAspNetCoreMvcUiTestBase : AbpAspNetCoreIntegratedTestBase +public abstract class AbpAspNetCoreMvcUiTestBase : AbpAspNetCoreTestBase { } diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs index 29a157a3f5..f78f27f141 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs @@ -13,7 +13,7 @@ public class AbpAspNetCoreTestBase : AbpAspNetCoreTestBase { } -public abstract class AbpAspNetCoreTestBase : AbpAspNetCoreWebApplicationFactoryIntegratedTestBase +public abstract class AbpAspNetCoreTestBase : AbpWebApplicationFactoryIntegratedTest where TProgram : class { protected virtual async Task GetResponseAsObjectAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs index 139ef8d69e..f6c290ef6d 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs @@ -3,11 +3,12 @@ using System.Net.Http; using System.Text.Json; using System.Threading.Tasks; using Shouldly; +using Volo.Abp.AspNetCore; using Volo.Abp.AspNetCore.TestBase; namespace MyCompanyName.MyProjectName; -public abstract class MyProjectNameWebTestBase : AbpAspNetCoreWebApplicationFactoryIntegratedTestBase +public abstract class MyProjectNameWebTestBase : AbpWebApplicationFactoryIntegratedTest { protected virtual async Task GetResponseAsObjectAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) { From 257ad413c12889b46e1ff6b74e75bda65a930d25 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 29 Aug 2023 15:44:16 +0800 Subject: [PATCH 56/92] Set `ApplicationName` as current `assembly name`. --- .../TestBase/WebApplicationBuilderExtensions.cs | 6 ++++++ .../Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs | 7 ------- .../Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs | 9 --------- .../Volo/Abp/Http/AbpHttpClientTestModule.cs | 9 --------- 4 files changed, 6 insertions(+), 25 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs index 026d4da2a5..403bbac7b1 100644 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs @@ -12,6 +12,12 @@ public static class WebApplicationBuilderExtensions public async static Task RunAbpModuleAsync(this WebApplicationBuilder builder, Action? optionsAction = null) where TModule : IAbpModule { + var assemblyName = typeof(TModule).Assembly.GetName()?.Name; + if (!assemblyName.IsNullOrWhiteSpace()) + { + // Set the application name as the assembly name of the module will automatically add assembly to the ApplicationParts of MVC application. + builder.Environment.ApplicationName = assemblyName!; + } builder.Host.UseAutofac(); await builder.AddApplicationAsync(optionsAction); var app = builder.Build(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs index 1b2901d304..6051ae6520 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Security.Claims; using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.AspNetCore.Mvc.Razor; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.DependencyInjection; @@ -38,12 +37,6 @@ public class AbpAspNetCoreMvcTestModule : AbpModule public override void PreConfigureServices(ServiceConfigurationContext context) { - PreConfigure(mvcBuilder => - { - mvcBuilder.PartManager.ApplicationParts.Add(new AssemblyPart(typeof(AbpAspNetCoreMvcTestModule).Assembly)); - mvcBuilder.PartManager.ApplicationParts.Add(new CompiledRazorAssemblyPart(typeof(AbpAspNetCoreMvcTestModule).Assembly)); - }); - context.Services.PreConfigure(options => { options.AddAssemblyResource( diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs index 4088412b88..992800cda5 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs @@ -1,5 +1,4 @@ using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Serilog; @@ -19,14 +18,6 @@ namespace Volo.Abp.AspNetCore.App; )] public class AbpSerilogTestModule : AbpModule { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - PreConfigure(mvcBuilder => - { - mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpSerilogTestModule).Assembly); - }); - } - public override void ConfigureServices(ServiceConfigurationContext context) { Configure(options => { options.IsEnabled = true; }); diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs index 003cd065e2..5e9107a23b 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc.Conventions; using Volo.Abp.Http.Client; using Volo.Abp.Http.Client.ClientProxying; using Volo.Abp.Http.DynamicProxying; @@ -21,14 +20,6 @@ namespace Volo.Abp.Http; )] public class AbpHttpClientTestModule : AbpModule { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - PreConfigure(mvcBuilder => - { - mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpHttpClientTestModule).Assembly); - }); - } - public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddHttpClientProxies(typeof(TestAppModule).Assembly); From 4dfdf48e75faa4f758ddb837eaf162a3fd9d378f Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 29 Aug 2023 15:54:59 +0800 Subject: [PATCH 57/92] Make `EntityChangeTrackingAttribute` abstract. --- .../Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs | 2 +- .../Volo/Abp/Domain/Repositories/RepositoryHelper.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs index 0bb6ca82e4..23bc6ef851 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs @@ -3,7 +3,7 @@ using System; namespace Volo.Abp.Domain.Repositories; [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)] -public class EntityChangeTrackingAttribute : Attribute +public abstract class EntityChangeTrackingAttribute : Attribute { public bool Enabled { get; set; } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs index 014970c527..2c57dd9640 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs @@ -45,8 +45,8 @@ public static class RepositoryHelper .Any(HasEntityChangeTrackingAttribute); } - private static bool HasEntityChangeTrackingAttribute(MemberInfo methodInfo) + private static bool HasEntityChangeTrackingAttribute(MemberInfo memberInfo) { - return methodInfo.IsDefined(typeof(EntityChangeTrackingAttribute), true); + return memberInfo.IsDefined(typeof(EntityChangeTrackingAttribute), true); } } From 1b35f9c9f6c9255c4e4e4e81758505e24644934d Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 29 Aug 2023 16:05:23 +0800 Subject: [PATCH 58/92] Rename `Enabled` of `EntityChangeTrackingAttribute` to `IsEnabled`. --- .../Domain/Repositories/EntityChangeTrackingAttribute.cs | 6 +++--- .../Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs index 23bc6ef851..3719cd3c0c 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs @@ -5,10 +5,10 @@ namespace Volo.Abp.Domain.Repositories; [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)] public abstract class EntityChangeTrackingAttribute : Attribute { - public bool Enabled { get; set; } + public virtual bool IsEnabled { get; set; } - public EntityChangeTrackingAttribute(bool enabled) + public EntityChangeTrackingAttribute(bool isEnabled) { - Enabled = enabled; + IsEnabled = isEnabled; } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs index f322d1e87d..e9727b932f 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs @@ -21,7 +21,7 @@ public class RepositoryInterceptor : AbpInterceptor, ITransientDependency return; } - using (_entityChangeTrackingProvider.Change(changeTrackingAttribute?.Enabled)) + using (_entityChangeTrackingProvider.Change(changeTrackingAttribute?.IsEnabled)) { await invocation.ProceedAsync(); } From 16999d649b33b0bc02a6243ea77dde6682623996 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 29 Aug 2023 16:36:34 +0800 Subject: [PATCH 59/92] Update `Testing` document. --- docs/en/UI/AspNetCore/Testing.md | 19 +++---------------- docs/zh-Hans/UI/AspNetCore/Testing.md | 19 +++---------------- 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/docs/en/UI/AspNetCore/Testing.md b/docs/en/UI/AspNetCore/Testing.md index 2c880594d3..6efc967cb0 100644 --- a/docs/en/UI/AspNetCore/Testing.md +++ b/docs/en/UI/AspNetCore/Testing.md @@ -198,23 +198,10 @@ ABP Framework doesn't provide any infrastructure to test your JavaScript code. Y > Volo.Abp.AspNetCore.TestBase package is already installed in the `.Web.Tests` project. -This package provides the `AbpAspNetCoreIntegratedTestBase` as the fundamental base class to derive the test classes from. The `MyProjectWebTestBase` base class used above inherits from the `AbpAspNetCoreIntegratedTestBase`, so we indirectly inherited the `AbpAspNetCoreIntegratedTestBase`. +This package provides the `AbpWebApplicationFactoryIntegratedTest` as the fundamental base class to derive the test classes from. It's inherited from the [WebApplicationFactory](https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests) class provided by the ASP.NET Core. -### Base Properties - -The `AbpAspNetCoreIntegratedTestBase` provides the following base properties those are used in the tests: - -* `Server`: A `TestServer` instance that hosts the web application in tests. -* `Client`: An `HttpClient` instance that is configured to perform requests to the test server. -* `ServiceProvider`: The service provider that you can resolve services in case of need. - -### Base Methods - -`AbpAspNetCoreIntegratedTestBase` provides the following methods that you can override if you need to customize the test server: - -* `ConfigureServices` can be overridden to register/replace services only for the derived test class. -* `CreateHostBuilder` can be used to customize building the `IHostBuilder`. +The `MyProjectWebTestBase` base class used above inherits from the `AbpWebApplicationFactoryIntegratedTest`, so we indirectly inherited the `AbpWebApplicationFactoryIntegratedTest`. See Also - +* [Integration tests in ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests) * [Overall / Server Side Testing](../../Testing.md) \ No newline at end of file diff --git a/docs/zh-Hans/UI/AspNetCore/Testing.md b/docs/zh-Hans/UI/AspNetCore/Testing.md index e5b09353fb..1dfdbe367e 100644 --- a/docs/zh-Hans/UI/AspNetCore/Testing.md +++ b/docs/zh-Hans/UI/AspNetCore/Testing.md @@ -198,23 +198,10 @@ ABP框架不提供任何基础设施来测试JavaScript代码. 你可以使用 > Volo.Abp.AspNetCore.TestBase 已经安装在 `.Web.Tests` 项目中. -此包提供的`AbpAspNetCoreIntegratedTestBase`作为派生测试类的基类. 上面使用的`MyProjectWebTestBase`继承自`AbpAspNetCoreIntegratedTestBase`, 因此我们间接继承了`AbpAspNetCoreIntegratedTestBase`. - -### 基本属性 - -`AbpAspNetCoreIntegratedTestBase` 提供了测试中使用的以下基本属性: - -* `Server`: 在测试中托管web应用程序的`TestServer`实例. -* `Client`: 为执行对测试服务器的请求配置`HttpClient`实例. -* `ServiceProvider`: 可以在你需要时处理服务提供服务. - -### 基本方法 - -`AbpAspNetCoreIntegratedTestBase` 提供了以下方法, 如果需要自定义测试服务器, 可以重写这些方法: - -* `ConfigureServices` 仅为派生测试类注册/替换服务时可以重写使用. -* `CreateHostBuilder` 可用于自定义生成 `IHostBuilder`. +此包提供的`AbpWebApplicationFactoryIntegratedTest`作为派生测试类的基类. 它继承自ASP.NET Core提供的[WebApplicationFactory](https://learn.microsoft.com/zh-cn/aspnet/core/test/integration-tests)类。 +上面使用的`MyProjectWebTestBase`继承自`AbpWebApplicationFactoryIntegratedTest`, 因此我们间接继承了`AbpWebApplicationFactoryIntegratedTest`. 另请参阅 +* [ASP.NET Core 中的集成测试](https://learn.microsoft.com/zh-cn/aspnet/core/test/integration-tests) * [总览/服务器端测试](../../Testing.md) From 9a10caedb0b0e63aab0e8f511a13a8beb1176ed4 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 30 Aug 2023 14:51:46 +0800 Subject: [PATCH 60/92] Create production certificate while creating a new solution Resolve #17500 --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 1 + .../Commands/ProjectCreationCommandBase.cs | 29 +++++++++++++++++++ .../RandomizeAuthServerPassPhraseStep.cs | 15 ++++++++-- .../OpenIddictServerBuilderExtensions.cs | 26 +++++++++++++++++ ...e.MyProjectName.Blazor.Server.Mongo.csproj | 4 +++ .../MyProjectNameModule.cs | 29 +++++++++++++------ ...anyName.MyProjectName.Blazor.Server.csproj | 4 +++ .../MyProjectNameModule.cs | 29 +++++++++++++------ ...ame.Blazor.WebAssembly.Server.Mongo.csproj | 4 +++ .../Server.Mongo/MyProjectNameHostModule.cs | 29 +++++++++++++------ ...ojectName.Blazor.WebAssembly.Server.csproj | 4 +++ .../Server/MyProjectNameHostModule.cs | 29 +++++++++++++------ ...ompanyName.MyProjectName.Host.Mongo.csproj | 4 +++ .../MyProjectNameModule.cs | 29 +++++++++++++------ .../MyCompanyName.MyProjectName.Host.csproj | 4 +++ .../MyProjectNameModule.cs | 29 +++++++++++++------ ...CompanyName.MyProjectName.Mvc.Mongo.csproj | 4 +++ .../MyProjectNameModule.cs | 29 +++++++++++++------ .../MyCompanyName.MyProjectName.Mvc.csproj | 4 +++ .../MyProjectNameModule.cs | 29 +++++++++++++------ ...ompanyName.MyProjectName.AuthServer.csproj | 4 +++ .../MyProjectNameAuthServerModule.cs | 11 +++++++ ...anyName.MyProjectName.Blazor.Server.csproj | 4 +++ .../MyProjectNameBlazorModule.cs | 11 +++++++ .../MyCompanyName.MyProjectName.Web.csproj | 4 +++ .../MyProjectNameWebModule.cs | 11 +++++++ 26 files changed, 306 insertions(+), 74 deletions(-) create mode 100644 modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 676b42081f..a672b0b563 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -98,6 +98,7 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien Logger.LogInformation($"'{projectName}' has been successfully created to '{projectArgs.OutputFolder}'"); ConfigureNpmPackagesForTheme(projectArgs); + await CreateOpenIddictPfxFilesAsync(projectArgs); await RunGraphBuildForMicroserviceServiceTemplate(projectArgs); await CreateInitialMigrationsAsync(projectArgs); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index 3e83cd818d..54747e807e 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -16,6 +16,7 @@ using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.ProjectBuilding.Building; using Volo.Abp.Cli.ProjectBuilding.Events; +using Volo.Abp.Cli.ProjectBuilding.Templates; using Volo.Abp.Cli.ProjectBuilding.Templates.App; using Volo.Abp.Cli.ProjectBuilding.Templates.Microservice; using Volo.Abp.Cli.ProjectBuilding.Templates.Module; @@ -481,6 +482,34 @@ public abstract class ProjectCreationCommandBase await InitialMigrationCreator.CreateAsync(Path.GetDirectoryName(efCoreProjectPath), isLayeredTemplate); } + protected Task CreateOpenIddictPfxFilesAsync(ProjectBuildArgs projectArgs) + { + var modules = projectArgs.ExtraProperties[nameof(RandomizeAuthServerPassPhraseStep)].Split(Environment.NewLine); + foreach (var module in modules.Where(x => !string.IsNullOrWhiteSpace(x))) + { + var moduleDirectory = projectArgs.OutputFolder + module; + if (projectArgs.UiFramework != UiFramework.Angular) + { + moduleDirectory = moduleDirectory.Replace("/aspnet-core/", "/"); + } + + moduleDirectory = Path.GetDirectoryName(projectArgs.SolutionName.CompanyName == null + ? moduleDirectory.Replace("MyCompanyName.MyProjectName", projectArgs.SolutionName.ProjectName) + : moduleDirectory.Replace("MyCompanyName", projectArgs.SolutionName.CompanyName).Replace("MyProjectName", projectArgs.SolutionName.ProjectName)); + + if (Directory.Exists(moduleDirectory)) + { + CmdHelper.RunCmd($"dotnet dev-certs https -v -ep openiddict.pfx -p {RandomizeAuthServerPassPhraseStep.RandomPassPhrase}", moduleDirectory); + } + else + { + Logger.LogWarning($"Couldn't find the module directory to create openiddict.pfx file: {moduleDirectory}"); + } + } + + return Task.CompletedTask; + } + protected async Task ConfigurePwaSupportForAngular(ProjectBuildArgs projectArgs) { var isAngular = projectArgs.UiFramework == UiFramework.Angular; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs index 7d42977c97..f2d5a3cf28 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using Volo.Abp.Cli.ProjectBuilding.Building; @@ -8,6 +9,8 @@ public class RandomizeAuthServerPassPhraseStep : ProjectBuildPipelineStep { protected const string DefaultPassPhrase = "00000000-0000-0000-0000-000000000000"; + public readonly static string RandomPassPhrase = Guid.NewGuid().ToString("D"); + public override void Execute(ProjectBuildContext context) { var files = context.Files @@ -15,7 +18,7 @@ public class RandomizeAuthServerPassPhraseStep : ProjectBuildPipelineStep .Where(x => x.Content.IndexOf(DefaultPassPhrase, StringComparison.InvariantCultureIgnoreCase) >= 0) .ToList(); - var randomPassPhrase = Guid.NewGuid().ToString("D"); + var modules = new List(); foreach (var file in files) { file.NormalizeLineEndings(); @@ -25,11 +28,19 @@ public class RandomizeAuthServerPassPhraseStep : ProjectBuildPipelineStep { if (lines[i].Contains(DefaultPassPhrase)) { - lines[i] = lines[i].Replace(DefaultPassPhrase, randomPassPhrase); + lines[i] = lines[i].Replace(DefaultPassPhrase, RandomPassPhrase); + if (file.Name.EndsWith("Module.cs", StringComparison.OrdinalIgnoreCase) && + file.Content.Contains("openiddict.pfx", StringComparison.OrdinalIgnoreCase)) + { + modules.Add(file.Name); + } } } file.SetLines(lines); } + + context.BuildArgs.ExtraProperties.TryAdd(nameof(RandomizeAuthServerPassPhraseStep), string.Empty); + context.BuildArgs.ExtraProperties[nameof(RandomizeAuthServerPassPhraseStep)] += modules.JoinAsString(Environment.NewLine); } } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs new file mode 100644 index 0000000000..2762ac438d --- /dev/null +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs @@ -0,0 +1,26 @@ +using System.IO; +using System.Security.Cryptography.X509Certificates; +using Volo.Abp.OpenIddict; + +namespace Microsoft.Extensions.DependencyInjection; + +public static class OpenIddictServerBuilderExtensions +{ + public static OpenIddictServerBuilder AddProductionEncryptionAndSigningCertificate(this OpenIddictServerBuilder builder, string fileName, string passPhrase) + { + builder.Services.PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + + if (!File.Exists(fileName)) + { + throw new FileNotFoundException($"Signing Certificate couldn't found: {fileName}"); + } + + var certificate = new X509Certificate2(fileName, passPhrase); + builder.AddSigningCertificate(certificate); + builder.AddEncryptionCertificate(certificate); + return builder; + } +} diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj index 06e7905bc9..5d79199f42 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj @@ -90,6 +90,10 @@ + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs index e088b4a84f..e15d976cbd 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs @@ -111,6 +111,9 @@ public class MyProjectNameModule : AbpModule public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + context.Services.PreConfigure(options => { options.AddAssemblyResource( @@ -119,15 +122,23 @@ public class MyProjectNameModule : AbpModule ); }); - PreConfigure(builder => - { - builder.AddValidation(options => - { - options.AddAudiences("MyProjectName"); - options.UseLocalServer(); - options.UseAspNetCore(); - }); - }); + PreConfigure(builder => + { + builder.AddValidation(options => + { + options.AddAudiences("MyProjectName"); + options.UseLocalServer(); + options.UseAspNetCore(); + }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } + }); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index 5ddc04cc03..08d953b32c 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -98,6 +98,10 @@ + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs index b0953ae2eb..68c2a7aeaf 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs @@ -113,6 +113,9 @@ public class MyProjectNameModule : AbpModule public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + context.Services.PreConfigure(options => { options.AddAssemblyResource( @@ -121,15 +124,23 @@ public class MyProjectNameModule : AbpModule ); }); - PreConfigure(builder => - { - builder.AddValidation(options => - { - options.AddAudiences("MyProjectName"); - options.UseLocalServer(); - options.UseAspNetCore(); - }); - }); + PreConfigure(builder => + { + builder.AddValidation(options => + { + options.AddAudiences("MyProjectName"); + options.UseLocalServer(); + options.UseAspNetCore(); + }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } + }); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj index b35c2f4409..bf10276680 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj @@ -86,6 +86,10 @@ + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs index ca98281863..5afe99d918 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs @@ -99,6 +99,9 @@ public class MyProjectNameHostModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + context.Services.PreConfigure(options => { options.AddAssemblyResource( @@ -106,15 +109,23 @@ public class MyProjectNameHostModule : AbpModule ); }); - PreConfigure(builder => - { - builder.AddValidation(options => - { - options.AddAudiences("MyProjectName"); - options.UseLocalServer(); - options.UseAspNetCore(); - }); - }); + PreConfigure(builder => + { + builder.AddValidation(options => + { + options.AddAudiences("MyProjectName"); + options.UseLocalServer(); + options.UseAspNetCore(); + }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } + }); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj index 23b7888885..de4847b621 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj @@ -94,6 +94,10 @@ + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs index 000fbd1e38..2b35b5a910 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs @@ -102,6 +102,9 @@ public class MyProjectNameHostModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + context.Services.PreConfigure(options => { options.AddAssemblyResource( @@ -109,15 +112,23 @@ public class MyProjectNameHostModule : AbpModule ); }); - PreConfigure(builder => - { - builder.AddValidation(options => - { - options.AddAudiences("MyProjectName"); - options.UseLocalServer(); - options.UseAspNetCore(); - }); - }); + PreConfigure(builder => + { + builder.AddValidation(options => + { + options.AddAudiences("MyProjectName"); + options.UseLocalServer(); + options.UseAspNetCore(); + }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } + }); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj index e0fcdbe948..b9a31de30b 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj @@ -82,6 +82,10 @@ + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs index 400e865d1d..22cdc9d3e2 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs @@ -100,6 +100,9 @@ public class MyProjectNameModule : AbpModule public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + context.Services.PreConfigure(options => { options.AddAssemblyResource( @@ -107,15 +110,23 @@ public class MyProjectNameModule : AbpModule ); }); - PreConfigure(builder => - { - builder.AddValidation(options => - { - options.AddAudiences("MyProjectName"); - options.UseLocalServer(); - options.UseAspNetCore(); - }); - }); + PreConfigure(builder => + { + builder.AddValidation(options => + { + options.AddAudiences("MyProjectName"); + options.UseLocalServer(); + options.UseAspNetCore(); + }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } + }); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj index e129b4c456..3ad797051f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj @@ -90,6 +90,10 @@ + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs index 792e93fe86..0accbf476b 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs @@ -103,6 +103,9 @@ public class MyProjectNameModule : AbpModule public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + context.Services.PreConfigure(options => { options.AddAssemblyResource( @@ -110,15 +113,23 @@ public class MyProjectNameModule : AbpModule ); }); - PreConfigure(builder => - { - builder.AddValidation(options => - { - options.AddAudiences("MyProjectName"); - options.UseLocalServer(); - options.UseAspNetCore(); - }); - }); + PreConfigure(builder => + { + builder.AddValidation(options => + { + options.AddAudiences("MyProjectName"); + options.UseLocalServer(); + options.UseAspNetCore(); + }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } + }); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj index 8de870097d..488463868b 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj @@ -85,6 +85,10 @@ + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs index f097d8d434..ded5f4867d 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs @@ -106,6 +106,9 @@ public class MyProjectNameModule : AbpModule public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + context.Services.PreConfigure(options => { options.AddAssemblyResource( @@ -113,15 +116,23 @@ public class MyProjectNameModule : AbpModule ); }); - PreConfigure(builder => - { - builder.AddValidation(options => - { - options.AddAudiences("MyProjectName"); - options.UseLocalServer(); - options.UseAspNetCore(); - }); - }); + PreConfigure(builder => + { + builder.AddValidation(options => + { + options.AddAudiences("MyProjectName"); + options.UseLocalServer(); + options.UseAspNetCore(); + }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } + }); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj index 836102dfc1..380b00e331 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj @@ -93,6 +93,10 @@ + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs index 8b661a5d76..1cb8d45754 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs @@ -108,6 +108,9 @@ public class MyProjectNameModule : AbpModule public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + context.Services.PreConfigure(options => { options.AddAssemblyResource( @@ -115,15 +118,23 @@ public class MyProjectNameModule : AbpModule ); }); - PreConfigure(builder => - { - builder.AddValidation(options => - { - options.AddAudiences("MyProjectName"); - options.UseLocalServer(); - options.UseAspNetCore(); - }); - }); + PreConfigure(builder => + { + builder.AddValidation(options => + { + options.AddAudiences("MyProjectName"); + options.UseLocalServer(); + options.UseAspNetCore(); + }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } + }); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj index d55f24752d..75169de542 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj @@ -31,6 +31,10 @@ + + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs index b044af0d06..0ed35bb9b9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs @@ -52,6 +52,9 @@ public class MyProjectNameAuthServerModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + PreConfigure(builder => { builder.AddValidation(options => @@ -60,6 +63,14 @@ public class MyProjectNameAuthServerModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index e97bb32a25..281777931d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -45,6 +45,10 @@ + + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs index 758b60f74e..4d76b6dd1d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs @@ -62,6 +62,9 @@ public class MyProjectNameBlazorModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + context.Services.PreConfigure(options => { options.AddAssemblyResource( @@ -82,6 +85,14 @@ public class MyProjectNameBlazorModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index 989e9e585c..c7ecae8534 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -31,6 +31,10 @@ + + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 18863a59ff..5f97dcf240 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -57,6 +57,9 @@ public class MyProjectNameWebModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + context.Services.PreConfigure(options => { options.AddAssemblyResource( @@ -77,6 +80,14 @@ public class MyProjectNameWebModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } }); } From f5374c949273fc50e1d5765f5477b703b2b4c2f9 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 30 Aug 2023 15:06:51 +0800 Subject: [PATCH 61/92] Filter specific files. --- .../Templates/RandomizeAuthServerPassPhraseStep.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs index f2d5a3cf28..8653f2fba3 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs @@ -15,6 +15,14 @@ public class RandomizeAuthServerPassPhraseStep : ProjectBuildPipelineStep { var files = context.Files .Where(x => !x.IsDirectory) + .Where(x => x.Name.EndsWith(".cs") || + x.Name.EndsWith(".json") || + x.Name.EndsWith(".yml") || + x.Name.EndsWith(".yaml") || + x.Name.EndsWith(".md") || + x.Name.EndsWith(".ps1") || + x.Name.EndsWith(".sh") || + x.Name.Contains("Dockerfile")) .Where(x => x.Content.IndexOf(DefaultPassPhrase, StringComparison.InvariantCultureIgnoreCase) >= 0) .ToList(); From 74ad6bae415c87f28d247a42749a03ed5f35d575 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 30 Aug 2023 15:46:07 +0800 Subject: [PATCH 62/92] Use a new method to configure `OpenIddictServerBuilder`. --- .../MyProjectNameModule.cs | 14 +++++++------- .../MyProjectNameModule.cs | 14 +++++++------- .../Server.Mongo/MyProjectNameHostModule.cs | 14 +++++++------- .../Server/MyProjectNameHostModule.cs | 14 +++++++------- .../MyProjectNameModule.cs | 14 +++++++------- .../MyProjectNameModule.cs | 14 +++++++------- .../MyProjectNameModule.cs | 14 +++++++------- .../MyProjectNameModule.cs | 14 +++++++------- .../MyProjectNameAuthServerModule.cs | 14 +++++++------- .../MyProjectNameBlazorModule.cs | 14 +++++++------- .../MyProjectNameWebModule.cs | 14 +++++++------- 11 files changed, 77 insertions(+), 77 deletions(-) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs index e15d976cbd..cedaf37632 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs @@ -130,15 +130,15 @@ public class MyProjectNameModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs index 68c2a7aeaf..460a3aaac0 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs @@ -132,15 +132,15 @@ public class MyProjectNameModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs index 5afe99d918..20631921a7 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs @@ -117,15 +117,15 @@ public class MyProjectNameHostModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs index 2b35b5a910..7ec999d8ec 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs @@ -120,15 +120,15 @@ public class MyProjectNameHostModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs index 22cdc9d3e2..19e3ecb931 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs @@ -118,15 +118,15 @@ public class MyProjectNameModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs index 0accbf476b..cf6b711d78 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs @@ -121,15 +121,15 @@ public class MyProjectNameModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs index ded5f4867d..f9d39a6f22 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs @@ -124,15 +124,15 @@ public class MyProjectNameModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs index 1cb8d45754..a5adc6df2a 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs @@ -126,15 +126,15 @@ public class MyProjectNameModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs index 0ed35bb9b9..05fc090272 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs @@ -63,15 +63,15 @@ public class MyProjectNameAuthServerModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs index 4d76b6dd1d..7c5f445b49 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs @@ -85,15 +85,15 @@ public class MyProjectNameBlazorModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 5f97dcf240..622fa3def6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -80,15 +80,15 @@ public class MyProjectNameWebModule : AbpModule options.UseLocalServer(); options.UseAspNetCore(); }); + }); - if (!hostingEnvironment.IsDevelopment()) + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(serverBuilder => { - PreConfigure(serverBuilder => - { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); - }); - } - }); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); + }); + } } public override void ConfigureServices(ServiceConfigurationContext context) From cb2cf7431e27f6214d6650676ac26b5254160852 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 30 Aug 2023 15:55:24 +0800 Subject: [PATCH 63/92] make `openidict.pfx` as EmbeddedResource. --- .../MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj | 3 +++ .../MyCompanyName.MyProjectName.Blazor.Server.csproj | 3 +++ ...nyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj | 3 +++ ...yCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj | 3 +++ .../MyCompanyName.MyProjectName.Host.Mongo.csproj | 3 +++ .../MyCompanyName.MyProjectName.Host.csproj | 3 +++ .../MyCompanyName.MyProjectName.Mvc.Mongo.csproj | 3 +++ .../MyCompanyName.MyProjectName.Mvc.csproj | 3 +++ .../MyCompanyName.MyProjectName.AuthServer.csproj | 3 +++ .../MyCompanyName.MyProjectName.Web.csproj | 3 +++ 10 files changed, 30 insertions(+) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj index 5d79199f42..ed78f8735f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj @@ -92,6 +92,9 @@ + + Always + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index 08d953b32c..fc78a43c84 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -100,6 +100,9 @@ + + Always + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj index bf10276680..e914c83eec 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj @@ -88,6 +88,9 @@ + + Always + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj index de4847b621..e9a23de618 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj @@ -96,6 +96,9 @@ + + Always + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj index b9a31de30b..46d672e2a2 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj @@ -84,6 +84,9 @@ + + Always + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj index 3ad797051f..dd722dcfdf 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj @@ -92,6 +92,9 @@ + + Always + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj index 488463868b..b6f42617b7 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj @@ -87,6 +87,9 @@ + + Always + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj index 380b00e331..c632c3b1bf 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj @@ -95,6 +95,9 @@ + + Always + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj index 75169de542..04658aac37 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj @@ -33,6 +33,9 @@ + + Always + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index c7ecae8534..c9231c1e0e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -33,6 +33,9 @@ + + Always + From d3bfd4e8147ec0e7d2e40a5ba9eac78713275670 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 30 Aug 2023 16:03:02 +0800 Subject: [PATCH 64/92] Set `AddDevelopmentEncryptionAndSigningCertificate` to `false`. --- .../OpenIddictServerBuilderExtensions.cs | 6 ------ .../MyProjectNameModule.cs | 5 +++++ .../MyProjectNameModule.cs | 5 +++++ .../Server.Mongo/MyProjectNameHostModule.cs | 5 +++++ .../Server/MyProjectNameHostModule.cs | 5 +++++ .../MyProjectNameModule.cs | 5 +++++ .../MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs | 5 +++++ .../MyProjectNameModule.cs | 5 +++++ .../MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs | 5 +++++ .../MyProjectNameAuthServerModule.cs | 5 +++++ .../MyProjectNameBlazorModule.cs | 5 +++++ .../MyProjectNameWebModule.cs | 5 +++++ 12 files changed, 55 insertions(+), 6 deletions(-) diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs index 2762ac438d..c99ce5e245 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs @@ -1,6 +1,5 @@ using System.IO; using System.Security.Cryptography.X509Certificates; -using Volo.Abp.OpenIddict; namespace Microsoft.Extensions.DependencyInjection; @@ -8,11 +7,6 @@ public static class OpenIddictServerBuilderExtensions { public static OpenIddictServerBuilder AddProductionEncryptionAndSigningCertificate(this OpenIddictServerBuilder builder, string fileName, string passPhrase) { - builder.Services.PreConfigure(options => - { - options.AddDevelopmentEncryptionAndSigningCertificate = false; - }); - if (!File.Exists(fileName)) { throw new FileNotFoundException($"Signing Certificate couldn't found: {fileName}"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs index cedaf37632..4f1226eeb1 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs @@ -134,6 +134,11 @@ public class MyProjectNameModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs index 460a3aaac0..9839f0db4a 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs @@ -136,6 +136,11 @@ public class MyProjectNameModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs index 20631921a7..c3ad0fb9be 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs @@ -121,6 +121,11 @@ public class MyProjectNameHostModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs index 7ec999d8ec..bff738d7db 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs @@ -124,6 +124,11 @@ public class MyProjectNameHostModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs index 19e3ecb931..285a24a485 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs @@ -122,6 +122,11 @@ public class MyProjectNameModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs index cf6b711d78..41c8306a31 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs @@ -125,6 +125,11 @@ public class MyProjectNameModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs index f9d39a6f22..a0178d34cf 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs @@ -128,6 +128,11 @@ public class MyProjectNameModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs index a5adc6df2a..1174dacea9 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs @@ -130,6 +130,11 @@ public class MyProjectNameModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs index 05fc090272..f1ebc379c2 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs @@ -67,6 +67,11 @@ public class MyProjectNameAuthServerModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs index 7c5f445b49..42f263d23c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs @@ -89,6 +89,11 @@ public class MyProjectNameBlazorModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 622fa3def6..1e04bf1a1e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -84,6 +84,11 @@ public class MyProjectNameWebModule : AbpModule if (!hostingEnvironment.IsDevelopment()) { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + PreConfigure(serverBuilder => { serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000"); From 2c8365b280528a2d58332c5671b1f7ce921c93b9 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 31 Aug 2023 11:15:32 +0800 Subject: [PATCH 65/92] Update MyCompanyName.MyProjectName.Blazor.Server.csproj --- .../MyCompanyName.MyProjectName.Blazor.Server.csproj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index 281777931d..1dea51f001 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -47,6 +47,9 @@ + + Always + From 3c59d3960cd8f429058fe3ed4ee5971b350f8332 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 1 Sep 2023 13:41:56 +0800 Subject: [PATCH 66/92] Enhance `RandomizeAuthServerPassPhraseStep`. --- .../Commands/ProjectCreationCommandBase.cs | 40 +++++++------- .../RandomizeAuthServerPassPhraseStep.cs | 54 ++++++++++++++----- .../MyProjectNameModule.cs | 1 + .../MyProjectNameModule.cs | 1 + .../Server.Mongo/MyProjectNameHostModule.cs | 1 + .../Server/MyProjectNameHostModule.cs | 1 + .../MyProjectNameModule.cs | 1 + .../MyProjectNameModule.cs | 1 + .../MyProjectNameModule.cs | 1 + .../MyProjectNameModule.cs | 1 + .../MyProjectNameAuthServerModule.cs | 1 + .../MyProjectNameBlazorModule.cs | 1 + .../MyProjectNameWebModule.cs | 1 + 13 files changed, 72 insertions(+), 33 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index 54747e807e..cf697fd899 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -484,29 +484,31 @@ public abstract class ProjectCreationCommandBase protected Task CreateOpenIddictPfxFilesAsync(ProjectBuildArgs projectArgs) { - var modules = projectArgs.ExtraProperties[nameof(RandomizeAuthServerPassPhraseStep)].Split(Environment.NewLine); - foreach (var module in modules.Where(x => !string.IsNullOrWhiteSpace(x))) + var module = projectArgs.ExtraProperties[nameof(RandomizeAuthServerPassPhraseStep)]; + if (string.IsNullOrWhiteSpace(module)) { - var moduleDirectory = projectArgs.OutputFolder + module; - if (projectArgs.UiFramework != UiFramework.Angular) - { - moduleDirectory = moduleDirectory.Replace("/aspnet-core/", "/"); - } - - moduleDirectory = Path.GetDirectoryName(projectArgs.SolutionName.CompanyName == null - ? moduleDirectory.Replace("MyCompanyName.MyProjectName", projectArgs.SolutionName.ProjectName) - : moduleDirectory.Replace("MyCompanyName", projectArgs.SolutionName.CompanyName).Replace("MyProjectName", projectArgs.SolutionName.ProjectName)); + return Task.CompletedTask; + } - if (Directory.Exists(moduleDirectory)) - { - CmdHelper.RunCmd($"dotnet dev-certs https -v -ep openiddict.pfx -p {RandomizeAuthServerPassPhraseStep.RandomPassPhrase}", moduleDirectory); - } - else - { - Logger.LogWarning($"Couldn't find the module directory to create openiddict.pfx file: {moduleDirectory}"); - } + var moduleDirectory = projectArgs.OutputFolder + module; + if (projectArgs.UiFramework != UiFramework.Angular) + { + moduleDirectory = moduleDirectory.Replace("/aspnet-core/", "/"); } + moduleDirectory = Path.GetDirectoryName(projectArgs.SolutionName.CompanyName == null + ? moduleDirectory.Replace("MyCompanyName.MyProjectName", projectArgs.SolutionName.ProjectName) + : moduleDirectory.Replace("MyCompanyName", projectArgs.SolutionName.CompanyName).Replace("MyProjectName", projectArgs.SolutionName.ProjectName)); + + if (Directory.Exists(moduleDirectory)) + { + Logger.LogInformation($"Creating openiddict.pfx file on {moduleDirectory}"); + CmdHelper.RunCmd($"dotnet dev-certs https -ep openiddict.pfx -p {RandomizeAuthServerPassPhraseStep.RandomOpenIddictPassword}", moduleDirectory); + } + else + { + Logger.LogWarning($"Couldn't find the module directory to create openiddict.pfx file: {moduleDirectory}"); + } return Task.CompletedTask; } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs index 8653f2fba3..a41c870f41 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs @@ -7,9 +7,13 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates; public class RandomizeAuthServerPassPhraseStep : ProjectBuildPipelineStep { - protected const string DefaultPassPhrase = "00000000-0000-0000-0000-000000000000"; - - public readonly static string RandomPassPhrase = Guid.NewGuid().ToString("D"); + private const string DefaultPassword = "00000000-0000-0000-0000-000000000000"; + private const string KestrelCertificatesDefaultPassword = "Kestrel__Certificates__Default__Password=00000000-0000-0000-0000-000000000000"; + private const string LocalhostPfx = "localhost.pfx -p 00000000-0000-0000-0000-000000000000"; + private const string DotnetDevCerts = "openiddict.pfx -p 00000000-0000-0000-0000-000000000000"; + private const string ProductionEncryptionAndSigningCertificate = "AddProductionEncryptionAndSigningCertificate(\"openiddict.pfx\", \"00000000-0000-0000-0000-000000000000\");"; + private readonly static string RandomPassword = Guid.NewGuid().ToString("D"); + public readonly static string RandomOpenIddictPassword = Guid.NewGuid().ToString("D"); public override void Execute(ProjectBuildContext context) { @@ -23,10 +27,10 @@ public class RandomizeAuthServerPassPhraseStep : ProjectBuildPipelineStep x.Name.EndsWith(".ps1") || x.Name.EndsWith(".sh") || x.Name.Contains("Dockerfile")) - .Where(x => x.Content.IndexOf(DefaultPassPhrase, StringComparison.InvariantCultureIgnoreCase) >= 0) + .Where(x => x.Content.IndexOf(DefaultPassword, StringComparison.InvariantCultureIgnoreCase) >= 0) .ToList(); - var modules = new List(); + string module = null; foreach (var file in files) { file.NormalizeLineEndings(); @@ -34,21 +38,43 @@ public class RandomizeAuthServerPassPhraseStep : ProjectBuildPipelineStep var lines = file.GetLines(); for (var i = 0; i < lines.Length; i++) { - if (lines[i].Contains(DefaultPassPhrase)) + if (lines[i].Contains(KestrelCertificatesDefaultPassword)) + { + lines[i] = lines[i].Replace(KestrelCertificatesDefaultPassword, + KestrelCertificatesDefaultPassword.Replace(DefaultPassword, + RandomPassword)); + } + + if (lines[i].Contains(LocalhostPfx)) + { + lines[i] = lines[i].Replace(LocalhostPfx, + LocalhostPfx.Replace(DefaultPassword, + RandomPassword)); + } + + if (lines[i].Contains(DotnetDevCerts)) { - lines[i] = lines[i].Replace(DefaultPassPhrase, RandomPassPhrase); - if (file.Name.EndsWith("Module.cs", StringComparison.OrdinalIgnoreCase) && - file.Content.Contains("openiddict.pfx", StringComparison.OrdinalIgnoreCase)) - { - modules.Add(file.Name); - } + lines[i] = lines[i].Replace(DotnetDevCerts, + DotnetDevCerts.Replace(DefaultPassword, + RandomOpenIddictPassword)); + } + + if (lines[i].Contains(ProductionEncryptionAndSigningCertificate)) + { + lines[i] = lines[i].Replace(ProductionEncryptionAndSigningCertificate, + ProductionEncryptionAndSigningCertificate.Replace(DefaultPassword, + RandomOpenIddictPassword)); + + module = file.Name; } } file.SetLines(lines); } - context.BuildArgs.ExtraProperties.TryAdd(nameof(RandomizeAuthServerPassPhraseStep), string.Empty); - context.BuildArgs.ExtraProperties[nameof(RandomizeAuthServerPassPhraseStep)] += modules.JoinAsString(Environment.NewLine); + if (!module.IsNullOrWhiteSpace()) + { + context.BuildArgs.ExtraProperties[nameof(RandomizeAuthServerPassPhraseStep)] = module; + } } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs index 4f1226eeb1..faf7121dfc 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs @@ -46,6 +46,7 @@ using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.Blazor.Server; using Volo.Abp.TenantManagement.MongoDB; +using Volo.Abp.OpenIddict; using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.Uow; diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs index 9839f0db4a..d73ba01a49 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs @@ -48,6 +48,7 @@ using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.Blazor.Server; using Volo.Abp.TenantManagement.EntityFrameworkCore; +using Volo.Abp.OpenIddict; using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.Validation.Localization; diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs index c3ad0fb9be..f5160169d4 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs @@ -40,6 +40,7 @@ using Volo.Abp.SettingManagement.MongoDB; using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.MongoDB; +using Volo.Abp.OpenIddict; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.Uow; using Volo.Abp.VirtualFileSystem; diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs index bff738d7db..b76933ce94 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs @@ -42,6 +42,7 @@ using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.EntityFrameworkCore; +using Volo.Abp.OpenIddict; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.Uow; using Volo.Abp.VirtualFileSystem; diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs index 285a24a485..7a99e10635 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs @@ -40,6 +40,7 @@ using Volo.Abp.SettingManagement.MongoDB; using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.MongoDB; +using Volo.Abp.OpenIddict; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.Uow; using Volo.Abp.Validation.Localization; diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs index 41c8306a31..6705902ed4 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs @@ -43,6 +43,7 @@ using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.EntityFrameworkCore; +using Volo.Abp.OpenIddict; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.Validation.Localization; using Volo.Abp.VirtualFileSystem; diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs index a0178d34cf..6e702fd36c 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs @@ -42,6 +42,7 @@ using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.MongoDB; using Volo.Abp.TenantManagement.Web; +using Volo.Abp.OpenIddict; using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.Uow; diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs index 1174dacea9..43c60fc6a7 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs @@ -44,6 +44,7 @@ using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.EntityFrameworkCore; using Volo.Abp.TenantManagement.Web; +using Volo.Abp.OpenIddict; using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.Validation.Localization; diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs index f1ebc379c2..104fe9fed6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs @@ -31,6 +31,7 @@ using Volo.Abp.Caching.StackExchangeRedis; using Volo.Abp.DistributedLocking; using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.OpenIddict; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.UI; using Volo.Abp.VirtualFileSystem; diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs index 42f263d23c..e13c32cbf4 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs @@ -37,6 +37,7 @@ using Volo.Abp.Modularity; using Volo.Abp.SettingManagement.Blazor.Server; using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement.Blazor.Server; +using Volo.Abp.OpenIddict; using Volo.Abp.UI; using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation.Urls; diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 1e04bf1a1e..f9c8d6a1c2 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -33,6 +33,7 @@ using Volo.Abp.PermissionManagement.Web; using Volo.Abp.SettingManagement.Web; using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement.Web; +using Volo.Abp.OpenIddict; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.UI; using Volo.Abp.UI.Navigation; From 6d029f5fd1ee311bf08a61cf714771a365632106 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 3 Sep 2023 19:05:33 +0800 Subject: [PATCH 67/92] Remove `CheckChangeTracking` method. --- .../EntityFrameworkCore/EfCoreRepository.cs | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 0829265044..3f22385ea6 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -108,7 +108,6 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckChangeTracking(); CheckAndSetId(entity); var dbContext = await GetDbContextAsync(); @@ -125,7 +124,6 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task InsertManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckChangeTracking(); var entityArray = entities.ToArray(); if (entityArray.IsNullOrEmpty()) { @@ -161,7 +159,6 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckChangeTracking(); var dbContext = await GetDbContextAsync(); dbContext.Attach(entity); @@ -184,8 +181,6 @@ public class EfCoreRepository : RepositoryBase, IE return; } - CheckChangeTracking(); - cancellationToken = GetCancellationToken(cancellationToken); if (BulkOperationProvider != null) @@ -212,7 +207,6 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckChangeTracking(); var dbContext = await GetDbContextAsync(); dbContext.Set().Remove(entity); @@ -231,8 +225,6 @@ public class EfCoreRepository : RepositoryBase, IE return; } - CheckChangeTracking(); - cancellationToken = GetCancellationToken(cancellationToken); if (BulkOperationProvider != null) @@ -325,7 +317,6 @@ public class EfCoreRepository : RepositoryBase, IE public async override Task DeleteAsync(Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) { - CheckChangeTracking(); var dbContext = await GetDbContextAsync(); var dbSet = dbContext.Set(); @@ -446,15 +437,6 @@ public class EfCoreRepository : RepositoryBase, IE true ); } - - - protected virtual void CheckChangeTracking() - { - if (!ShouldTrackingEntityChange()) - { - Logger.LogWarning("This repository has disabled change tracking. Your changes may not be saved!"); - } - } } public class EfCoreRepository : EfCoreRepository, From 47cd7268d0a9e7b1b3b35290d4f12ef7895f0453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 3 Sep 2023 14:11:25 +0300 Subject: [PATCH 68/92] Remove unnecessary TKey restriction --- .../Repositories/ISupportsExplicitLoading.cs | 4 ++-- .../Domain/Repositories/RepositoryExtensions.cs | 16 ++++++++-------- .../EntityFrameworkCore/EfCoreRepository.cs | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs index 1c51954f57..5131486c1e 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs @@ -7,8 +7,8 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.Domain.Repositories; -public interface ISupportsExplicitLoading - where TEntity : class, IEntity +public interface ISupportsExplicitLoading + where TEntity : class, IEntity { Task EnsureCollectionLoadedAsync( TEntity entity, diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs index cbebf62196..e5c2eb9a3f 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs @@ -15,16 +15,16 @@ namespace Volo.Abp.Domain.Repositories; public static class RepositoryExtensions { - public async static Task EnsureCollectionLoadedAsync( - this IBasicRepository repository, + public async static Task EnsureCollectionLoadedAsync( + this IBasicRepository repository, TEntity entity, Expression>> propertyExpression, CancellationToken cancellationToken = default ) - where TEntity : class, IEntity + where TEntity : class, IEntity where TProperty : class { - var repo = ProxyHelper.UnProxy(repository) as ISupportsExplicitLoading; + var repo = ProxyHelper.UnProxy(repository) as ISupportsExplicitLoading; if (repo != null) { await repo.EnsureCollectionLoadedAsync(entity, propertyExpression, cancellationToken); @@ -40,7 +40,7 @@ public static class RepositoryExtensions where TEntity : class, IEntity where TProperty : class { - var repo = ProxyHelper.UnProxy(repository) as ISupportsExplicitLoading; + var repo = ProxyHelper.UnProxy(repository) as ISupportsExplicitLoading; if (repo != null) { await repo.EnsurePropertyLoadedAsync(entity, propertyExpression, cancellationToken); @@ -60,12 +60,12 @@ public static class RepositoryExtensions } } - public async static Task EnsureExistsAsync( - this IRepository repository, + public async static Task EnsureExistsAsync( + this IRepository repository, Expression> expression, CancellationToken cancellationToken = default ) - where TEntity : class, IEntity + where TEntity : class, IEntity { if (!await repository.AnyAsync(expression, cancellationToken)) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 325ba8345d..581396a390 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -464,7 +464,7 @@ public class EfCoreRepository : RepositoryBase, IE public class EfCoreRepository : EfCoreRepository, IEfCoreRepository, - ISupportsExplicitLoading + ISupportsExplicitLoading where TDbContext : IEfCoreDbContext where TEntity : class, IEntity From 19d4ccc502e332d1a2dfa6a75e133407698f4cd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 3 Sep 2023 14:49:12 +0300 Subject: [PATCH 69/92] Comment on classes. --- .../DisableEntityChangeTrackingAttribute.cs | 3 +++ .../EnableEntityChangeTrackingAttribute.cs | 3 +++ .../Domain/Repositories/RepositoryExtensions.cs | 14 ++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs index d6a73cba32..76a2bdeaa1 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs @@ -2,6 +2,9 @@ using System; namespace Volo.Abp.Domain.Repositories; +/// +/// Ensures that the change tracking in enabled for the given method or class. +/// [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)] public class DisableEntityChangeTrackingAttribute : EntityChangeTrackingAttribute { diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs index a94df978fb..9765d3253f 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs @@ -2,6 +2,9 @@ using System; namespace Volo.Abp.Domain.Repositories; +/// +/// Ensures that the change tracking in enabled for the given method or class. +/// [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)] public class EnableEntityChangeTrackingAttribute : EntityChangeTrackingAttribute { diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs index 710140d2ec..d40449a2e4 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs @@ -145,11 +145,25 @@ public static class RepositoryExtensions } } + /// + /// Disables change tracking mechanism for the given repository. + /// + /// A repository object + /// + /// A disposable object. Dispose it to restore change tracking mechanism back to its previous state. + /// public static IDisposable DisableTracking(this IRepository repository) { return Tracking(repository, false); } + /// + /// Enables change tracking mechanism for the given repository. + /// + /// A repository object + /// + /// A disposable object. Dispose it to restore change tracking mechanism back to its previous state. + /// public static IDisposable EnableTracking(this IRepository repository) { return Tracking(repository, true); From b33ff894fab8b5003cbdc1c34dbf6840c23f7abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 3 Sep 2023 14:51:57 +0300 Subject: [PATCH 70/92] Remove unused namespace --- .../Volo/Abp/Application/Services/ApplicationService.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs index ba82e5bdc2..f0d23fa865 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs @@ -1,4 +1,3 @@ -using JetBrains.Annotations; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; From 8207c915ed3fb837764ab843a31d2670d97b7ad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 3 Sep 2023 15:08:06 +0300 Subject: [PATCH 71/92] Document how to use the change tracking control. --- docs/en/Entity-Framework-Core.md | 6 ++- docs/en/Repositories.md | 71 +++++++++++++++++++++++++++++++- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/docs/en/Entity-Framework-Core.md b/docs/en/Entity-Framework-Core.md index 1f8b9e22f0..cb9393b1aa 100644 --- a/docs/en/Entity-Framework-Core.md +++ b/docs/en/Entity-Framework-Core.md @@ -598,10 +598,14 @@ See also [lazy loading document](https://docs.microsoft.com/en-us/ef/core/queryi ABP Framework provides read-only [repository](Repositories.md) interfaces (`IReadOnlyRepository<...>` or `IReadOnlyBasicRepository<...>`) to explicitly indicate that your purpose is to query data, but not change it. If so, you can inject these interfaces into your services. -Entity Framework Core read-only repository implementation uses [EF Core's No-Tracking feature](https://learn.microsoft.com/en-us/ef/core/querying/tracking#no-tracking-queries). That means the entities returned from the repository will not be tracked by the EF Core [change tracker](https://learn.microsoft.com/en-us/ef/core/change-tracking/), because it is expected that you won't update entities queried from a read-only repository. +Entity Framework Core read-only repository implementation uses [EF Core's No-Tracking feature](https://learn.microsoft.com/en-us/ef/core/querying/tracking#no-tracking-queries). That means the entities returned from the repository will not be tracked by the EF Core [change tracker](https://learn.microsoft.com/en-us/ef/core/change-tracking/), because it is expected that you won't update entities queried from a read-only repository. If you need to track the entities, you can still use the [AsTracking()](https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.entityframeworkqueryableextensions.astracking) extension method on the LINQ expression, or `EnableTracking()` extension method on the repository object (See *Enabling / Disabling the Change Tracking* section in this document). > This behavior works only if the repository object is injected with one of the read-only repository interfaces (`IReadOnlyRepository<...>` or `IReadOnlyBasicRepository<...>`). It won't work if you have injected a standard repository (e.g. `IRepository<...>`) then casted it to a read-only repository interface. +## Enabling / Disabling the Change Tracking + +In addition to the read-only repositories, ABP allows to manually control the change tracking behavior for querying objects. Please see the *Enabling / Disabling the Change Tracking* section of the [Repositories documentation](Repositories.md) to learn how to use it. + ## Access to the EF Core API In most cases, you want to hide EF Core APIs behind a repository (this is the main purpose of the repository pattern). However, if you want to access the `DbContext` instance over the repository, you can use `GetDbContext()` or `GetDbSet()` extension methods. Example: diff --git a/docs/en/Repositories.md b/docs/en/Repositories.md index a93460bbdd..ec55db7f3d 100644 --- a/docs/en/Repositories.md +++ b/docs/en/Repositories.md @@ -176,6 +176,75 @@ Some features (like soft-delete, multi-tenancy and audit logging) won't work, so The `EnsureExistsAsync` extension method accepts entity id or entities query expression to ensure entities exist, otherwise, it will throw `EntityNotFoundException`. +### Enabling / Disabling the Change Tracking + +ABP provides repository extension methods and attributes those can be used to control the change tracking behavior for queried entities in the underlying database provider. + +Disabling change tracking can gain performance if you query many entities from the database for read-only purposes. Querying single or a few entities won't make much performance difference, but you are free to use it whenever you like. + +> If the underlying database provider doesn't support change tracking, then this system won't have any effect. [Entity Framework Core](Entity-Framework-Core.md) supports change tracking, for example, while the [MongoDB](MongoDB.md) provider doesn't support it. + +#### Repository Extension Methods for Change Tracking + +Change tracking is enabled unless you explicitly disable it. + +**Example: Using the `DisableTracking` extension method** + +````csharp +public class MyDemoService : ApplicationService +{ + private readonly IRepository _personRepository; + + public MyDemoService(IRepository personRepository) + { + _personRepository = personRepository; + } + + public async Task DoItAsync() + { + // Change tracking is enabled in that point (by default) + + using (_personRepository.DisableTracking()) + { + // Change tracking is disabled in that point + var list = await _personRepository.GetPagedListAsync(0, 100, "Name ASC"); + } + + // Change tracking is enabled in that point (by default) + } +} +```` + +> `DisableTracking` extension method returns a `IDisposable` object, so you can safely **restore** the change tracking behavior to the **previous state** one the `using` block ends. Basically, `DisableTracking` method ensures that the change tracking is disabled inside the `using` block, but doesn't affect outside of the `using` block. That means, if change tracking was already disabled, `DisableTracking` and the disposable return value do nothing. + +`EnableTracking()` method works exactly opposite to the `DisableTracking()` method. You typically won't use it (because the change tracking is already enabled by default), but it is there in case of you need that. + +#### Attributes for Change Tracking + +You typically use the `DisableTracking()` method for the application service methods those only returns data, but doesn't make any change on entities. For such cases, you can use the `DisableEntityChangeTracking` attribute on your method/class as a shortcut to disable the change tracking for whole method body. + +**Example: Using the `DisableEntityChangeTracking` attribute on a method** + +````csharp +[DisableEntityChangeTracking] +public virtual async Task> GetListAsync() +{ + /* We disabled the change tracking in this method + because we won't change the people objects */ + var people = await _personRepository.GetListAsync(); + return ObjectMapper.Map, List(people); +} +```` + +`EnableEntityChangeTracking` can be used for the opposite purpose, and it ensures that the change tracking is enabled for a given method. Since the change tracking is enabled by default, `EnableEntityChangeTracking` may be needed only if you know that your method is called from a context that disables the change tracking. + +`DisableEntityChangeTracking` and `EnableEntityChangeTracking` attributes can be used on a **method** or on a **class** (which affects all of the class methods). + +ABP uses dynamic proxying to make these attributes working. There are some rules here: + +* If you are **not injecting** the service over an interface (like `IPersonAppService`), then the methods of the service must be `virtual`. Otherwise, [dynamic proxy / interception](Dynamic-Proxying-Interceptors.md) system can not work. +* Only `async` methods (methods returning a `Task` or `Task`) are intercepted. + ## Other Generic Repository Types Standard `IRepository` interface exposes the standard `IQueryable` and you can freely query using the standard LINQ methods. This is fine for most of the applications. However, some ORM providers or database systems may not support standard `IQueryable` interface. If you want to use such providers, you can't rely on the `IQueryable`. @@ -217,7 +286,7 @@ They can all be seen as below: #### Read Only Repositories behavior in Entity Framework Core -Entity Framework Core read-only repository implementation uses [EF Core's No-Tracking feature](https://learn.microsoft.com/en-us/ef/core/querying/tracking#no-tracking-queries). That means the entities returned from the repository will not be tracked by the EF Core [change tracker](https://learn.microsoft.com/en-us/ef/core/change-tracking/), because it is expected that you won't update entities queried from a read-only repository. If you need to track the entities, you can still uses [AsTracking()](https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.entityframeworkqueryableextensions.astracking) extension method. +Entity Framework Core read-only repository implementation uses [EF Core's No-Tracking feature](https://learn.microsoft.com/en-us/ef/core/querying/tracking#no-tracking-queries). That means the entities returned from the repository will not be tracked by the EF Core [change tracker](https://learn.microsoft.com/en-us/ef/core/change-tracking/), because it is expected that you won't update entities queried from a read-only repository. If you need to track the entities, you can still use the [AsTracking()](https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.entityframeworkqueryableextensions.astracking) extension method on the LINQ expression, or `EnableTracking()` extension method on the repository object (See *Enabling / Disabling the Change Tracking* section in this document). > This behavior works only if the repository object is injected with one of the read-only repository interfaces (`IReadOnlyRepository<...>` or `IReadOnlyBasicRepository<...>`). It won't work if you have injected a standard repository (e.g. `IRepository<...>`) then casted it to a read-only repository interface. From d6256540f075147d7ddee5d6f63107d8ba372523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 3 Sep 2023 15:12:19 +0300 Subject: [PATCH 72/92] Added note for inserted/updated entities --- docs/en/Repositories.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/en/Repositories.md b/docs/en/Repositories.md index ec55db7f3d..03fb27ab50 100644 --- a/docs/en/Repositories.md +++ b/docs/en/Repositories.md @@ -245,6 +245,8 @@ ABP uses dynamic proxying to make these attributes working. There are some rules * If you are **not injecting** the service over an interface (like `IPersonAppService`), then the methods of the service must be `virtual`. Otherwise, [dynamic proxy / interception](Dynamic-Proxying-Interceptors.md) system can not work. * Only `async` methods (methods returning a `Task` or `Task`) are intercepted. +> Change tracking behavior doesn't affect tracking entity objects returned from `InsertAsync` and `UpdateAsync` methods. The objects returned from these methods are always tracked (if the underlying provider has the change tracking feature) and any change you made to these objects are saved into the database. + ## Other Generic Repository Types Standard `IRepository` interface exposes the standard `IQueryable` and you can freely query using the standard LINQ methods. This is fine for most of the applications. However, some ORM providers or database systems may not support standard `IQueryable` interface. If you want to use such providers, you can't rely on the `IQueryable`. From 9356884516bc86b75dd72139c3a98aafd25fb1f4 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 3 Sep 2023 20:14:28 +0800 Subject: [PATCH 73/92] Rename `RepositoryInterceptor` and so on to `ChangeTrackingInterceptor`. --- .../Volo/Abp/Domain/AbpDddDomainModule.cs | 3 +- .../ChangeTrackingHelper.cs} | 5 +- .../ChangeTrackingInterceptor.cs} | 9 ++-- .../ChangeTrackingInterceptorRegistrar.cs} | 8 +-- .../DisableEntityChangeTrackingAttribute.cs | 4 +- .../EnableEntityChangeTrackingAttribute.cs | 4 +- .../EntityChangeTrackingAttribute.cs | 4 +- .../ChangeTrackingInterceptor_Tests.cs} | 49 ++----------------- 8 files changed, 23 insertions(+), 63 deletions(-) rename framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/{Repositories/RepositoryHelper.cs => ChangeTracking/ChangeTrackingHelper.cs} (93%) rename framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/{Repositories/RepositoryInterceptor.cs => ChangeTracking/ChangeTrackingInterceptor.cs} (61%) rename framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/{Repositories/RepositoryInterceptorRegistrar.cs => ChangeTracking/ChangeTrackingInterceptorRegistrar.cs} (54%) rename framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/{Repositories => ChangeTracking}/DisableEntityChangeTrackingAttribute.cs (83%) rename framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/{Repositories => ChangeTracking}/EnableEntityChangeTrackingAttribute.cs (83%) rename framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/{Repositories => ChangeTracking}/EntityChangeTrackingAttribute.cs (80%) rename framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/{Repositories/RepositoryInterceptor_Tests.cs => ChangeTracking/ChangeTrackingInterceptor_Tests.cs} (77%) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs index 2e67c42820..de6632704d 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs @@ -2,6 +2,7 @@ using Volo.Abp.Auditing; using Volo.Abp.Caching; using Volo.Abp.Data; +using Volo.Abp.Domain.ChangeTracking; using Volo.Abp.Domain.Repositories; using Volo.Abp.EventBus; using Volo.Abp.ExceptionHandling; @@ -30,6 +31,6 @@ public class AbpDddDomainModule : AbpModule public override void PreConfigureServices(ServiceConfigurationContext context) { context.Services.AddConventionalRegistrar(new AbpRepositoryConventionalRegistrar()); - context.Services.OnRegistered(RepositoryInterceptorRegistrar.RegisterIfNeeded); + context.Services.OnRegistered(ChangeTrackingInterceptorRegistrar.RegisterIfNeeded); } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/ChangeTrackingHelper.cs similarity index 93% rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs rename to framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/ChangeTrackingHelper.cs index 2c57dd9640..d2235afd22 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/ChangeTrackingHelper.cs @@ -1,10 +1,11 @@ using System.Linq; using System.Reflection; using JetBrains.Annotations; +using Volo.Abp.Domain.Repositories; -namespace Volo.Abp.Domain.Repositories; +namespace Volo.Abp.Domain.ChangeTracking; -public static class RepositoryHelper +public static class ChangeTrackingHelper { public static bool IsEntityChangeTrackingType(TypeInfo implementationType) { diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/ChangeTrackingInterceptor.cs similarity index 61% rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs rename to framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/ChangeTrackingInterceptor.cs index e9727b932f..307e2dee6a 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptor.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/ChangeTrackingInterceptor.cs @@ -1,21 +1,22 @@ using System.Threading.Tasks; using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; using Volo.Abp.DynamicProxy; -namespace Volo.Abp.Domain.Repositories; +namespace Volo.Abp.Domain.ChangeTracking; -public class RepositoryInterceptor : AbpInterceptor, ITransientDependency +public class ChangeTrackingInterceptor : AbpInterceptor, ITransientDependency { private readonly IEntityChangeTrackingProvider _entityChangeTrackingProvider; - public RepositoryInterceptor(IEntityChangeTrackingProvider entityChangeTrackingProvider) + public ChangeTrackingInterceptor(IEntityChangeTrackingProvider entityChangeTrackingProvider) { _entityChangeTrackingProvider = entityChangeTrackingProvider; } public async override Task InterceptAsync(IAbpMethodInvocation invocation) { - if (!RepositoryHelper.IsEntityChangeTrackingMethod(invocation.Method, out var changeTrackingAttribute)) + if (!ChangeTrackingHelper.IsEntityChangeTrackingMethod(invocation.Method, out var changeTrackingAttribute)) { await invocation.ProceedAsync(); return; diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptorRegistrar.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/ChangeTrackingInterceptorRegistrar.cs similarity index 54% rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptorRegistrar.cs rename to framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/ChangeTrackingInterceptorRegistrar.cs index 538fa72774..0249c570dd 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryInterceptorRegistrar.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/ChangeTrackingInterceptorRegistrar.cs @@ -3,20 +3,20 @@ using System.Reflection; using Volo.Abp.DependencyInjection; using Volo.Abp.DynamicProxy; -namespace Volo.Abp.Domain.Repositories; +namespace Volo.Abp.Domain.ChangeTracking; -public class RepositoryInterceptorRegistrar +public class ChangeTrackingInterceptorRegistrar { public static void RegisterIfNeeded(IOnServiceRegistredContext context) { if (ShouldIntercept(context.ImplementationType)) { - context.Interceptors.TryAdd(); + context.Interceptors.TryAdd(); } } private static bool ShouldIntercept(Type type) { - return !DynamicProxyIgnoreTypes.Contains(type) && RepositoryHelper.IsEntityChangeTrackingType(type.GetTypeInfo()); + return !DynamicProxyIgnoreTypes.Contains(type) && ChangeTrackingHelper.IsEntityChangeTrackingType(type.GetTypeInfo()); } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/DisableEntityChangeTrackingAttribute.cs similarity index 83% rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs rename to framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/DisableEntityChangeTrackingAttribute.cs index 76a2bdeaa1..98011bda5f 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/DisableEntityChangeTrackingAttribute.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/DisableEntityChangeTrackingAttribute.cs @@ -1,11 +1,11 @@ using System; -namespace Volo.Abp.Domain.Repositories; +namespace Volo.Abp.Domain.ChangeTracking; /// /// Ensures that the change tracking in enabled for the given method or class. /// -[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)] +[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] public class DisableEntityChangeTrackingAttribute : EntityChangeTrackingAttribute { public DisableEntityChangeTrackingAttribute() diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/EnableEntityChangeTrackingAttribute.cs similarity index 83% rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs rename to framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/EnableEntityChangeTrackingAttribute.cs index 9765d3253f..542b60cd74 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EnableEntityChangeTrackingAttribute.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/EnableEntityChangeTrackingAttribute.cs @@ -1,11 +1,11 @@ using System; -namespace Volo.Abp.Domain.Repositories; +namespace Volo.Abp.Domain.ChangeTracking; /// /// Ensures that the change tracking in enabled for the given method or class. /// -[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)] +[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] public class EnableEntityChangeTrackingAttribute : EntityChangeTrackingAttribute { public EnableEntityChangeTrackingAttribute() diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/EntityChangeTrackingAttribute.cs similarity index 80% rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs rename to framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/EntityChangeTrackingAttribute.cs index 3719cd3c0c..3446a49354 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/EntityChangeTrackingAttribute.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/ChangeTracking/EntityChangeTrackingAttribute.cs @@ -1,8 +1,8 @@ using System; -namespace Volo.Abp.Domain.Repositories; +namespace Volo.Abp.Domain.ChangeTracking; -[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)] +[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] public abstract class EntityChangeTrackingAttribute : Attribute { public virtual bool IsEnabled { get; set; } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/RepositoryInterceptor_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ChangeTracking/ChangeTrackingInterceptor_Tests.cs similarity index 77% rename from framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/RepositoryInterceptor_Tests.cs rename to framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ChangeTracking/ChangeTrackingInterceptor_Tests.cs index 8230a6ec7e..87b487b68a 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/RepositoryInterceptor_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ChangeTracking/ChangeTrackingInterceptor_Tests.cs @@ -4,14 +4,15 @@ using System.Linq; using System.Threading.Tasks; using Shouldly; using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.ChangeTracking; using Volo.Abp.Domain.Repositories; using Volo.Abp.TestApp.Domain; using Volo.Abp.TestApp.Testing; using Xunit; -namespace Volo.Abp.EntityFrameworkCore.Repositories; +namespace Volo.Abp.EntityFrameworkCore.ChangeTracking; -public class RepositoryInterceptor_Tests : TestAppTestBase +public class ChangeTrackingInterceptor_Tests : TestAppTestBase { [Fact] public async Task ReadOnly_Repository_Should_Not_Track_Entities() @@ -65,18 +66,6 @@ public class RepositoryInterceptor_Tests : TestAppTestBase - { - var service = GetRequiredService(); - var db = await repository.GetDbContextAsync(); - db.ChangeTracker.Entries().Count().ShouldBe(0); - - var list = await service.GetPeoplesAsync(); - list.Count.ShouldBeGreaterThan(0); - - db.ChangeTracker.Entries().Count().ShouldBe(1); // Track one entity from GetPeoplesAsync - }); - await WithUnitOfWorkAsync(async () => { var service = GetRequiredService(); @@ -163,38 +152,6 @@ public class MyServiceEnableEntityChangeTracking : ITransientDependency } } - -[EnableEntityChangeTracking] -public interface IMyServiceEnableEntityChangeTrackingOnInterface -{ - -} - -public class MyServiceEnableEntityChangeTrackingOnInterface : IMyServiceEnableEntityChangeTrackingOnInterface, ITransientDependency -{ - private readonly IRepository _repository; - - public MyServiceEnableEntityChangeTrackingOnInterface(IRepository repository) - { - _repository = repository; - } - - public virtual async Task> GetPeoplesAsync() - { - var p1 = await GetPeopleAsync(); - var p2 = await _repository.FindAsync(x => x.Name == "people2"); - - return new List {p1, p2}; - } - - [DisableEntityChangeTracking] - public virtual async Task GetPeopleAsync() - { - var p1 = await _repository.FindAsync(x => x.Name == "people1"); - return p1; - } -} - public class MyServiceChangeTrackingByEntityChangeTrackingProvider : ITransientDependency { private readonly IRepository _repository; From 129a0bf17a7551b2dec7e0abe2ab5a8a89fae469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 3 Sep 2023 20:09:20 +0300 Subject: [PATCH 74/92] Rename AbpAutoMapperExtensibleDtoExtensions to AbpAutoMapperExtensibleObjectExtensions --- ...xtensions.cs => AbpAutoMapperExtensibleObjectExtensions.cs} | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) rename framework/src/Volo.Abp.AutoMapper/AutoMapper/{AbpAutoMapperExtensibleDtoExtensions.cs => AbpAutoMapperExtensibleObjectExtensions.cs} (96%) diff --git a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleObjectExtensions.cs similarity index 96% rename from framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs rename to framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleObjectExtensions.cs index 58047f575d..ea746500d6 100644 --- a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs +++ b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleObjectExtensions.cs @@ -1,12 +1,11 @@ using System.Collections.Generic; -using Volo.Abp; using Volo.Abp.AutoMapper; using Volo.Abp.Data; using Volo.Abp.ObjectExtending; namespace AutoMapper; -public static class AbpAutoMapperExtensibleDtoExtensions +public static class AbpAutoMapperExtensibleObjectExtensions { public static IMappingExpression MapExtraProperties( this IMappingExpression mappingExpression, From 3634de2b88284c3d0e15c1e5a34104bd39933429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 3 Sep 2023 21:31:28 +0300 Subject: [PATCH 75/92] Remove unnecesarry NotNull attribute --- .../Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogScope.cs | 5 +---- .../Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditingManager.cs | 4 +--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogScope.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogScope.cs index 8e9f14e976..e3e8f22d0a 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogScope.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogScope.cs @@ -1,9 +1,6 @@ -using JetBrains.Annotations; - -namespace Volo.Abp.Auditing; +namespace Volo.Abp.Auditing; public interface IAuditLogScope { - [NotNull] AuditLogInfo Log { get; } } diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditingManager.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditingManager.cs index a1091b8600..c496a22340 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditingManager.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditingManager.cs @@ -1,6 +1,4 @@ -using JetBrains.Annotations; - -namespace Volo.Abp.Auditing; +namespace Volo.Abp.Auditing; public interface IAuditingManager { From cc0a2c8bb5a84877293b7babdccd3da598bfcc60 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 4 Sep 2023 14:10:58 +0800 Subject: [PATCH 76/92] Disable logging for `HEAD` if `IsEnabledForGetRequests` is `false`. --- .../Auditing/AbpAuditingMiddleware.cs | 9 +++++---- .../Mvc/Auditing/AuditTestController_Tests.cs | 19 ++++++++++++++++++- .../Mvc/Auditing/AuditTestPage_Tests.cs | 18 ++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs index 83deaef26a..0c797a8dc2 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs @@ -98,13 +98,13 @@ public class AbpAuditingMiddleware : IMiddleware, ITransientDependency { return false; } - - if (!AuditingOptions.IsEnabledForIntegrationServices && + + if (!AuditingOptions.IsEnabledForIntegrationServices && context.Request.Path.Value.StartsWith($"/{AbpAspNetCoreConsts.DefaultIntegrationServiceApiPrefix}/")) { return true; } - + if (AspNetCoreAuditingOptions.IgnoredUrls.Any(x => context.Request.Path.Value.StartsWith(x))) { return true; @@ -134,7 +134,8 @@ public class AbpAuditingMiddleware : IMiddleware, ITransientDependency } if (!AuditingOptions.IsEnabledForGetRequests && - string.Equals(httpContext.Request.Method, HttpMethods.Get, StringComparison.OrdinalIgnoreCase)) + (string.Equals(httpContext.Request.Method, HttpMethods.Get, StringComparison.OrdinalIgnoreCase) || + string.Equals(httpContext.Request.Method, HttpMethods.Head, StringComparison.OrdinalIgnoreCase))) { return false; } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs index 78d537e252..77aef5d014 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using System.Net.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; @@ -41,6 +42,23 @@ public class AuditTestController_Tests : AspNetCoreMvcTestBase x.Actions.Any(a => a.MethodName == nameof(AuditTestController.Get)))); } + + [Fact] + public async Task Should_Disable_AuditLog_For_Get_And_Head_Requests() + { + _options.IsEnabledForGetRequests = false; + await GetResponseAsync("api/audit-test/audit-success"); + await _auditingStore.Received().DidNotReceive().SaveAsync(Arg.Any()); + + using (var requestMessage = new HttpRequestMessage(HttpMethod.Head, "api/audit-test/audit-success")) + { + var response = await Client.SendAsync(requestMessage); + response.StatusCode.ShouldBe(System.Net.HttpStatusCode.OK); + } + + await _auditingStore.Received().DidNotReceive().SaveAsync(Arg.Any()); + } + [Fact] public async Task Should_Trigger_Middleware_And_AuditLog_Success_For_GetRequests() { @@ -50,7 +68,6 @@ public class AuditTestController_Tests : AspNetCoreMvcTestBase await _auditingStore.Received().SaveAsync(Arg.Any()); } - [Fact] public async Task Should_Trigger_Middleware_And_AuditLog_Success_For_Specified_Requests() { diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs index aae671d6d4..32ce454dd7 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs @@ -1,11 +1,13 @@ using System.Collections.Generic; using System.Linq; +using System.Net.Http; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using NSubstitute; +using Shouldly; using Volo.Abp.Auditing; using Xunit; @@ -40,6 +42,22 @@ public class AuditTestPage_Tests : AspNetCoreMvcTestBase x.Actions.Any(a => a.MethodName == nameof(AuditTestPage.OnGet)))); } + [Fact] + public async Task Should_Disable_AuditLog_For_Get_And_Head_Requests() + { + _options.IsEnabledForGetRequests = false; + await GetResponseAsync("/Auditing/AuditTestPage"); + await _auditingStore.Received().DidNotReceive().SaveAsync(Arg.Any()); + + using (var requestMessage = new HttpRequestMessage(HttpMethod.Head, "/Auditing/AuditTestPage")) + { + var response = await Client.SendAsync(requestMessage); + response.StatusCode.ShouldBe(System.Net.HttpStatusCode.OK); + } + + await _auditingStore.Received().DidNotReceive().SaveAsync(Arg.Any()); + } + [Fact] public async Task Should_Trigger_Middleware_And_AuditLog_Success_For_GetRequests() { From a75b74765b8efbf180873cf40e2bda65c2e20260 Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 4 Sep 2023 10:06:57 +0300 Subject: [PATCH 77/92] Update en.json --- .../AbpIoLocalization/Community/Localization/Resources/en.json | 1 + 1 file changed, 1 insertion(+) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 0377689bfc..4951ee85b4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -37,6 +37,7 @@ "ThisExtensionIsNotAllowed": "This extension is not allowed.", "TheFileIsTooLarge": "The file is too large.", "GoToThePost": "Go to the Post", + "GoToTheVideo": "Go to the Video", "Contribute": "Contribute", "OverallProgress": "Overall Progress", "Done": "Done", From fd55eb68f292354a37f0119f4e2074164e63d1e4 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 4 Sep 2023 15:34:21 +0800 Subject: [PATCH 78/92] Enable nullable annotations for Volo.Abp.MongoDb --- .../AbpMongoDbServiceCollectionExtensions.cs | 2 +- .../Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj | 2 ++ .../MongoDB/IMongoDbBulkOperationProvider.cs | 6 ++-- .../MongoDB/IMongoDbRepository.cs | 4 +-- .../MongoDB/IMongoDbRepositoryFilterer.cs | 2 +- .../Repositories/MongoDB/MongoDbRepository.cs | 32 +++++++++---------- .../MongoDB/MongoDbRepositoryFilterer.cs | 2 +- .../MongoDbCoreRepositoryExtensions.cs | 4 +-- .../Volo/Abp/MongoDB/AbpMongoDbContext.cs | 12 +++---- .../Abp/MongoDB/AbpMongoDbContextOptions.cs | 2 +- ...bpMongoModelBuilderConfigurationOptions.cs | 3 +- .../DistributedEvents/IncomingEventRecord.cs | 6 ++-- .../DistributedEvents/OutgoingEventRecord.cs | 4 +-- .../Volo/Abp/MongoDB/IAbpMongoDbContext.cs | 2 +- .../Volo/Abp/MongoDB/IMongoModelBuilder.cs | 4 +-- .../Abp/MongoDB/MongoCollectionAttribute.cs | 2 +- .../MongoDB/MongoDbAsyncQueryableProvider.cs | 24 +++++++------- .../Abp/MongoDB/MongoEntityModelBuilder.cs | 2 +- .../Volo/Abp/MongoDB/MongoModelBuilder.cs | 6 ++-- .../UnitOfWorkMongoDbContextProvider.cs | 8 ++--- 20 files changed, 66 insertions(+), 63 deletions(-) diff --git a/framework/src/Volo.Abp.MongoDB/Microsoft/Extensions/DependencyInjection/AbpMongoDbServiceCollectionExtensions.cs b/framework/src/Volo.Abp.MongoDB/Microsoft/Extensions/DependencyInjection/AbpMongoDbServiceCollectionExtensions.cs index 872c591c8a..71b6231ef7 100644 --- a/framework/src/Volo.Abp.MongoDB/Microsoft/Extensions/DependencyInjection/AbpMongoDbServiceCollectionExtensions.cs +++ b/framework/src/Volo.Abp.MongoDB/Microsoft/Extensions/DependencyInjection/AbpMongoDbServiceCollectionExtensions.cs @@ -10,7 +10,7 @@ namespace Microsoft.Extensions.DependencyInjection; public static class AbpMongoDbServiceCollectionExtensions { - public static IServiceCollection AddMongoDbContext(this IServiceCollection services, Action optionsBuilder = null) //Created overload instead of default parameter + public static IServiceCollection AddMongoDbContext(this IServiceCollection services, Action? optionsBuilder = null) //Created overload instead of default parameter where TMongoDbContext : AbpMongoDbContext { var options = new AbpMongoDbContextRegistrationOptions(typeof(TMongoDbContext), services); diff --git a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj index 5857929d00..c364a2b0e0 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj +++ b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.MongoDB Volo.Abp.MongoDB $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbBulkOperationProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbBulkOperationProvider.cs index 47853f24d6..eb8d04d52c 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbBulkOperationProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbBulkOperationProvider.cs @@ -11,7 +11,7 @@ public interface IMongoDbBulkOperationProvider Task InsertManyAsync( IMongoDbRepository repository, IEnumerable entities, - IClientSessionHandle sessionHandle, + IClientSessionHandle? sessionHandle, bool autoSave, CancellationToken cancellationToken ) @@ -20,7 +20,7 @@ public interface IMongoDbBulkOperationProvider Task UpdateManyAsync( IMongoDbRepository repository, IEnumerable entities, - IClientSessionHandle sessionHandle, + IClientSessionHandle? sessionHandle, bool autoSave, CancellationToken cancellationToken ) @@ -29,7 +29,7 @@ public interface IMongoDbBulkOperationProvider Task DeleteManyAsync( IMongoDbRepository repository, IEnumerable entities, - IClientSessionHandle sessionHandle, + IClientSessionHandle? sessionHandle, bool autoSave, CancellationToken cancellationToken ) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs index eeac0dc2e2..a687ba2bf9 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs @@ -23,9 +23,9 @@ public interface IMongoDbRepository : IRepository [Obsolete("Use GetMongoQueryableAsync method.")] IMongoQueryable GetMongoQueryable(); - Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default, AggregateOptions options = null); + Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default, AggregateOptions? options = null); - Task> GetAggregateAsync(CancellationToken cancellationToken = default, AggregateOptions options = null); + Task> GetAggregateAsync(CancellationToken cancellationToken = default, AggregateOptions? options = null); } public interface IMongoDbRepository : IMongoDbRepository, IRepository diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepositoryFilterer.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepositoryFilterer.cs index 1fff832d76..f02beed826 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepositoryFilterer.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepositoryFilterer.cs @@ -17,7 +17,7 @@ public interface IMongoDbRepositoryFilterer : IMongoDbRepositoryF { Task> CreateEntityFilterAsync(TKey id, bool applyFilters = false); - Task> CreateEntityFilterAsync(TEntity entity, bool withConcurrencyStamp = false, string concurrencyStamp = null); + Task> CreateEntityFilterAsync(TEntity entity, bool withConcurrencyStamp = false, string? concurrencyStamp = null); /// /// Creates filter for given entities. diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 4ebe61f64e..8c3f3e2526 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -43,9 +43,9 @@ public class MongoDbRepository } [Obsolete("Use GetSessionHandleAsync method.")] - protected virtual IClientSessionHandle SessionHandle => DbContext.SessionHandle; + protected virtual IClientSessionHandle? SessionHandle => DbContext.SessionHandle; - protected async Task GetSessionHandleAsync(CancellationToken cancellationToken = default) + protected async Task GetSessionHandleAsync(CancellationToken cancellationToken = default) { return (await GetDbContextAsync(GetCancellationToken(cancellationToken))).SessionHandle; } @@ -96,9 +96,9 @@ public class MongoDbRepository public IAuditPropertySetter AuditPropertySetter => LazyServiceProvider.LazyGetRequiredService(); - public IMongoDbBulkOperationProvider BulkOperationProvider => LazyServiceProvider.LazyGetService(); + public IMongoDbBulkOperationProvider? BulkOperationProvider => LazyServiceProvider.LazyGetService(); - public IMongoDbRepositoryFilterer RepositoryFilterer => LazyServiceProvider.LazyGetService>(); + public IMongoDbRepositoryFilterer RepositoryFilterer => LazyServiceProvider.LazyGetService>()!; public MongoDbRepository(IMongoDbContextProvider dbContextProvider) { @@ -382,7 +382,7 @@ public class MongoDbRepository if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity)) && !IsHardDeleted(entity)) { ObjectHelper.TrySetProperty(((ISoftDelete)entity), x => x.IsDeleted, () => true); - softDeletedEntities.Add(entity, SetNewConcurrencyStamp(entity)); + softDeletedEntities.Add(entity, SetNewConcurrencyStamp(entity)!); } else { @@ -525,7 +525,7 @@ public class MongoDbRepository return await GetMongoQueryableAsync(); } - public async override Task FindAsync( + public async override Task FindAsync( Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) @@ -547,12 +547,12 @@ public class MongoDbRepository ); } - public virtual Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default, AggregateOptions aggregateOptions = null) + public virtual Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default, AggregateOptions? aggregateOptions = null) { return GetMongoQueryableAsync(cancellationToken, aggregateOptions); } - protected virtual async Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default, AggregateOptions aggregateOptions = null) + protected virtual async Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default, AggregateOptions? aggregateOptions = null) { cancellationToken = GetCancellationToken(cancellationToken); @@ -566,7 +566,7 @@ public class MongoDbRepository ); } - public virtual async Task> GetAggregateAsync(CancellationToken cancellationToken = default, AggregateOptions aggregateOptions = null) + public virtual async Task> GetAggregateAsync(CancellationToken cancellationToken = default, AggregateOptions? aggregateOptions = null) { cancellationToken = GetCancellationToken(cancellationToken); @@ -602,7 +602,7 @@ public class MongoDbRepository return hardDeletedEntities.Contains(entity); } - protected virtual Task> CreateEntityFilterAsync(TEntity entity, bool withConcurrencyStamp = false, string concurrencyStamp = null) + protected virtual Task> CreateEntityFilterAsync(TEntity entity, bool withConcurrencyStamp = false, string? concurrencyStamp = null) { throw new NotImplementedException( $"{nameof(CreateEntityFilterAsync)} is not implemented for MongoDB by default. It should be overriden and implemented by the deriving class!" @@ -737,7 +737,7 @@ public class MongoDbRepository /// if given entity implements interface. /// Returns the old value. /// - protected virtual string SetNewConcurrencyStamp(TEntity entity) + protected virtual string? SetNewConcurrencyStamp(TEntity entity) { if (!(entity is IHasConcurrencyStamp concurrencyStampEntity)) { @@ -770,7 +770,7 @@ public class MongoDbRepository where TMongoDbContext : IAbpMongoDbContext where TEntity : class, IEntity { - public IMongoDbRepositoryFilterer RepositoryFiltererWithKey => LazyServiceProvider.LazyGetService>(); + public IMongoDbRepositoryFilterer RepositoryFiltererWithKey => LazyServiceProvider.LazyGetService>()!; public MongoDbRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) @@ -793,14 +793,14 @@ public class MongoDbRepository return entity; } - public virtual async Task FindAsync( + public virtual async Task FindAsync( TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) { cancellationToken = GetCancellationToken(cancellationToken); - return await ApplyDataFilters(await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id.Equals(id)).FirstOrDefaultAsync(cancellationToken); + return await ApplyDataFilters(await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id!.Equals(id)).FirstOrDefaultAsync(cancellationToken); } public virtual Task DeleteAsync( @@ -808,7 +808,7 @@ public class MongoDbRepository bool autoSave = false, CancellationToken cancellationToken = default) { - return DeleteAsync(x => x.Id.Equals(id), autoSave, cancellationToken); + return DeleteAsync(x => x.Id!.Equals(id), autoSave, cancellationToken); } public virtual async Task DeleteManyAsync([NotNull] IEnumerable ids, bool autoSave = false, CancellationToken cancellationToken = default) @@ -832,7 +832,7 @@ public class MongoDbRepository return base.ApplyDataFilters(query); } - protected async override Task> CreateEntityFilterAsync(TEntity entity, bool withConcurrencyStamp = false, string concurrencyStamp = null) + protected async override Task> CreateEntityFilterAsync(TEntity entity, bool withConcurrencyStamp = false, string? concurrencyStamp = null) { return await RepositoryFiltererWithKey.CreateEntityFilterAsync(entity, withConcurrencyStamp, concurrencyStamp); } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepositoryFilterer.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepositoryFilterer.cs index 83063dae4c..97358fb7e8 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepositoryFilterer.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepositoryFilterer.cs @@ -67,7 +67,7 @@ public class MongoDbRepositoryFilterer : MongoDbRepositoryFiltere return Builders.Filter.And(filters); } - public virtual Task> CreateEntityFilterAsync(TEntity entity, bool withConcurrencyStamp = false, string concurrencyStamp = null) + public virtual Task> CreateEntityFilterAsync(TEntity entity, bool withConcurrencyStamp = false, string? concurrencyStamp = null) { if (!withConcurrencyStamp || !(entity is IHasConcurrencyStamp entityWithConcurrencyStamp)) { diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs index c71c3e991d..676450a5b8 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs @@ -43,13 +43,13 @@ public static class MongoDbCoreRepositoryExtensions return repository.ToMongoDbRepository().GetMongoQueryable(); } - public static Task> GetMongoQueryableAsync(this IReadOnlyBasicRepository repository, CancellationToken cancellationToken = default, AggregateOptions aggregateOptions = null) + public static Task> GetMongoQueryableAsync(this IReadOnlyBasicRepository repository, CancellationToken cancellationToken = default, AggregateOptions? aggregateOptions = null) where TEntity : class, IEntity { return repository.ToMongoDbRepository().GetMongoQueryableAsync(cancellationToken, aggregateOptions); } - public static Task> GetAggregateAsync(this IReadOnlyBasicRepository repository, CancellationToken cancellationToken = default, AggregateOptions aggregateOptions = null) + public static Task> GetAggregateAsync(this IReadOnlyBasicRepository repository, CancellationToken cancellationToken = default, AggregateOptions? aggregateOptions = null) where TEntity : class, IEntity { return repository.ToMongoDbRepository().GetAggregateAsync(cancellationToken, aggregateOptions); diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs index e1388d61ca..ba89c81c29 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs @@ -6,22 +6,22 @@ namespace Volo.Abp.MongoDB; public abstract class AbpMongoDbContext : IAbpMongoDbContext, ITransientDependency { - public IAbpLazyServiceProvider LazyServiceProvider { get; set; } + public IAbpLazyServiceProvider LazyServiceProvider { get; set; } = default!; - public IMongoModelSource ModelSource { get; set; } + public IMongoModelSource ModelSource { get; set; } = default!; - public IMongoClient Client { get; private set; } + public IMongoClient Client { get; private set; } = default!; - public IMongoDatabase Database { get; private set; } + public IMongoDatabase Database { get; private set; } = default!; - public IClientSessionHandle SessionHandle { get; private set; } + public IClientSessionHandle? SessionHandle { get; private set; } protected internal virtual void CreateModel(IMongoModelBuilder modelBuilder) { } - public virtual void InitializeDatabase(IMongoDatabase database, IMongoClient client, IClientSessionHandle sessionHandle) + public virtual void InitializeDatabase(IMongoDatabase database, IMongoClient client, IClientSessionHandle? sessionHandle) { Database = database; Client = client; diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs index eb9188a601..36ff84a64f 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs @@ -12,7 +12,7 @@ public class AbpMongoDbContextOptions { internal Dictionary DbContextReplacements { get; } - public Action MongoClientSettingsConfigurer { get; set; } + public Action? MongoClientSettingsConfigurer { get; set; } public AbpMongoDbContextOptions() { diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoModelBuilderConfigurationOptions.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoModelBuilderConfigurationOptions.cs index 182e17a61a..e42fa46a32 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoModelBuilderConfigurationOptions.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoModelBuilderConfigurationOptions.cs @@ -12,7 +12,8 @@ public class AbpMongoModelBuilderConfigurationOptions _collectionPrefix = value; } } - private string _collectionPrefix; + + private string _collectionPrefix = default!; public AbpMongoModelBuilderConfigurationOptions([NotNull] string collectionPrefix = "") { diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IncomingEventRecord.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IncomingEventRecord.cs index e6ddc87bd6..4b66c58595 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IncomingEventRecord.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IncomingEventRecord.cs @@ -15,11 +15,11 @@ public class IncomingEventRecord : public ExtraPropertyDictionary ExtraProperties { get; private set; } - public string MessageId { get; private set; } + public string MessageId { get; private set; } = default!; - public string EventName { get; private set; } + public string EventName { get; private set; } = default!; - public byte[] EventData { get; private set; } + public byte[] EventData { get; private set; } = default!; public DateTime CreationTime { get; private set; } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/OutgoingEventRecord.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/OutgoingEventRecord.cs index 0f0798532b..a7f3d5ab14 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/OutgoingEventRecord.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/OutgoingEventRecord.cs @@ -15,9 +15,9 @@ public class OutgoingEventRecord : public ExtraPropertyDictionary ExtraProperties { get; private set; } - public string EventName { get; private set; } + public string EventName { get; private set; } = default!; - public byte[] EventData { get; private set; } + public byte[] EventData { get; private set; } = default!; public DateTime CreationTime { get; private set; } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs index 12a76e9b00..5d47e2b39b 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs @@ -10,5 +10,5 @@ public interface IAbpMongoDbContext IMongoCollection Collection(); - IClientSessionHandle SessionHandle { get; } + IClientSessionHandle? SessionHandle { get; } } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IMongoModelBuilder.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IMongoModelBuilder.cs index aa682412e6..9da7754bff 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IMongoModelBuilder.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IMongoModelBuilder.cs @@ -6,9 +6,9 @@ namespace Volo.Abp.MongoDB; public interface IMongoModelBuilder { - void Entity(Action> buildAction = null); + void Entity(Action>? buildAction = null); - void Entity([NotNull] Type entityType, Action buildAction = null); + void Entity([NotNull] Type entityType, Action? buildAction = null); IReadOnlyList GetEntities(); } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoCollectionAttribute.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoCollectionAttribute.cs index b3f17472bd..9f12a39f26 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoCollectionAttribute.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoCollectionAttribute.cs @@ -4,7 +4,7 @@ namespace Volo.Abp.MongoDB; public class MongoCollectionAttribute : Attribute { - public string CollectionName { get; set; } + public string? CollectionName { get; set; } public MongoCollectionAttribute() { diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs index 306a03cf12..287f3ced0e 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs @@ -74,15 +74,15 @@ public class MongoDbAsyncQueryableProvider : IAsyncQueryableProvider, ISingleton return GetMongoQueryable(queryable).FirstAsync(predicate, cancellationToken); } - public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { - return GetMongoQueryable(queryable).FirstOrDefaultAsync(cancellationToken); + return GetMongoQueryable(queryable).FirstOrDefaultAsync(cancellationToken)!; } - public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { - return GetMongoQueryable(queryable).FirstOrDefaultAsync(predicate, cancellationToken); + return GetMongoQueryable(queryable).FirstOrDefaultAsync(predicate, cancellationToken)!; } public Task LastAsync(IQueryable queryable, CancellationToken cancellationToken = default) @@ -95,15 +95,15 @@ public class MongoDbAsyncQueryableProvider : IAsyncQueryableProvider, ISingleton return Task.FromResult(GetMongoQueryable(queryable).Last(predicate)); } - public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { - return Task.FromResult(GetMongoQueryable(queryable).LastOrDefault()); + return Task.FromResult(GetMongoQueryable(queryable).LastOrDefault()); } - public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { - return Task.FromResult(GetMongoQueryable(queryable).LastOrDefault(predicate)); + return Task.FromResult(GetMongoQueryable(queryable).LastOrDefault(predicate)); } public Task SingleAsync(IQueryable queryable, CancellationToken cancellationToken = default) @@ -116,15 +116,15 @@ public class MongoDbAsyncQueryableProvider : IAsyncQueryableProvider, ISingleton return GetMongoQueryable(queryable).SingleAsync(predicate, cancellationToken); } - public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { - return GetMongoQueryable(queryable).SingleOrDefaultAsync(cancellationToken); + return GetMongoQueryable(queryable).SingleOrDefaultAsync(cancellationToken)!; } - public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { - return GetMongoQueryable(queryable).SingleOrDefaultAsync(predicate, cancellationToken); + return GetMongoQueryable(queryable).SingleOrDefaultAsync(predicate, cancellationToken)!; } public Task MinAsync(IQueryable queryable, CancellationToken cancellationToken = default) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoEntityModelBuilder.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoEntityModelBuilder.cs index 12d0e72b44..e012e89072 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoEntityModelBuilder.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoEntityModelBuilder.cs @@ -11,7 +11,7 @@ public class MongoEntityModelBuilder : { public Type EntityType { get; } - public string CollectionName { get; set; } + public string CollectionName { get; set; } = default!; BsonClassMap IMongoEntityModelBuilder.BsonMap => _bsonClassMap; BsonClassMap IMongoEntityModelBuilder.BsonMap => _bsonClassMap; diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs index b0c936dbe2..b7de3043ac 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs @@ -121,7 +121,7 @@ public class MongoModelBuilder : IMongoModelBuilder return dbContext.LazyServiceProvider.LazyGetRequiredService>().Value.Kind; } - public virtual void Entity(Action> buildAction = null) + public virtual void Entity(Action>? buildAction = null) { var model = (IMongoEntityModelBuilder)_entityModelBuilders.GetOrAdd( typeof(TEntity), @@ -131,7 +131,7 @@ public class MongoModelBuilder : IMongoModelBuilder buildAction?.Invoke(model); } - public virtual void Entity(Type entityType, Action buildAction = null) + public virtual void Entity(Type entityType, Action? buildAction = null) { Check.NotNull(entityType, nameof(entityType)); @@ -139,7 +139,7 @@ public class MongoModelBuilder : IMongoModelBuilder entityType, () => (IMongoEntityModelBuilder)Activator.CreateInstance( typeof(MongoEntityModelBuilder<>).MakeGenericType(entityType) - ) + )! ); buildAction?.Invoke(model); diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index 04d4e0bfa5..474eb8542e 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -131,7 +131,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext var client = CreateMongoClient(mongoUrl); var database = client.GetDatabase(databaseName); - if (unitOfWork.Options.IsTransactional) + if (unitOfWork.Options!.IsTransactional) { return CreateDbContextWithTransaction(unitOfWork, mongoUrl, client, database); } @@ -151,7 +151,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext var client = CreateMongoClient(mongoUrl); var database = client.GetDatabase(databaseName); - if (unitOfWork.Options.IsTransactional) + if (unitOfWork.Options!.IsTransactional) { return await CreateDbContextWithTransactionAsync( unitOfWork, @@ -183,7 +183,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext { var session = client.StartSession(); - if (unitOfWork.Options.Timeout.HasValue) + if (unitOfWork.Options!.Timeout.HasValue) { session.AdvanceOperationTime(new BsonTimestamp(unitOfWork.Options.Timeout.Value)); } @@ -233,7 +233,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext { var session = await client.StartSessionAsync(cancellationToken: GetCancellationToken(cancellationToken)); - if (unitOfWork.Options.Timeout.HasValue) + if (unitOfWork.Options!.Timeout.HasValue) { session.AdvanceOperationTime(new BsonTimestamp(unitOfWork.Options.Timeout.Value)); } From 4b8ae1c06174edcdfc080164650c18ffba044eda Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 4 Sep 2023 15:52:29 +0800 Subject: [PATCH 79/92] Enable nullable annotations for Volo.Abp.MemoryDb --- .../AbpMemoryDbServiceCollectionExtensions.cs | 2 +- framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj | 2 ++ .../Abp/Domain/Repositories/MemoryDb/MemoryDatabase.cs | 4 ++-- .../Domain/Repositories/MemoryDb/MemoryDbRepository.cs | 8 ++++---- .../Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs | 2 +- .../DependencyInjection/MemoryDbRepositoryRegistrar.cs | 2 +- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.MemoryDb/Microsoft/Extensions/DependencyInjection/AbpMemoryDbServiceCollectionExtensions.cs b/framework/src/Volo.Abp.MemoryDb/Microsoft/Extensions/DependencyInjection/AbpMemoryDbServiceCollectionExtensions.cs index 0f06706180..d14d8d657e 100644 --- a/framework/src/Volo.Abp.MemoryDb/Microsoft/Extensions/DependencyInjection/AbpMemoryDbServiceCollectionExtensions.cs +++ b/framework/src/Volo.Abp.MemoryDb/Microsoft/Extensions/DependencyInjection/AbpMemoryDbServiceCollectionExtensions.cs @@ -7,7 +7,7 @@ namespace Microsoft.Extensions.DependencyInjection; public static class AbpMemoryDbServiceCollectionExtensions { - public static IServiceCollection AddMemoryDbContext(this IServiceCollection services, Action optionsBuilder = null) + public static IServiceCollection AddMemoryDbContext(this IServiceCollection services, Action? optionsBuilder = null) where TMemoryDbContext : MemoryDbContext { var options = new AbpMemoryDbContextRegistrationOptions(typeof(TMemoryDbContext), services); diff --git a/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj b/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj index 07ddca1d7a..5f4f78a5db 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj +++ b/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.MemoryDb Volo.Abp.MemoryDb $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDatabase.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDatabase.cs index c3103e20f2..a38aeec1b2 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDatabase.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDatabase.cs @@ -25,9 +25,9 @@ public class MemoryDatabase : IMemoryDatabase, ITransientDependency public IMemoryDatabaseCollection Collection() where TEntity : class, IEntity { - return _sets.GetOrAdd(typeof(TEntity), + return (_sets.GetOrAdd(typeof(TEntity), _ => _serviceProvider.GetRequiredService>()) as - IMemoryDatabaseCollection; + IMemoryDatabaseCollection)!; } public TKey GenerateNextId() diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index 39b2247a61..186edd7d33 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -192,7 +192,7 @@ public class MemoryDbRepository : RepositoryBase FindAsync( + public override async Task FindAsync( Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) @@ -340,14 +340,14 @@ public class MemoryDbRepository : MemoryDbRepos return entity; } - public virtual async Task FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) + public virtual async Task FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) { - return (await GetQueryableAsync()).FirstOrDefault(e => e.Id.Equals(id)); + return (await GetQueryableAsync()).FirstOrDefault(e => e.Id!.Equals(id)); } public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) { - await DeleteAsync(x => x.Id.Equals(id), autoSave, cancellationToken); + await DeleteAsync(x => x.Id!.Equals(id), autoSave, cancellationToken); } public virtual async Task DeleteManyAsync(IEnumerable ids, bool autoSave = false, CancellationToken cancellationToken = default) diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs index deff9658fb..1a901820f3 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs @@ -21,6 +21,6 @@ public class Utf8JsonMemoryDbSerializer : IMemoryDbSerializer, ITransientDepende public object Deserialize(byte[] value, Type type) { - return JsonSerializer.Deserialize(value, type, Options.JsonSerializerOptions); + return JsonSerializer.Deserialize(value, type, Options.JsonSerializerOptions)!; } } diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/MemoryDb/DependencyInjection/MemoryDbRepositoryRegistrar.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/MemoryDb/DependencyInjection/MemoryDbRepositoryRegistrar.cs index d746c65acf..21fddd50d2 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/MemoryDb/DependencyInjection/MemoryDbRepositoryRegistrar.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/MemoryDb/DependencyInjection/MemoryDbRepositoryRegistrar.cs @@ -14,7 +14,7 @@ public class MemoryDbRepositoryRegistrar : RepositoryRegistrarBase GetEntityTypes(Type dbContextType) { - var memoryDbContext = (MemoryDbContext)Activator.CreateInstance(dbContextType); + var memoryDbContext = (MemoryDbContext)Activator.CreateInstance(dbContextType)!; return memoryDbContext.GetEntityTypes(); } From ca11f93d82b67ab9eefaaee714dfc79d78144f2d Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 4 Sep 2023 17:00:19 +0800 Subject: [PATCH 80/92] Enable nullable annotations for Volo.Abp.EntityFrameworkCore --- .../Repositories/ISupportsExplicitLoading.cs | 2 +- .../Repositories/RepositoryExtensions.cs | 2 +- .../AbpEfCoreServiceCollectionExtensions.cs | 2 +- .../Volo.Abp.EntityFrameworkCore.csproj | 2 ++ .../EntityFrameworkCore/EfCoreRepository.cs | 20 ++++++------- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 28 +++++++++---------- .../AbpDbContextOptions.cs | 2 +- .../AbpDbContextConfigurationContext.cs | 12 ++++---- .../DependencyInjection/AbpEntityOptions.cs | 8 +++--- .../DbContextCreationContext.cs | 4 +-- .../DbContextOptionsFactory.cs | 2 +- .../DistributedEvents/IncomingEventRecord.cs | 6 ++-- .../DistributedEvents/OutgoingEventRecord.cs | 4 +-- .../EfCoreAsyncQueryableProvider.cs | 12 ++++---- .../EntityHistory/EntityHistoryHelper.cs | 13 ++++----- .../EntityFrameworkCore/IEfCoreDbContext.cs | 12 ++++---- ...EfCoreDatabaseMigrationEventHandlerBase.cs | 4 +-- .../AbpModelBuilderConfigurationOptions.cs | 8 +++--- .../QueryFilterExpressionHelper.cs | 2 +- .../ExtraPropertyDictionaryValueComparer.cs | 2 +- .../AbpDateTimeValueConverter.cs | 4 +-- .../ValueConverters/AbpJsonValueConverter.cs | 2 +- .../ExtraPropertiesValueConverter.cs | 12 ++++---- ...reObjectExtensionPropertyInfoExtensions.cs | 5 ++-- ...ObjectExtensionInfoEfCoreMappingOptions.cs | 6 ++-- ...tensionPropertyInfoEfCoreMappingOptions.cs | 12 ++++---- .../UnitOfWorkMongoDbContextProvider.cs | 8 +++--- .../Volo/Abp/Uow/ChildUnitOfWork.cs | 2 +- .../Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs | 2 +- .../Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs | 2 +- 30 files changed, 99 insertions(+), 103 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs index 5131486c1e..08c1f2556f 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs @@ -18,7 +18,7 @@ public interface ISupportsExplicitLoading Task EnsurePropertyLoadedAsync( TEntity entity, - Expression> propertyExpression, + Expression> propertyExpression, CancellationToken cancellationToken) where TProperty : class; } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs index d40449a2e4..3c43798c38 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs @@ -34,7 +34,7 @@ public static class RepositoryExtensions public async static Task EnsurePropertyLoadedAsync( this IBasicRepository repository, TEntity entity, - Expression> propertyExpression, + Expression> propertyExpression, CancellationToken cancellationToken = default ) where TEntity : class, IEntity diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreServiceCollectionExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreServiceCollectionExtensions.cs index f51df050ef..55e88b72e7 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreServiceCollectionExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreServiceCollectionExtensions.cs @@ -13,7 +13,7 @@ public static class AbpEfCoreServiceCollectionExtensions { public static IServiceCollection AddAbpDbContext( this IServiceCollection services, - Action optionsBuilder = null) + Action? optionsBuilder = null) where TDbContext : AbpDbContext { services.AddMemoryCache(); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj index c547299bae..af2be88afa 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.EntityFrameworkCore Volo.Abp.EntityFrameworkCore $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 1c5d106166..3274360ba2 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -26,11 +26,11 @@ public class EfCoreRepository : RepositoryBase, IE protected virtual TDbContext DbContext => GetDbContext(); [Obsolete("Use GetDbContextAsync() method.")] - DbContext IEfCoreRepository.DbContext => GetDbContext() as DbContext; + DbContext IEfCoreRepository.DbContext => (GetDbContext() as DbContext)!; async Task IEfCoreRepository.GetDbContextAsync() { - return await GetDbContextAsync() as DbContext; + return (await GetDbContextAsync() as DbContext)!; } [Obsolete("Use GetDbContextAsync() method.")] @@ -80,7 +80,7 @@ public class EfCoreRepository : RepositoryBase, IE return (await GetDbContextAsync()).Database.GetDbConnection(); } - protected async Task GetDbTransactionAsync() + protected async Task GetDbTransactionAsync() { return (await GetDbContextAsync()).Database.CurrentTransaction?.GetDbTransaction(); } @@ -92,7 +92,7 @@ public class EfCoreRepository : RepositoryBase, IE public virtual IGuidGenerator GuidGenerator => LazyServiceProvider.LazyGetService(SimpleGuidGenerator.Instance); - public IEfCoreBulkOperationProvider BulkOperationProvider => LazyServiceProvider.LazyGetService(); + public IEfCoreBulkOperationProvider? BulkOperationProvider => LazyServiceProvider.LazyGetService(); public EfCoreRepository(IDbContextProvider dbContextProvider) { @@ -301,7 +301,7 @@ public class EfCoreRepository : RepositoryBase, IE await (await GetDbContextAsync()).SaveChangesAsync(cancellationToken); } - public async override Task FindAsync( + public async override Task FindAsync( Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) @@ -353,7 +353,7 @@ public class EfCoreRepository : RepositoryBase, IE public virtual async Task EnsurePropertyLoadedAsync( TEntity entity, - Expression> propertyExpression, + Expression> propertyExpression, CancellationToken cancellationToken = default) where TProperty : class { @@ -464,13 +464,13 @@ public class EfCoreRepository : EfCoreRepository FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) + public virtual async Task FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) { return includeDetails - ? await (await WithDetailsAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) + ? await (await WithDetailsAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id!.Equals(id), GetCancellationToken(cancellationToken)) : !ShouldTrackingEntityChange() - ? await (await GetQueryableAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) - : await (await GetDbSetAsync()).FindAsync(new object[] {id}, GetCancellationToken(cancellationToken)); + ? await (await GetQueryableAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id!.Equals(id), GetCancellationToken(cancellationToken)) + : await (await GetDbSetAsync()).FindAsync(new object[] {id!}, GetCancellationToken(cancellationToken)); } public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index bc93ca97b8..05dd4527fc 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -37,7 +37,7 @@ namespace Volo.Abp.EntityFrameworkCore; public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, ITransientDependency where TDbContext : DbContext { - public IAbpLazyServiceProvider LazyServiceProvider { get; set; } + public IAbpLazyServiceProvider LazyServiceProvider { get; set; } = default!; protected virtual Guid? CurrentTenantId => CurrentTenant?.Id; @@ -74,21 +74,21 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, .GetMethod( nameof(ConfigureBaseProperties), BindingFlags.Instance | BindingFlags.NonPublic - ); + )!; private static readonly MethodInfo ConfigureValueConverterMethodInfo = typeof(AbpDbContext) .GetMethod( nameof(ConfigureValueConverter), BindingFlags.Instance | BindingFlags.NonPublic - ); + )!; private static readonly MethodInfo ConfigureValueGeneratedMethodInfo = typeof(AbpDbContext) .GetMethod( nameof(ConfigureValueGenerated), BindingFlags.Instance | BindingFlags.NonPublic - ); + )!; protected AbpDbContext(DbContextOptions options) : base(options) @@ -157,7 +157,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, try { var auditLog = AuditingManager?.Current?.Log; - List entityChangeList = null; + List? entityChangeList = null; if (auditLog != null) { entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList()); @@ -174,7 +174,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, if (entityChangeList != null) { EntityHistoryHelper.UpdateChangeList(entityChangeList); - auditLog.EntityChanges.AddRange(entityChangeList); + auditLog!.EntityChanges.AddRange(entityChangeList); Logger.LogDebug($"Added {entityChangeList.Count} entity changes to the current audit log"); } @@ -249,13 +249,13 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, } } - protected virtual void ChangeTracker_Tracked(object sender, EntityTrackedEventArgs e) + protected virtual void ChangeTracker_Tracked(object? sender, EntityTrackedEventArgs e) { FillExtraPropertiesForTrackedEntities(e); PublishEventsForTrackedEntity(e.Entry); } - protected virtual void ChangeTracker_StateChanged(object sender, EntityStateChangedEventArgs e) + protected virtual void ChangeTracker_StateChanged(object? sender, EntityStateChangedEventArgs e) { PublishEventsForTrackedEntity(e.Entry); } @@ -453,11 +453,11 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, if (conversionType == typeof(Guid)) { - entryProperty.CurrentValue = TypeDescriptor.GetConverter(conversionType).ConvertFromInvariantString(entityProperty.ToString()); + entryProperty.CurrentValue = TypeDescriptor.GetConverter(conversionType).ConvertFromInvariantString(entityProperty.ToString()!); } else if (conversionType.IsEnum) { - entryProperty.CurrentValue = Enum.Parse(conversionType, entityProperty.ToString(), ignoreCase: true); + entryProperty.CurrentValue = Enum.Parse(conversionType, entityProperty.ToString()!, ignoreCase: true); } else { @@ -560,7 +560,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, return; } - var idProperty = entry.Property("Id").Metadata.PropertyInfo; + var idProperty = entry.Property("Id").Metadata.PropertyInfo!; //Check for DatabaseGeneratedAttribute var dbGeneratedAttr = ReflectionHelper @@ -669,7 +669,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, } var idPropertyBuilder = modelBuilder.Entity().Property(x => ((IEntity)x).Id); - if (idPropertyBuilder.Metadata.PropertyInfo.IsDefined(typeof(DatabaseGeneratedAttribute), true)) + if (idPropertyBuilder.Metadata.PropertyInfo!.IsDefined(typeof(DatabaseGeneratedAttribute), true)) { return; } @@ -692,10 +692,10 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, return false; } - protected virtual Expression> CreateFilterExpression() + protected virtual Expression>? CreateFilterExpression() where TEntity : class { - Expression> expression = null; + Expression>? expression = null; if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs index 43803b4004..cb5b258192 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs @@ -12,7 +12,7 @@ public class AbpDbContextOptions { internal List> DefaultPreConfigureActions { get; } - internal Action DefaultConfigureAction { get; set; } + internal Action? DefaultConfigureAction { get; set; } internal Dictionary> PreConfigureActions { get; } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs index 8d60d6d3c9..34a7dd008d 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs @@ -14,17 +14,17 @@ public class AbpDbContextConfigurationContext : IServiceProviderAccessor public string ConnectionString { get; } - public string ConnectionStringName { get; } + public string? ConnectionStringName { get; } - public DbConnection ExistingConnection { get; } + public DbConnection? ExistingConnection { get; } public DbContextOptionsBuilder DbContextOptions { get; protected set; } public AbpDbContextConfigurationContext( [NotNull] string connectionString, [NotNull] IServiceProvider serviceProvider, - [CanBeNull] string connectionStringName, - [CanBeNull] DbConnection existingConnection) + string? connectionStringName, + DbConnection? existingConnection) { ConnectionString = connectionString; ServiceProvider = serviceProvider; @@ -45,8 +45,8 @@ public class AbpDbContextConfigurationContext : AbpDbContextConfigur public AbpDbContextConfigurationContext( string connectionString, [NotNull] IServiceProvider serviceProvider, - [CanBeNull] string connectionStringName, - [CanBeNull] DbConnection existingConnection) + string? connectionStringName, + DbConnection? existingConnection) : base( connectionString, serviceProvider, diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpEntityOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpEntityOptions.cs index a2c75fe5c3..ecd98356c3 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpEntityOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpEntityOptions.cs @@ -11,7 +11,7 @@ public class AbpEntityOptions { public static AbpEntityOptions Empty { get; } = new AbpEntityOptions(); - public Func, IQueryable> DefaultWithDetailsFunc { get; set; } + public Func, IQueryable>? DefaultWithDetailsFunc { get; set; } } public class AbpEntityOptions @@ -23,7 +23,7 @@ public class AbpEntityOptions _options = new Dictionary(); } - public AbpEntityOptions GetOrNull() + public AbpEntityOptions? GetOrNull() where TEntity : IEntity { return _options.GetOrDefault(typeof(TEntity)) as AbpEntityOptions; @@ -35,10 +35,10 @@ public class AbpEntityOptions Check.NotNull(optionsAction, nameof(optionsAction)); optionsAction( - _options.GetOrAdd( + (_options.GetOrAdd( typeof(TEntity), () => new AbpEntityOptions() - ) as AbpEntityOptions + ) as AbpEntityOptions)! ); } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextCreationContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextCreationContext.cs index 311cca1153..a7ea24a778 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextCreationContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextCreationContext.cs @@ -6,14 +6,14 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection; public class DbContextCreationContext { - public static DbContextCreationContext Current => _current.Value; + public static DbContextCreationContext Current => _current.Value!; private static readonly AsyncLocal _current = new AsyncLocal(); public string ConnectionStringName { get; } public string ConnectionString { get; } - public DbConnection ExistingConnection { get; internal set; } + public DbConnection? ExistingConnection { get; internal set; } public DbContextCreationContext(string connectionStringName, string connectionString) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs index eb51c4843f..1b3a6f48b5 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs @@ -43,7 +43,7 @@ public static class DbContextOptionsFactory var preConfigureActions = options.PreConfigureActions.GetOrDefault(typeof(TDbContext)); if (!preConfigureActions.IsNullOrEmpty()) { - foreach (var preConfigureAction in preConfigureActions) + foreach (var preConfigureAction in preConfigureActions!) { ((Action>)preConfigureAction).Invoke(context); } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs index 986c19bbbf..6d151851c4 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs @@ -15,11 +15,11 @@ public class IncomingEventRecord : public ExtraPropertyDictionary ExtraProperties { get; private set; } - public string MessageId { get; private set; } + public string MessageId { get; private set; } = default!; - public string EventName { get; private set; } + public string EventName { get; private set; } = default!; - public byte[] EventData { get; private set; } + public byte[] EventData { get; private set; } = default!; public DateTime CreationTime { get; private set; } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs index fe639411a2..163e90e26d 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs @@ -15,9 +15,9 @@ public class OutgoingEventRecord : public ExtraPropertyDictionary ExtraProperties { get; private set; } - public string EventName { get; private set; } + public string EventName { get; private set; } = default!; - public byte[] EventData { get; private set; } + public byte[] EventData { get; private set; } = default!; public DateTime CreationTime { get; private set; } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs index 8e107d0d72..f9a9d21e6a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs @@ -68,12 +68,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD return queryable.FirstAsync(predicate, cancellationToken); } - public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { return queryable.FirstOrDefaultAsync(cancellationToken); } - public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { return queryable.FirstOrDefaultAsync(predicate, cancellationToken); @@ -89,12 +89,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD return queryable.LastAsync(predicate, cancellationToken); } - public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { return queryable.LastOrDefaultAsync(cancellationToken); } - public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { return queryable.LastOrDefaultAsync(predicate, cancellationToken); @@ -110,12 +110,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD return queryable.SingleAsync(predicate, cancellationToken); } - public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { return queryable.SingleOrDefaultAsync(cancellationToken); } - public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { return queryable.SingleOrDefaultAsync(predicate, cancellationToken); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs index d21e4c43c5..cb97111c59 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs @@ -69,8 +69,7 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency return list; } - [CanBeNull] - protected virtual EntityChangeInfo CreateEntityChangeOrNull(EntityEntry entityEntry) + protected virtual EntityChangeInfo? CreateEntityChangeOrNull(EntityEntry entityEntry) { var entity = entityEntry.Entity; @@ -138,7 +137,7 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency } } - protected virtual string GetEntityId(object entityAsObj) + protected virtual string? GetEntityId(object entityAsObj) { if ((entityAsObj is IEntity entity)) { @@ -370,10 +369,10 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency // Add foreign key entityChange.PropertyChanges.Add(new EntityPropertyChangeInfo { - NewValue = JsonSerializer.Serialize(propertyEntry.CurrentValue), - OriginalValue = JsonSerializer.Serialize(propertyEntry.OriginalValue), + NewValue = JsonSerializer.Serialize(propertyEntry.CurrentValue!), + OriginalValue = JsonSerializer.Serialize(propertyEntry.OriginalValue!), PropertyName = property.Name, - PropertyTypeFullName = property.ClrType.GetFirstGenericArgumentIfNullable().FullName + PropertyTypeFullName = property.ClrType.GetFirstGenericArgumentIfNullable().FullName! }); } @@ -382,7 +381,7 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency if (propertyChange.OriginalValue == propertyChange.NewValue) { - var newValue = JsonSerializer.Serialize(propertyEntry.CurrentValue); + var newValue = JsonSerializer.Serialize(propertyEntry.CurrentValue!); if (newValue == propertyChange.NewValue) { // No change diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs index 014e893fdf..833163d223 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs @@ -60,17 +60,17 @@ public interface IEfCoreDbContext : IDisposable, IInfrastructure([NotNull] params object[] keyValues) where TEntity : class; + TEntity? Find([NotNull] params object[] keyValues) where TEntity : class; - ValueTask FindAsync([NotNull] Type entityType, [NotNull] object[] keyValues, CancellationToken cancellationToken); + ValueTask FindAsync([NotNull] Type entityType, [NotNull] object[] keyValues, CancellationToken cancellationToken); - ValueTask FindAsync([NotNull] object[] keyValues, CancellationToken cancellationToken) where TEntity : class; + ValueTask FindAsync([NotNull] object[] keyValues, CancellationToken cancellationToken) where TEntity : class; - ValueTask FindAsync([NotNull] params object[] keyValues) where TEntity : class; + ValueTask FindAsync([NotNull] params object[] keyValues) where TEntity : class; - ValueTask FindAsync([NotNull] Type entityType, [NotNull] params object[] keyValues); + ValueTask FindAsync([NotNull] Type entityType, [NotNull] params object[] keyValues); EntityEntry Remove([NotNull] TEntity entity) where TEntity : class; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Migrations/EfCoreDatabaseMigrationEventHandlerBase.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Migrations/EfCoreDatabaseMigrationEventHandlerBase.cs index d9fc7db914..a5dcbd65cc 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Migrations/EfCoreDatabaseMigrationEventHandlerBase.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Migrations/EfCoreDatabaseMigrationEventHandlerBase.cs @@ -210,7 +210,7 @@ public abstract class EfCoreDatabaseMigrationEventHandlerBase : else { var tenantConfiguration = await TenantStore.FindAsync(tenantId.Value); - if (!tenantConfiguration.ConnectionStrings.Default.IsNullOrWhiteSpace() || + if (!tenantConfiguration!.ConnectionStrings!.Default.IsNullOrWhiteSpace() || !tenantConfiguration.ConnectionStrings.GetOrDefault(DatabaseName).IsNullOrWhiteSpace()) { //Migrating the tenant database (only if tenant has a separate database) @@ -301,7 +301,7 @@ public abstract class EfCoreDatabaseMigrationEventHandlerBase : return 0; } - return int.Parse(tryCountAsString); + return int.Parse(tryCountAsString!); } private static void SetEventTryCount(EtoBase eventData, int count) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderConfigurationOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderConfigurationOptions.cs index 4ea08edced..17b000eb45 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderConfigurationOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderConfigurationOptions.cs @@ -12,14 +12,14 @@ public class AbpModelBuilderConfigurationOptions _tablePrefix = value; } } - private string _tablePrefix; - [CanBeNull] - public string Schema { get; set; } + private string _tablePrefix = default!; + + public string? Schema { get; set; } public AbpModelBuilderConfigurationOptions( [NotNull] string tablePrefix = "", - [CanBeNull] string schema = null) + string? schema = null) { Check.NotNull(tablePrefix, nameof(tablePrefix)); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/QueryFilterExpressionHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/QueryFilterExpressionHelper.cs index dfd5edf38f..1c60582ad0 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/QueryFilterExpressionHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/QueryFilterExpressionHelper.cs @@ -29,7 +29,7 @@ public static class QueryFilterExpressionHelper _newValue = newValue; } - public override Expression Visit(Expression node) + public override Expression? Visit(Expression? node) { return node == _oldValue ? _newValue : base.Visit(node); } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/ExtraPropertyDictionaryValueComparer.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/ExtraPropertyDictionaryValueComparer.cs index 123ba2be46..dca9ee0fc0 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/ExtraPropertyDictionaryValueComparer.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/ExtraPropertyDictionaryValueComparer.cs @@ -9,7 +9,7 @@ public class ExtraPropertyDictionaryValueComparer : ValueComparer d1.SequenceEqual(d2), + (d1, d2) => d1!.SequenceEqual(d2!), d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), d => new ExtraPropertyDictionary(d)) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs index 17513d46a2..702890a0a7 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters; public class AbpDateTimeValueConverter : ValueConverter { - public AbpDateTimeValueConverter(IClock clock, [CanBeNull] ConverterMappingHints mappingHints = null) + public AbpDateTimeValueConverter(IClock clock, ConverterMappingHints? mappingHints = null) : base( x => clock.Normalize(x), x => clock.Normalize(x), mappingHints) @@ -17,7 +17,7 @@ public class AbpDateTimeValueConverter : ValueConverter public class AbpNullableDateTimeValueConverter : ValueConverter { - public AbpNullableDateTimeValueConverter(IClock clock, [CanBeNull] ConverterMappingHints mappingHints = null) + public AbpNullableDateTimeValueConverter(IClock clock, ConverterMappingHints? mappingHints = null) : base( x => x.HasValue ? clock.Normalize(x.Value) : x, x => x.HasValue ? clock.Normalize(x.Value) : x, mappingHints) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs index 5be0cf6911..80035c3252 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs @@ -29,6 +29,6 @@ public class AbpJsonValueConverter : ValueConverter(s, DeserializeOptions); + return JsonSerializer.Deserialize(s, DeserializeOptions)!; } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs index 1aa9f48b07..640da7122c 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs @@ -19,9 +19,9 @@ public class ExtraPropertiesValueConverter : ValueConverter(extraProperties); + var copyDictionary = new Dictionary(extraProperties); if (entityType != null) { @@ -49,7 +49,7 @@ public class ExtraPropertiesValueConverter : ValueConverter dictionary, ObjectExtensionPropertyInfo property) { @@ -88,7 +88,7 @@ public class ExtraPropertiesValueConverter : ValueConverter entityTypeAndPropertyBuildAction) + Action? entityTypeAndPropertyBuildAction) { Check.NotNull(propertyExtension, nameof(propertyExtension)); @@ -56,8 +56,7 @@ public static class EfCoreObjectExtensionPropertyInfoExtensions return propertyExtension; } - [CanBeNull] - public static ObjectExtensionPropertyInfoEfCoreMappingOptions GetEfCoreMappingOrNull( + public static ObjectExtensionPropertyInfoEfCoreMappingOptions? GetEfCoreMappingOrNull( [NotNull] this ObjectExtensionPropertyInfo propertyExtension) { Check.NotNull(propertyExtension, nameof(propertyExtension)); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs index a63b23782a..8c23de2961 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs @@ -10,11 +10,9 @@ public class ObjectExtensionInfoEfCoreMappingOptions [NotNull] public ObjectExtensionInfo ObjectExtension { get; } - [CanBeNull] - public Action EntityTypeBuildAction { get; set; } + public Action? EntityTypeBuildAction { get; set; } - [CanBeNull] - public Action ModelBuildAction { get; set; } + public Action? ModelBuildAction { get; set; } public ObjectExtensionInfoEfCoreMappingOptions( [NotNull] ObjectExtensionInfo objectExtension, diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs index 3a9e67b1ea..49c6e89197 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs @@ -13,17 +13,15 @@ public class ObjectExtensionPropertyInfoEfCoreMappingOptions public ObjectExtensionInfo ObjectExtension => ExtensionProperty.ObjectExtension; [Obsolete("Use EntityTypeAndPropertyBuildAction property.")] - [CanBeNull] - public Action PropertyBuildAction { get; set; } + public Action? PropertyBuildAction { get; set; } - [CanBeNull] - public Action EntityTypeAndPropertyBuildAction { get; set; } + public Action? EntityTypeAndPropertyBuildAction { get; set; } [Obsolete("Use other constructors.")] public ObjectExtensionPropertyInfoEfCoreMappingOptions( [NotNull] ObjectExtensionPropertyInfo extensionProperty, - [CanBeNull] Action propertyBuildAction = null, - [CanBeNull] Action entityTypeAndPropertyBuildAction = null) + Action? propertyBuildAction = null, + Action? entityTypeAndPropertyBuildAction = null) { ExtensionProperty = Check.NotNull(extensionProperty, nameof(extensionProperty)); @@ -39,7 +37,7 @@ public class ObjectExtensionPropertyInfoEfCoreMappingOptions public ObjectExtensionPropertyInfoEfCoreMappingOptions( [NotNull] ObjectExtensionPropertyInfo extensionProperty, - [CanBeNull] Action entityTypeAndPropertyBuildAction) + Action? entityTypeAndPropertyBuildAction) { ExtensionProperty = Check.NotNull(extensionProperty, nameof(extensionProperty)); diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index 474eb8542e..04d4e0bfa5 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -131,7 +131,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext var client = CreateMongoClient(mongoUrl); var database = client.GetDatabase(databaseName); - if (unitOfWork.Options!.IsTransactional) + if (unitOfWork.Options.IsTransactional) { return CreateDbContextWithTransaction(unitOfWork, mongoUrl, client, database); } @@ -151,7 +151,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext var client = CreateMongoClient(mongoUrl); var database = client.GetDatabase(databaseName); - if (unitOfWork.Options!.IsTransactional) + if (unitOfWork.Options.IsTransactional) { return await CreateDbContextWithTransactionAsync( unitOfWork, @@ -183,7 +183,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext { var session = client.StartSession(); - if (unitOfWork.Options!.Timeout.HasValue) + if (unitOfWork.Options.Timeout.HasValue) { session.AdvanceOperationTime(new BsonTimestamp(unitOfWork.Options.Timeout.Value)); } @@ -233,7 +233,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext { var session = await client.StartSessionAsync(cancellationToken: GetCancellationToken(cancellationToken)); - if (unitOfWork.Options!.Timeout.HasValue) + if (unitOfWork.Options.Timeout.HasValue) { session.AdvanceOperationTime(new BsonTimestamp(unitOfWork.Options.Timeout.Value)); } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs index eb51d8c189..5f400abcfd 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs @@ -10,7 +10,7 @@ internal class ChildUnitOfWork : IUnitOfWork { public Guid Id => _parent.Id; - public IAbpUnitOfWorkOptions? Options => _parent.Options; + public IAbpUnitOfWorkOptions Options => _parent.Options; public IUnitOfWork? Outer => _parent.Outer; diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs index 15dc2bdec0..4ebc5afd84 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs @@ -17,7 +17,7 @@ public interface IUnitOfWork : IDatabaseApiContainer, ITransactionApiContainer, event EventHandler Disposed; - IAbpUnitOfWorkOptions? Options { get; } + IAbpUnitOfWorkOptions Options { get; } IUnitOfWork? Outer { get; } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs index c04393d104..74b1b79e77 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs @@ -21,7 +21,7 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency public Guid Id { get; } = Guid.NewGuid(); - public IAbpUnitOfWorkOptions? Options { get; private set; } + public IAbpUnitOfWorkOptions Options { get; private set; } = default!; public IUnitOfWork? Outer { get; private set; } From 13ae76df73a454769b4066e886dbccd3d2c80d67 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 4 Sep 2023 17:12:53 +0800 Subject: [PATCH 81/92] Enable nullable annotations for Volo.Abp.EntityFrameworkCore.* projects --- .../Volo.Abp.EntityFrameworkCore.MySQL.csproj | 2 ++ .../AbpDbContextConfigurationContextMySQLExtensions.cs | 2 +- .../AbpDbContextOptionsMySQLExtensions.cs | 4 ++-- .../Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj | 2 ++ ...DbContextConfigurationContextOracleDevartExtensions.cs | 2 +- .../AbpDbContextOptionsOracleDevartExtensions.cs | 4 ++-- .../Volo.Abp.EntityFrameworkCore.Oracle.csproj | 2 ++ .../AbpDbContextConfigurationContextOracleExtensions.cs | 2 +- .../AbpDbContextOptionsOracleExtensions.cs | 4 ++-- .../Volo.Abp.EntityFrameworkCore.PostgreSql.csproj | 2 ++ ...bpDbContextConfigurationContextPostgreSqlExtensions.cs | 4 ++-- .../AbpDbContextOptionsPostgreSqlExtensions.cs | 8 ++++---- .../ConnectionStrings/NpgsqlConnectionStringChecker.cs | 2 +- .../Volo.Abp.EntityFrameworkCore.SqlServer.csproj | 2 ++ ...AbpDbContextConfigurationContextSqlServerExtensions.cs | 2 +- .../AbpDbContextOptionsSqlServerExtensions.cs | 4 ++-- .../Volo.Abp.EntityFrameworkCore.Sqlite.csproj | 2 ++ .../AbpDbContextConfigurationContextSqliteExtensions.cs | 4 ++-- .../AbpDbContextOptionsSqliteExtensions.cs | 4 ++-- 19 files changed, 35 insertions(+), 23 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo.Abp.EntityFrameworkCore.MySQL.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo.Abp.EntityFrameworkCore.MySQL.csproj index b19feda6c3..d470ed692e 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo.Abp.EntityFrameworkCore.MySQL.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo.Abp.EntityFrameworkCore.MySQL.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.EntityFrameworkCore.MySQL Volo.Abp.EntityFrameworkCore.MySQL $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextMySQLExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextMySQLExtensions.cs index 596062d533..07381983ca 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextMySQLExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextMySQLExtensions.cs @@ -10,7 +10,7 @@ public static class AbpDbContextConfigurationContextMySQLExtensions { public static DbContextOptionsBuilder UseMySQL( [NotNull] this AbpDbContextConfigurationContext context, - [CanBeNull] Action mySQLOptionsAction = null) + Action? mySQLOptionsAction = null) { if (context.ExistingConnection != null) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsMySQLExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsMySQLExtensions.cs index 247e96cee7..baf8c53a14 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsMySQLExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsMySQLExtensions.cs @@ -8,7 +8,7 @@ public static class AbpDbContextOptionsMySQLExtensions { public static void UseMySQL( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action mySQLOptionsAction = null) + Action? mySQLOptionsAction = null) { options.Configure(context => { @@ -18,7 +18,7 @@ public static class AbpDbContextOptionsMySQLExtensions public static void UseMySQL( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action mySQLOptionsAction = null) + Action? mySQLOptionsAction = null) where TDbContext : AbpDbContext { options.Configure(context => diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj index 2ead0da1f3..dcd5fb1788 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.EntityFrameworkCore.Oracle.Devart Volo.Abp.EntityFrameworkCore.Oracle.Devart $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextOracleDevartExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextOracleDevartExtensions.cs index a672a280ee..e2138dd7d1 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextOracleDevartExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextOracleDevartExtensions.cs @@ -10,7 +10,7 @@ public static class AbpDbContextConfigurationContextOracleDevartExtensions { public static DbContextOptionsBuilder UseOracle( [NotNull] this AbpDbContextConfigurationContext context, - [CanBeNull] Action oracleOptionsAction = null, + Action? oracleOptionsAction = null, bool useExistingConnectionIfAvailable = false) { if (useExistingConnectionIfAvailable && context.ExistingConnection != null) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsOracleDevartExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsOracleDevartExtensions.cs index 12f5bc0437..650d222663 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsOracleDevartExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsOracleDevartExtensions.cs @@ -8,7 +8,7 @@ public static class AbpDbContextOptionsOracleDevartExtensions { public static void UseOracle( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action oracleOptionsAction = null, + Action? oracleOptionsAction = null, bool useExistingConnectionIfAvailable = false) { options.Configure(context => @@ -19,7 +19,7 @@ public static class AbpDbContextOptionsOracleDevartExtensions public static void UseOracle( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action oracleOptionsAction = null, + Action? oracleOptionsAction = null, bool useExistingConnectionIfAvailable = false) where TDbContext : AbpDbContext { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj index 187c6a1d9f..3ce2f5ff25 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.EntityFrameworkCore.Oracle Volo.Abp.EntityFrameworkCore.Oracle $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextOracleExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextOracleExtensions.cs index 9b9d3b2916..39f3a5b86f 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextOracleExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextOracleExtensions.cs @@ -10,7 +10,7 @@ public static class AbpDbContextConfigurationContextOracleExtensions { public static DbContextOptionsBuilder UseOracle( [NotNull] this AbpDbContextConfigurationContext context, - [CanBeNull] Action oracleOptionsAction = null) + Action? oracleOptionsAction = null) { if (context.ExistingConnection != null) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsOracleExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsOracleExtensions.cs index cc0dc28699..8458dd6d4e 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsOracleExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsOracleExtensions.cs @@ -8,7 +8,7 @@ public static class AbpDbContextOptionsOracleExtensions { public static void UseOracle( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action oracleOptionsAction = null) + Action? oracleOptionsAction = null) { options.Configure(context => { @@ -18,7 +18,7 @@ public static class AbpDbContextOptionsOracleExtensions public static void UseOracle( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action oracleOptionsAction = null) + Action? oracleOptionsAction = null) where TDbContext : AbpDbContext { options.Configure(context => diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj index 67f55beeb4..04da1dd18a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.EntityFrameworkCore.PostgreSql Volo.Abp.EntityFrameworkCore.PostgreSql $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextPostgreSqlExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextPostgreSqlExtensions.cs index 7e13fb01a2..918c0629c1 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextPostgreSqlExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextPostgreSqlExtensions.cs @@ -11,14 +11,14 @@ public static class AbpDbContextConfigurationContextPostgreSqlExtensions [Obsolete("Use 'UseNpgsql(...)' method instead. This will be removed in future versions.")] public static DbContextOptionsBuilder UsePostgreSql( [NotNull] this AbpDbContextConfigurationContext context, - [CanBeNull] Action postgreSqlOptionsAction = null) + Action? postgreSqlOptionsAction = null) { return context.UseNpgsql(postgreSqlOptionsAction); } public static DbContextOptionsBuilder UseNpgsql( [NotNull] this AbpDbContextConfigurationContext context, - [CanBeNull] Action postgreSqlOptionsAction = null) + Action? postgreSqlOptionsAction = null) { if (context.ExistingConnection != null) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsPostgreSqlExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsPostgreSqlExtensions.cs index bdea54efab..2a52c5de56 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsPostgreSqlExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsPostgreSqlExtensions.cs @@ -9,7 +9,7 @@ public static class AbpDbContextOptionsPostgreSqlExtensions [Obsolete("Use 'UseNpgsql(...)' method instead. This will be removed in future versions.")] public static void UsePostgreSql( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action postgreSqlOptionsAction = null) + Action? postgreSqlOptionsAction = null) { options.Configure(context => { @@ -20,7 +20,7 @@ public static class AbpDbContextOptionsPostgreSqlExtensions [Obsolete("Use 'UseNpgsql(...)' method instead. This will be removed in future versions.")] public static void UsePostgreSql( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action postgreSqlOptionsAction = null) + Action? postgreSqlOptionsAction = null) where TDbContext : AbpDbContext { options.Configure(context => @@ -31,7 +31,7 @@ public static class AbpDbContextOptionsPostgreSqlExtensions public static void UseNpgsql( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action postgreSqlOptionsAction = null) + Action? postgreSqlOptionsAction = null) { options.Configure(context => { @@ -41,7 +41,7 @@ public static class AbpDbContextOptionsPostgreSqlExtensions public static void UseNpgsql( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action postgreSqlOptionsAction = null) + Action? postgreSqlOptionsAction = null) where TDbContext : AbpDbContext { options.Configure(context => diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/ConnectionStrings/NpgsqlConnectionStringChecker.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/ConnectionStrings/NpgsqlConnectionStringChecker.cs index f3ab83eb55..56e47aa2d4 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/ConnectionStrings/NpgsqlConnectionStringChecker.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/ConnectionStrings/NpgsqlConnectionStringChecker.cs @@ -25,7 +25,7 @@ public class NpgsqlConnectionStringChecker : IConnectionStringChecker, ITransien await using var conn = new NpgsqlConnection(connString.ConnectionString); await conn.OpenAsync(); result.Connected = true; - await conn.ChangeDatabaseAsync(oldDatabaseName); + await conn.ChangeDatabaseAsync(oldDatabaseName!); result.DatabaseExists = true; await conn.CloseAsync(); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj index f655b66814..0fb7ee0c61 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.EntityFrameworkCore.SqlServer Volo.Abp.EntityFrameworkCore.SqlServer $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqlServerExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqlServerExtensions.cs index 76476423bb..95ea2ebd8b 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqlServerExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqlServerExtensions.cs @@ -10,7 +10,7 @@ public static class AbpDbContextConfigurationContextSqlServerExtensions { public static DbContextOptionsBuilder UseSqlServer( [NotNull] this AbpDbContextConfigurationContext context, - [CanBeNull] Action sqlServerOptionsAction = null) + Action? sqlServerOptionsAction = null) { if (context.ExistingConnection != null) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqlServerExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqlServerExtensions.cs index 30bf419d5e..8981d8f0c4 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqlServerExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqlServerExtensions.cs @@ -8,7 +8,7 @@ public static class AbpDbContextOptionsSqlServerExtensions { public static void UseSqlServer( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action sqlServerOptionsAction = null) + Action? sqlServerOptionsAction = null) { options.Configure(context => { @@ -18,7 +18,7 @@ public static class AbpDbContextOptionsSqlServerExtensions public static void UseSqlServer( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action sqlServerOptionsAction = null) + Action? sqlServerOptionsAction = null) where TDbContext : AbpDbContext { options.Configure(context => diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj index 002b876343..e57c897169 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.EntityFrameworkCore.Sqlite Volo.Abp.EntityFrameworkCore.Sqlite $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqliteExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqliteExtensions.cs index 6dea2a336b..a4e3b60ec9 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqliteExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqliteExtensions.cs @@ -11,7 +11,7 @@ public static class AbpDbContextConfigurationContextSqliteExtensions { public static DbContextOptionsBuilder UseSqlite( [NotNull] this AbpDbContextConfigurationContext context, - [CanBeNull] Action sqliteOptionsAction = null) + Action? sqliteOptionsAction = null) { if (context.ExistingConnection != null) { @@ -34,7 +34,7 @@ public static class AbpDbContextConfigurationContextSqliteExtensions public static DbContextOptionsBuilder UseSqlite( [NotNull] this AbpDbContextConfigurationContext context, DbConnection connection, - [CanBeNull] Action sqliteOptionsAction = null) + Action? sqliteOptionsAction = null) { if (context.ExistingConnection != null) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqliteExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqliteExtensions.cs index aaf39cbde5..c3f24a318c 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqliteExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqliteExtensions.cs @@ -8,7 +8,7 @@ public static class AbpDbContextOptionsSqliteExtensions { public static void UseSqlite( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action sqliteOptionsAction = null) + Action? sqliteOptionsAction = null) { options.Configure(context => { @@ -18,7 +18,7 @@ public static class AbpDbContextOptionsSqliteExtensions public static void UseSqlite( [NotNull] this AbpDbContextOptions options, - [CanBeNull] Action sqliteOptionsAction = null) + Action? sqliteOptionsAction = null) where TDbContext : AbpDbContext { options.Configure(context => From 438bd4235906430b4e8722debb96473fb4e933bb Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 10:56:05 +0800 Subject: [PATCH 82/92] Enable nullable annotations for Volo.Abp.Kafka --- framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj | 2 ++ .../Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs | 6 +++--- .../Volo.Abp.Kafka/Volo/Abp/Kafka/ConsumerPool.cs | 2 +- .../Volo.Abp.Kafka/Volo/Abp/Kafka/IConsumerPool.cs | 2 +- .../Volo/Abp/Kafka/IKafkaMessageConsumerFactory.cs | 2 +- .../Volo.Abp.Kafka/Volo/Abp/Kafka/IProducerPool.cs | 2 +- .../Volo/Abp/Kafka/KafkaConnections.cs | 4 +++- .../Volo/Abp/Kafka/KafkaMessageConsumer.cs | 12 ++++++------ .../Volo/Abp/Kafka/KafkaMessageConsumerFactory.cs | 2 +- .../Volo.Abp.Kafka/Volo/Abp/Kafka/ProducerPool.cs | 2 +- 10 files changed, 20 insertions(+), 16 deletions(-) diff --git a/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj b/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj index f66761fc2a..e56bd38916 100644 --- a/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj +++ b/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs index b48a952615..11b443f72b 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs @@ -8,11 +8,11 @@ public class AbpKafkaOptions { public KafkaConnections Connections { get; } - public Action ConfigureProducer { get; set; } + public Action? ConfigureProducer { get; set; } - public Action ConfigureConsumer { get; set; } + public Action? ConfigureConsumer { get; set; } - public Action ConfigureTopic { get; set; } + public Action? ConfigureTopic { get; set; } public AbpKafkaOptions() { diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ConsumerPool.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ConsumerPool.cs index 7c73df0d51..48943c84c4 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ConsumerPool.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ConsumerPool.cs @@ -30,7 +30,7 @@ public class ConsumerPool : IConsumerPool, ISingletonDependency Logger = new NullLogger(); } - public virtual IConsumer Get(string groupId, string connectionName = null) + public virtual IConsumer Get(string groupId, string? connectionName = null) { connectionName ??= KafkaConnections.DefaultConnectionName; diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IConsumerPool.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IConsumerPool.cs index 4666a0175f..a3f484ef56 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IConsumerPool.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IConsumerPool.cs @@ -5,5 +5,5 @@ namespace Volo.Abp.Kafka; public interface IConsumerPool : IDisposable { - IConsumer Get(string groupId, string connectionName = null); + IConsumer Get(string groupId, string? connectionName = null); } diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaMessageConsumerFactory.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaMessageConsumerFactory.cs index e21c8c9fd2..985e20625f 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaMessageConsumerFactory.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaMessageConsumerFactory.cs @@ -14,5 +14,5 @@ public interface IKafkaMessageConsumerFactory IKafkaMessageConsumer Create( string topicName, string groupId, - string connectionName = null); + string? connectionName = null); } diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IProducerPool.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IProducerPool.cs index 8930184016..378075b2ec 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IProducerPool.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IProducerPool.cs @@ -5,5 +5,5 @@ namespace Volo.Abp.Kafka; public interface IProducerPool : IDisposable { - IProducer Get(string connectionName = null); + IProducer Get(string? connectionName = null); } diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaConnections.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaConnections.cs index 3d9f2fe950..e66e074ad6 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaConnections.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaConnections.cs @@ -21,8 +21,10 @@ public class KafkaConnections : Dictionary Default = new ClientConfig(); } - public ClientConfig GetOrDefault(string connectionName) + public ClientConfig GetOrDefault(string? connectionName) { + connectionName ??= DefaultConnectionName; + if (TryGetValue(connectionName, out var connectionFactory)) { return connectionFactory; diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs index 704c15845f..5a2ba38189 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs @@ -31,13 +31,13 @@ public class KafkaMessageConsumer : IKafkaMessageConsumer, ITransientDependency, protected ConcurrentBag, Task>> Callbacks { get; } - protected IConsumer Consumer { get; private set; } + protected IConsumer? Consumer { get; private set; } - protected string ConnectionName { get; private set; } + protected string? ConnectionName { get; private set; } - protected string GroupId { get; private set; } + protected string GroupId { get; private set; } = default!; - protected string TopicName { get; private set; } + protected string TopicName { get; private set; } = default!; public KafkaMessageConsumer( IConsumerPool consumerPool, @@ -63,7 +63,7 @@ public class KafkaMessageConsumer : IKafkaMessageConsumer, ITransientDependency, public virtual void Initialize( [NotNull] string topicName, [NotNull] string groupId, - string connectionName = null) + string? connectionName = null) { Check.NotNull(topicName, nameof(topicName)); Check.NotNull(groupId, nameof(groupId)); @@ -160,7 +160,7 @@ public class KafkaMessageConsumer : IKafkaMessageConsumer, ITransientDependency, } finally { - Consumer.Commit(consumeResult); + Consumer?.Commit(consumeResult); } } diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumerFactory.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumerFactory.cs index dfc5912d55..fe46b5fe38 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumerFactory.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumerFactory.cs @@ -16,7 +16,7 @@ public class KafkaMessageConsumerFactory : IKafkaMessageConsumerFactory, ISingle public IKafkaMessageConsumer Create( string topicName, string groupId, - string connectionName = null) + string? connectionName = null) { var consumer = ServiceScope.ServiceProvider.GetRequiredService(); consumer.Initialize(topicName, groupId, connectionName); diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ProducerPool.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ProducerPool.cs index ac2edf31a7..23b9b71a57 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ProducerPool.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ProducerPool.cs @@ -32,7 +32,7 @@ public class ProducerPool : IProducerPool, ISingletonDependency Logger = new NullLogger(); } - public virtual IProducer Get(string connectionName = null) + public virtual IProducer Get(string? connectionName = null) { connectionName ??= KafkaConnections.DefaultConnectionName; From 106d5105613948c36e3bc0187c91d97e7ee1296c Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 10:56:22 +0800 Subject: [PATCH 83/92] Enable nullable annotations for Volo.Abp.EventBus.* --- .../AzureServiceBusMessageConsumerFactory.cs | 2 +- .../Volo/Abp/AzureServiceBus/ConnectionPool.cs | 4 ++-- .../IAzureServiceBusMessageConsumerFactory.cs | 2 +- .../Abp/AzureServiceBus/IConnectionPool.cs | 4 ++-- .../Volo/Abp/AzureServiceBus/IPublisherPool.cs | 2 +- .../Volo/Abp/AzureServiceBus/PublisherPool.cs | 2 +- .../Volo.Abp.EventBus.Abstractions.csproj | 2 ++ .../Distributed/DistributedEventReceived.cs | 4 ++-- .../Distributed/DistributedEventSent.cs | 4 ++-- .../Abp/EventBus/Distributed/InboxConfig.cs | 8 ++++---- .../EventBus/Distributed/IncomingEventInfo.cs | 8 ++++---- .../Abp/EventBus/Distributed/OutboxConfig.cs | 6 +++--- .../EventBus/Distributed/OutgoingEventInfo.cs | 6 +++--- .../Volo/Abp/EventBus/EventNameAttribute.cs | 12 ++++++------ .../Abp/EventBus/GenericEventNameAttribute.cs | 4 ++-- .../Volo.Abp.EventBus.Azure.csproj | 2 ++ .../EventBus/Azure/AbpAzureEventBusOptions.cs | 6 +++--- .../EventBus/Azure/AzureDistributedEventBus.cs | 4 ++-- .../Volo.Abp.EventBus.Dapr.csproj | 2 ++ .../Volo/Abp/EventBus/Dapr/AbpDaprEventData.cs | 4 ++-- .../EventBus/Dapr/DaprDistributedEventBus.cs | 10 +++++----- .../Volo.Abp.EventBus.Kafka.csproj | 2 ++ .../EventBus/Kafka/AbpKafkaEventBusOptions.cs | 6 +++--- .../EventBus/Kafka/KafkaDistributedEventBus.cs | 2 +- .../Abp/EventBus/Kafka/MessageExtensions.cs | 8 ++++---- .../Volo.Abp.EventBus.RabbitMQ.csproj | 2 ++ .../RabbitMq/AbpRabbitMqEventBusOptions.cs | 10 +++++----- .../RabbitMq/RabbitMqDistributedEventBus.cs | 18 +++++++++--------- .../Volo.Abp.EventBus.Rebus.csproj | 2 ++ .../EventBus/Rebus/AbpRebusEventBusOptions.cs | 4 ++-- .../EventBus/Rebus/RebusDistributedEventBus.cs | 8 ++++---- .../RebusDistributedEventHandlerAdapter.cs | 2 +- .../Volo.Abp.EventBus/Volo.Abp.EventBus.csproj | 2 ++ .../Distributed/DistributedEventBusBase.cs | 14 +++++++------- .../Abp/EventBus/Distributed/InboxProcessor.cs | 6 +++--- .../Abp/EventBus/Distributed/OutboxSender.cs | 6 +++--- .../Volo/Abp/EventBus/EventBusBase.cs | 8 ++++---- .../Abp/EventBus/EventHandlerDisposeWrapper.cs | 4 ++-- .../Volo/Abp/EventBus/EventHandlerInvoker.cs | 4 ++-- .../EventBus/EventHandlerInvokerCacheItem.cs | 4 ++-- .../Volo/Abp/EventBus/Local/LocalEventBus.cs | 6 +++--- .../EventBus/TransientEventHandlerFactory.cs | 2 +- 42 files changed, 116 insertions(+), 102 deletions(-) diff --git a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/AzureServiceBusMessageConsumerFactory.cs b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/AzureServiceBusMessageConsumerFactory.cs index 04c7b48c6a..cf92ed7b73 100644 --- a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/AzureServiceBusMessageConsumerFactory.cs +++ b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/AzureServiceBusMessageConsumerFactory.cs @@ -14,7 +14,7 @@ public class AzureServiceBusMessageConsumerFactory : IAzureServiceBusMessageCons ServiceScope = serviceScopeFactory.CreateScope(); } - public IAzureServiceBusMessageConsumer CreateMessageConsumer(string topicName, string subscriptionName, string connectionName) + public IAzureServiceBusMessageConsumer CreateMessageConsumer(string topicName, string subscriptionName, string? connectionName) { var processor = ServiceScope.ServiceProvider.GetRequiredService(); processor.Initialize(topicName, subscriptionName, connectionName); diff --git a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs index d616e1264f..df830cde7a 100644 --- a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs +++ b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs @@ -28,7 +28,7 @@ public class ConnectionPool : IConnectionPool, ISingletonDependency Logger = new NullLogger(); } - public ServiceBusClient GetClient(string connectionName) + public ServiceBusClient GetClient(string? connectionName) { connectionName ??= AzureServiceBusConnections.DefaultConnectionName; return _clients.GetOrAdd( @@ -40,7 +40,7 @@ public class ConnectionPool : IConnectionPool, ISingletonDependency ).Value; } - public ServiceBusAdministrationClient GetAdministrationClient(string connectionName) + public ServiceBusAdministrationClient GetAdministrationClient(string? connectionName) { connectionName ??= AzureServiceBusConnections.DefaultConnectionName; return _adminClients.GetOrAdd( diff --git a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IAzureServiceBusMessageConsumerFactory.cs b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IAzureServiceBusMessageConsumerFactory.cs index bd770e2204..4d93bcf5c3 100644 --- a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IAzureServiceBusMessageConsumerFactory.cs +++ b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IAzureServiceBusMessageConsumerFactory.cs @@ -16,5 +16,5 @@ public interface IAzureServiceBusMessageConsumerFactory IAzureServiceBusMessageConsumer CreateMessageConsumer( string topicName, string subscriptionName, - string connectionName); + string? connectionName); } diff --git a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IConnectionPool.cs b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IConnectionPool.cs index a4cdfbc122..825c981a00 100644 --- a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IConnectionPool.cs +++ b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IConnectionPool.cs @@ -6,7 +6,7 @@ namespace Volo.Abp.AzureServiceBus; public interface IConnectionPool : IAsyncDisposable { - ServiceBusClient GetClient(string connectionName); + ServiceBusClient GetClient(string? connectionName); - ServiceBusAdministrationClient GetAdministrationClient(string connectionName); + ServiceBusAdministrationClient GetAdministrationClient(string? connectionName); } diff --git a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IPublisherPool.cs b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IPublisherPool.cs index 4940d250dd..bb0bf8e827 100644 --- a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IPublisherPool.cs +++ b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/IPublisherPool.cs @@ -6,5 +6,5 @@ namespace Volo.Abp.AzureServiceBus; public interface IPublisherPool : IAsyncDisposable { - Task GetAsync(string topicName, string connectionName); + Task GetAsync(string topicName, string? connectionName); } diff --git a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/PublisherPool.cs b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/PublisherPool.cs index 45b025cc59..a10c63868d 100644 --- a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/PublisherPool.cs +++ b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/PublisherPool.cs @@ -24,7 +24,7 @@ public class PublisherPool : IPublisherPool, ISingletonDependency Logger = new NullLogger(); } - public async Task GetAsync(string topicName, string connectionName) + public async Task GetAsync(string topicName, string? connectionName) { var admin = _connectionPool.GetAdministrationClient(connectionName); await admin.SetupTopicAsync(topicName); diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj b/framework/src/Volo.Abp.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj index b61d8315c1..d9a78b320b 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj +++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/DistributedEventReceived.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/DistributedEventReceived.cs index 42036d85ce..86d6009594 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/DistributedEventReceived.cs +++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/DistributedEventReceived.cs @@ -4,7 +4,7 @@ public class DistributedEventReceived { public DistributedEventSource Source { get; set; } - public string EventName { get; set; } + public string EventName { get; set; } = default!; - public object EventData { get; set; } + public object EventData { get; set; } = default!; } diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/DistributedEventSent.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/DistributedEventSent.cs index 990068e0cc..d94f927e35 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/DistributedEventSent.cs +++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/DistributedEventSent.cs @@ -4,7 +4,7 @@ public class DistributedEventSent { public DistributedEventSource Source { get; set; } - public string EventName { get; set; } + public string EventName { get; set; } = default!; - public object EventData { get; set; } + public object EventData { get; set; } = default!; } diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/InboxConfig.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/InboxConfig.cs index 94e0e55be9..35af3f2bc9 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/InboxConfig.cs +++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/InboxConfig.cs @@ -13,13 +13,13 @@ public class InboxConfig get => _databaseName; set => _databaseName = Check.NotNullOrWhiteSpace(value, nameof(DatabaseName)); } - [NotNull] private string _databaseName; + [NotNull] private string _databaseName = default!; - public Type ImplementationType { get; set; } + public Type ImplementationType { get; set; } = default!; - public Func EventSelector { get; set; } + public Func? EventSelector { get; set; } - public Func HandlerSelector { get; set; } + public Func? HandlerSelector { get; set; } /// /// Used to enable/disable processing incoming events. diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs index 372e4e3d77..ffd135845a 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs +++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs @@ -12,11 +12,11 @@ public class IncomingEventInfo : IHasExtraProperties public Guid Id { get; } - public string MessageId { get; } + public string MessageId { get; } = default!; - public string EventName { get; } + public string EventName { get; } = default!; - public byte[] EventData { get; } + public byte[] EventData { get; } = default!; public DateTime CreationTime { get; } @@ -47,7 +47,7 @@ public class IncomingEventInfo : IHasExtraProperties ExtraProperties[EventBusConsts.CorrelationIdHeaderName] = correlationId; } - public string GetCorrelationId() + public string? GetCorrelationId() { return ExtraProperties.GetOrDefault(EventBusConsts.CorrelationIdHeaderName)?.ToString(); } diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/OutboxConfig.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/OutboxConfig.cs index 0b327c0e3b..6e44b9c470 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/OutboxConfig.cs +++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/OutboxConfig.cs @@ -13,11 +13,11 @@ public class OutboxConfig get => _databaseName; set => _databaseName = Check.NotNullOrWhiteSpace(value, nameof(DatabaseName)); } - [NotNull] private string _databaseName; + [NotNull] private string _databaseName = default!; - public Type ImplementationType { get; set; } + public Type ImplementationType { get; set; } = default!; - public Func Selector { get; set; } + public Func? Selector { get; set; } /// /// Used to enable/disable sending events from outbox to the message broker. diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs index 299935741e..43e9c42bf8 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs +++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs @@ -12,9 +12,9 @@ public class OutgoingEventInfo : IHasExtraProperties public Guid Id { get; } - public string EventName { get; } + public string EventName { get; } = default!; - public byte[] EventData { get; } + public byte[] EventData { get; } = default!; public DateTime CreationTime { get; } @@ -43,7 +43,7 @@ public class OutgoingEventInfo : IHasExtraProperties ExtraProperties[EventBusConsts.CorrelationIdHeaderName] = correlationId; } - public string GetCorrelationId() + public string? GetCorrelationId() { return ExtraProperties.GetOrDefault(EventBusConsts.CorrelationIdHeaderName)?.ToString(); } diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/EventNameAttribute.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/EventNameAttribute.cs index 1f0b19dd3c..2ae85bd428 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/EventNameAttribute.cs +++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/EventNameAttribute.cs @@ -23,12 +23,12 @@ public class EventNameAttribute : Attribute, IEventNameProvider { Check.NotNull(eventType, nameof(eventType)); - return eventType - .GetCustomAttributes(true) - .OfType() - .FirstOrDefault() - ?.GetName(eventType) - ?? eventType.FullName; + return (eventType + .GetCustomAttributes(true) + .OfType() + .FirstOrDefault() + ?.GetName(eventType) + ?? eventType.FullName)!; } public string GetName(Type eventType) diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/GenericEventNameAttribute.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/GenericEventNameAttribute.cs index 70493104c1..99c089be85 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/GenericEventNameAttribute.cs +++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/GenericEventNameAttribute.cs @@ -5,9 +5,9 @@ namespace Volo.Abp.EventBus; [AttributeUsage(AttributeTargets.Class)] public class GenericEventNameAttribute : Attribute, IEventNameProvider { - public string Prefix { get; set; } + public string? Prefix { get; set; } - public string Postfix { get; set; } + public string? Postfix { get; set; } public virtual string GetName(Type eventType) { diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo.Abp.EventBus.Azure.csproj b/framework/src/Volo.Abp.EventBus.Azure/Volo.Abp.EventBus.Azure.csproj index 7cbaa944da..d467bd3796 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo.Abp.EventBus.Azure.csproj +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo.Abp.EventBus.Azure.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.EventBus.Azure Volo.Abp.EventBus.Azure $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs index 57fa4b7f48..a6c5aabf42 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs @@ -2,11 +2,11 @@ namespace Volo.Abp.EventBus.Azure; public class AbpAzureEventBusOptions { - public string ConnectionName { get; set; } + public string? ConnectionName { get; set; } - public string SubscriberName { get; set; } + public string SubscriberName { get; set; } = default!; - public string TopicName { get; set; } + public string TopicName { get; set; } = default!; public bool IsServiceBusDisabled { get; set; } } diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs index d7ca68bee6..8e45a8887f 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs @@ -30,7 +30,7 @@ public class AzureDistributedEventBus : DistributedEventBusBase, ISingletonDepen protected IAzureServiceBusSerializer Serializer { get; } protected ConcurrentDictionary> HandlerFactories { get; } protected ConcurrentDictionary EventTypes { get; } - protected IAzureServiceBusMessageConsumer Consumer { get; private set; } + protected IAzureServiceBusMessageConsumer Consumer { get; private set; } = default!; public AzureDistributedEventBus( IServiceScopeFactory serviceScopeFactory, @@ -268,7 +268,7 @@ public class AzureDistributedEventBus : DistributedEventBusBase, ISingletonDepen protected virtual async Task PublishAsync( string eventName, byte[] body, - [CanBeNull] string correlationId, + string? correlationId, Guid? eventId) { var message = new ServiceBusMessage(body) diff --git a/framework/src/Volo.Abp.EventBus.Dapr/Volo.Abp.EventBus.Dapr.csproj b/framework/src/Volo.Abp.EventBus.Dapr/Volo.Abp.EventBus.Dapr.csproj index 61f398fecf..47d0f09f64 100644 --- a/framework/src/Volo.Abp.EventBus.Dapr/Volo.Abp.EventBus.Dapr.csproj +++ b/framework/src/Volo.Abp.EventBus.Dapr/Volo.Abp.EventBus.Dapr.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable diff --git a/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/AbpDaprEventData.cs b/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/AbpDaprEventData.cs index ee08586b8d..b4dfee64cd 100644 --- a/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/AbpDaprEventData.cs +++ b/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/AbpDaprEventData.cs @@ -10,9 +10,9 @@ public class AbpDaprEventData public string JsonData { get; set; } - public string CorrelationId { get; set; } + public string? CorrelationId { get; set; } - public AbpDaprEventData(string pubSubName, string topic, string messageId, string jsonData, string correlationId) + public AbpDaprEventData(string pubSubName, string topic, string messageId, string jsonData, string? correlationId) { PubSubName = pubSubName; Topic = topic; diff --git a/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs index 4912a58388..f4c3e6242f 100644 --- a/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs @@ -114,7 +114,7 @@ public class DaprDistributedEventBus : DistributedEventBusBase, ISingletonDepend factories.RemoveAll( factory => factory is SingleInstanceHandlerFactory && - (factory as SingleInstanceHandlerFactory).HandlerInstance == handler + (factory as SingleInstanceHandlerFactory)!.HandlerInstance == handler ); }); } @@ -186,7 +186,7 @@ public class DaprDistributedEventBus : DistributedEventBusBase, ISingletonDepend } } - public virtual async Task TriggerHandlersAsync(Type eventType, object eventData, string messageId = null, string correlationId = null) + public virtual async Task TriggerHandlersAsync(Type eventType, object eventData, string? messageId = null, string? correlationId = null) { if (await AddToInboxAsync(messageId, EventNameAttribute.GetNameOrDefault(eventType), eventType, eventData, correlationId)) { @@ -245,15 +245,15 @@ public class DaprDistributedEventBus : DistributedEventBusBase, ISingletonDepend public Type GetEventType(string eventName) { - return EventTypes.GetOrDefault(eventName); + return EventTypes.GetOrDefault(eventName)!; } - protected virtual async Task PublishToDaprAsync(Type eventType, object eventData, Guid? messageId = null, string correlationId = null) + protected virtual async Task PublishToDaprAsync(Type eventType, object eventData, Guid? messageId = null, string? correlationId = null) { await PublishToDaprAsync(EventNameAttribute.GetNameOrDefault(eventType), eventData, messageId, correlationId); } - protected virtual async Task PublishToDaprAsync(string eventName, object eventData, Guid? messageId = null, string correlationId = null) + protected virtual async Task PublishToDaprAsync(string eventName, object eventData, Guid? messageId = null, string? correlationId = null) { var client = DaprClientFactory.Create(); var data = new AbpDaprEventData(DaprEventBusOptions.PubSubName, eventName, (messageId ?? GuidGenerator.Create()).ToString("N"), Serializer.SerializeToString(eventData), correlationId); diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo.Abp.EventBus.Kafka.csproj b/framework/src/Volo.Abp.EventBus.Kafka/Volo.Abp.EventBus.Kafka.csproj index 9a240aa49a..4d2ff65bd4 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo.Abp.EventBus.Kafka.csproj +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo.Abp.EventBus.Kafka.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/AbpKafkaEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/AbpKafkaEventBusOptions.cs index eb5f898e68..17dc9e3796 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/AbpKafkaEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/AbpKafkaEventBusOptions.cs @@ -3,9 +3,9 @@ public class AbpKafkaEventBusOptions { - public string ConnectionName { get; set; } + public string? ConnectionName { get; set; } - public string TopicName { get; set; } + public string TopicName { get; set; } = default!; - public string GroupId { get; set; } + public string GroupId { get; set; } = default!; } diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index b49ffc07a9..a777ff7da2 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -29,7 +29,7 @@ public class KafkaDistributedEventBus : DistributedEventBusBase, ISingletonDepen protected IProducerPool ProducerPool { get; } protected ConcurrentDictionary> HandlerFactories { get; } protected ConcurrentDictionary EventTypes { get; } - protected IKafkaMessageConsumer Consumer { get; private set; } + protected IKafkaMessageConsumer Consumer { get; private set; } = default!; public KafkaDistributedEventBus( IServiceScopeFactory serviceScopeFactory, diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/MessageExtensions.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/MessageExtensions.cs index 569e56a1dc..cb487ed00f 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/MessageExtensions.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/MessageExtensions.cs @@ -4,9 +4,9 @@ namespace Volo.Abp.EventBus.Kafka; public static class MessageExtensions { - public static string GetMessageId(this Message message) + public static string? GetMessageId(this Message message) { - string messageId = null; + string? messageId = null; if (message.Headers.TryGetLastBytes("messageId", out var messageIdBytes)) { @@ -16,9 +16,9 @@ public static class MessageExtensions return messageId; } - public static string GetCorrelationId(this Message message) + public static string? GetCorrelationId(this Message message) { - string correlationId = null; + string? correlationId = null; if (message.Headers.TryGetLastBytes(EventBusConsts.CorrelationIdHeaderName, out var correlationIdBytes)) { diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj index 73c4d4a69a..b9d46a8a99 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.EventBus.RabbitMQ Volo.Abp.EventBus.RabbitMQ $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs index bac9bdf0c9..a017d53d5d 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs @@ -6,13 +6,13 @@ public class AbpRabbitMqEventBusOptions { public const string DefaultExchangeType = RabbitMqConsts.ExchangeTypes.Direct; - public string ConnectionName { get; set; } + public string? ConnectionName { get; set; } - public string ClientName { get; set; } + public string ClientName { get; set; } = default!; - public string ExchangeName { get; set; } + public string ExchangeName { get; set; } = default!; - public string ExchangeType { get; set; } + public string? ExchangeType { get; set; } public ushort? PrefetchCount { get; set; } @@ -20,6 +20,6 @@ public class AbpRabbitMqEventBusOptions { return string.IsNullOrEmpty(ExchangeType) ? DefaultExchangeType - : ExchangeType; + : ExchangeType!; } } diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index e484fa792b..2c0bb7aab5 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -35,7 +35,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe protected ConcurrentDictionary> HandlerFactories { get; } protected ConcurrentDictionary EventTypes { get; } protected IRabbitMqMessageConsumerFactory MessageConsumerFactory { get; } - protected IRabbitMqMessageConsumer Consumer { get; private set; } + protected IRabbitMqMessageConsumer Consumer { get; private set; } = default!; private bool _exchangeCreated; @@ -175,7 +175,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe factories.RemoveAll( factory => factory is SingleInstanceHandlerFactory && - (factory as SingleInstanceHandlerFactory).HandlerInstance == handler + (factory as SingleInstanceHandlerFactory)!.HandlerInstance == handler ); }); } @@ -282,9 +282,9 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe public virtual Task PublishAsync( Type eventType, object eventData, - Dictionary headersArguments = null, + Dictionary? headersArguments = null, Guid? eventId = null, - [CanBeNull] string correlationId = null) + string? correlationId = null) { var eventName = EventNameAttribute.GetNameOrDefault(eventType); var body = Serializer.Serialize(eventData); @@ -295,9 +295,9 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe protected virtual Task PublishAsync( string eventName, byte[] body, - Dictionary headersArguments = null, + Dictionary? headersArguments = null, Guid? eventId = null, - [CanBeNull] string correlationId = null) + string? correlationId = null) { using (var channel = ConnectionPool.Get(AbpRabbitMqEventBusOptions.ConnectionName).CreateModel()) { @@ -309,9 +309,9 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe IModel channel, string eventName, byte[] body, - Dictionary headersArguments = null, + Dictionary? headersArguments = null, Guid? eventId = null, - [CanBeNull] string correlationId = null) + string? correlationId = null) { EnsureExchangeExists(channel); @@ -366,7 +366,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe _exchangeCreated = true; } - private void SetEventMessageHeaders(IBasicProperties properties, Dictionary headersArguments) + private void SetEventMessageHeaders(IBasicProperties properties, Dictionary? headersArguments) { if (headersArguments == null) { diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj b/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj index 9800674fab..f8c668dd8e 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.EventBus.Rebus Volo.Abp.EventBus.Rebus $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs index 4c39b9bf1d..d128621396 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.EventBus.Rebus; public class AbpRebusEventBusOptions { [NotNull] - public string InputQueueName { get; set; } + public string InputQueueName { get; set; } = default!; [NotNull] public Action Configurer { @@ -20,7 +20,7 @@ public class AbpRebusEventBusOptions } private Action _configurer; - public Func Publish { get; set; } + public Func? Publish { get; set; } public AbpRebusEventBusOptions() { diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 560b13ba14..4b4dd3eef7 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -165,7 +165,7 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen var headers = new Dictionary(); if (CorrelationIdProvider.Get() != null) { - headers.Add(EventBusConsts.CorrelationIdHeaderName, CorrelationIdProvider.Get()); + headers.Add(EventBusConsts.CorrelationIdHeaderName, CorrelationIdProvider.Get()!); } await PublishAsync(eventType, eventData, headersArguments: headers); } @@ -174,7 +174,7 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen Type eventType, object eventData, Guid? eventId = null, - Dictionary headersArguments = null) + Dictionary? headersArguments = null) { if (AbpRebusEventBusOptions.Publish != null) { @@ -250,7 +250,7 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen OutgoingEventInfo outgoingEvent, OutboxConfig outboxConfig) { - var eventType = EventTypes.GetOrDefault(outgoingEvent.EventName); + var eventType = EventTypes.GetOrDefault(outgoingEvent.EventName)!; var eventData = Serializer.Deserialize(outgoingEvent.EventData, eventType); using (CorrelationIdProvider.Change(outgoingEvent.GetCorrelationId())) @@ -265,7 +265,7 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen var headers = new Dictionary(); if (outgoingEvent.GetCorrelationId() != null) { - headers.Add(EventBusConsts.CorrelationIdHeaderName, outgoingEvent.GetCorrelationId()); + headers.Add(EventBusConsts.CorrelationIdHeaderName, outgoingEvent.GetCorrelationId()!); } await PublishAsync(eventType, eventData, eventId: outgoingEvent.Id, headersArguments: headers); diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventHandlerAdapter.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventHandlerAdapter.cs index 7f9343ecdf..037c6e3312 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventHandlerAdapter.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventHandlerAdapter.cs @@ -14,6 +14,6 @@ public class RebusDistributedEventHandlerAdapter : IHandleMessages netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.EventBus Volo.Abp.EventBus $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index 670aa6ef23..17d497f883 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -133,7 +133,7 @@ public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventB Serialize(eventData), Clock.Now ); - outgoingEventInfo.SetCorrelationId(CorrelationIdProvider.Get()); + outgoingEventInfo.SetCorrelationId(CorrelationIdProvider.Get()!); await eventOutbox.EnqueueAsync(outgoingEventInfo); return true; } @@ -148,11 +148,11 @@ public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventB } protected async Task AddToInboxAsync( - string messageId, + string? messageId, string eventName, Type eventType, object eventData, - [CanBeNull] string correlationId) + string? correlationId) { if (AbpDistributedEventBusOptions.Inboxes.Count <= 0) { @@ -170,7 +170,7 @@ public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventB if (!messageId.IsNullOrEmpty()) { - if (await eventInbox.ExistsByMessageIdAsync(messageId)) + if (await eventInbox.ExistsByMessageIdAsync(messageId!)) { continue; } @@ -178,12 +178,12 @@ public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventB var incomingEventInfo = new IncomingEventInfo( GuidGenerator.Create(), - messageId, + messageId!, eventName, Serialize(eventData), Clock.Now ); - incomingEventInfo.SetCorrelationId(correlationId); + incomingEventInfo.SetCorrelationId(correlationId!); await eventInbox.EnqueueAsync(incomingEventInfo); } } @@ -206,7 +206,7 @@ public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventB await TriggerHandlersAsync(eventType, eventData); } - protected virtual async Task TriggerHandlersFromInboxAsync(Type eventType, object eventData, List exceptions, InboxConfig inboxConfig = null) + protected virtual async Task TriggerHandlersFromInboxAsync(Type eventType, object eventData, List exceptions, InboxConfig? inboxConfig = null) { await TriggerDistributedEventReceivedAsync(new DistributedEventReceived { diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs index 14e80bd9c6..e2c0a3c0c6 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs @@ -21,13 +21,13 @@ public class InboxProcessor : IInboxProcessor, ITransientDependency protected IAbpDistributedLock DistributedLock { get; } protected IUnitOfWorkManager UnitOfWorkManager { get; } protected IClock Clock { get; } - protected IEventInbox Inbox { get; private set; } - protected InboxConfig InboxConfig { get; private set; } + protected IEventInbox Inbox { get; private set; } = default!; + protected InboxConfig InboxConfig { get; private set; } = default!; protected AbpEventBusBoxesOptions EventBusBoxesOptions { get; } protected DateTime? LastCleanTime { get; set; } - protected string DistributedLockName { get; private set; } + protected string DistributedLockName { get; private set; } = default!; public ILogger Logger { get; set; } protected CancellationTokenSource StoppingTokenSource { get; } protected CancellationToken StoppingToken { get; } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs index 5f34761b17..99ee06ca10 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs @@ -19,10 +19,10 @@ public class OutboxSender : IOutboxSender, ITransientDependency protected AbpAsyncTimer Timer { get; } protected IDistributedEventBus DistributedEventBus { get; } protected IAbpDistributedLock DistributedLock { get; } - protected IEventOutbox Outbox { get; private set; } - protected OutboxConfig OutboxConfig { get; private set; } + protected IEventOutbox Outbox { get; private set; } = default!; + protected OutboxConfig OutboxConfig { get; private set; } = default!; protected AbpEventBusBoxesOptions EventBusBoxesOptions { get; } - protected string DistributedLockName { get; private set; } + protected string DistributedLockName { get; private set; } = default!; public ILogger Logger { get; set; } protected CancellationTokenSource StoppingTokenSource { get; } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs index 516a0008d7..ef5c5cdabc 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs @@ -131,7 +131,7 @@ public abstract class EventBusBase : IEventBus } } - protected virtual async Task TriggerHandlersAsync(Type eventType, object eventData, List exceptions, InboxConfig inboxConfig = null) + protected virtual async Task TriggerHandlersAsync(Type eventType, object eventData, List exceptions, InboxConfig? inboxConfig = null) { await new SynchronizationContextRemover(); @@ -154,7 +154,7 @@ public abstract class EventBusBase : IEventBus { var baseEventType = eventType.GetGenericTypeDefinition().MakeGenericType(baseArg); var constructorArgs = ((IEventDataWithInheritableGenericArgument)eventData).GetConstructorArgs(); - var baseEventData = Activator.CreateInstance(baseEventType, constructorArgs); + var baseEventData = Activator.CreateInstance(baseEventType, constructorArgs)!; await PublishToEventBusAsync(baseEventType, baseEventData); } } @@ -197,7 +197,7 @@ public abstract class EventBusBase : IEventBus protected abstract IEnumerable GetHandlerFactories(Type eventType); protected virtual async Task TriggerHandlerAsync(IEventHandlerFactory asyncHandlerFactory, Type eventType, - object eventData, List exceptions, InboxConfig inboxConfig = null) + object eventData, List exceptions, InboxConfig? inboxConfig = null) { using (var eventHandlerWrapper = asyncHandlerFactory.GetHandler()) { @@ -218,7 +218,7 @@ public abstract class EventBusBase : IEventBus } catch (TargetInvocationException ex) { - exceptions.Add(ex.InnerException); + exceptions.Add(ex.InnerException!); } catch (Exception ex) { diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerDisposeWrapper.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerDisposeWrapper.cs index 8a27ab84c7..eea4e662c8 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerDisposeWrapper.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerDisposeWrapper.cs @@ -6,9 +6,9 @@ public class EventHandlerDisposeWrapper : IEventHandlerDisposeWrapper { public IEventHandler EventHandler { get; } - private readonly Action _disposeAction; + private readonly Action? _disposeAction; - public EventHandlerDisposeWrapper(IEventHandler eventHandler, Action disposeAction = null) + public EventHandlerDisposeWrapper(IEventHandler eventHandler, Action? disposeAction = null) { _disposeAction = disposeAction; EventHandler = eventHandler; diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerInvoker.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerInvoker.cs index 5c7517cfe1..9ee7c6cceb 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerInvoker.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerInvoker.cs @@ -23,12 +23,12 @@ public class EventHandlerInvoker : IEventHandlerInvoker, ISingletonDependency if (typeof(ILocalEventHandler<>).MakeGenericType(eventType).IsInstanceOfType(eventHandler)) { - item.Local = (IEventHandlerMethodExecutor)Activator.CreateInstance(typeof(LocalEventHandlerMethodExecutor<>).MakeGenericType(eventType)); + item.Local = (IEventHandlerMethodExecutor?)Activator.CreateInstance(typeof(LocalEventHandlerMethodExecutor<>).MakeGenericType(eventType)); } if (typeof(IDistributedEventHandler<>).MakeGenericType(eventType).IsInstanceOfType(eventHandler)) { - item.Distributed = (IEventHandlerMethodExecutor)Activator.CreateInstance(typeof(DistributedEventHandlerMethodExecutor<>).MakeGenericType(eventType)); + item.Distributed = (IEventHandlerMethodExecutor?)Activator.CreateInstance(typeof(DistributedEventHandlerMethodExecutor<>).MakeGenericType(eventType)); } return item; diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerInvokerCacheItem.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerInvokerCacheItem.cs index 0ec617afca..e579c547de 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerInvokerCacheItem.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerInvokerCacheItem.cs @@ -2,7 +2,7 @@ public class EventHandlerInvokerCacheItem { - public IEventHandlerMethodExecutor Local { get; set; } + public IEventHandlerMethodExecutor? Local { get; set; } - public IEventHandlerMethodExecutor Distributed { get; set; } + public IEventHandlerMethodExecutor? Distributed { get; set; } } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs index d73b2f8de9..c24627cdc5 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs @@ -105,7 +105,7 @@ public class LocalEventBus : EventBusBase, ILocalEventBus, ISingletonDependency factories.RemoveAll( factory => factory is SingleInstanceHandlerFactory && - (factory as SingleInstanceHandlerFactory).HandlerInstance == handler + ((factory as SingleInstanceHandlerFactory)!).HandlerInstance == handler ); }); } @@ -177,7 +177,7 @@ public class LocalEventBus : EventBusBase, ILocalEventBus, ISingletonDependency } // Internal for unit testing - internal Func OnEventHandleInvoking { get; set; } + internal Func? OnEventHandleInvoking { get; set; } // Internal for unit testing protected async override Task InvokeEventHandlerAsync(IEventHandler eventHandler, object eventData, Type eventType) @@ -191,7 +191,7 @@ public class LocalEventBus : EventBusBase, ILocalEventBus, ISingletonDependency } // Internal for unit testing - internal Func OnPublishing { get; set; } + internal Func? OnPublishing { get; set; } // For unit testing public async override Task PublishAsync( diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/TransientEventHandlerFactory.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/TransientEventHandlerFactory.cs index d84999cb24..75d9e26060 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/TransientEventHandlerFactory.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/TransientEventHandlerFactory.cs @@ -64,6 +64,6 @@ public class TransientEventHandlerFactory : IEventHandlerFactory protected virtual IEventHandler CreateHandler() { - return (IEventHandler)Activator.CreateInstance(HandlerType); + return (IEventHandler)Activator.CreateInstance(HandlerType)!; } } From 95ae085c20310c64790a9b9e744cd8324102cc6e Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 16:05:37 +0800 Subject: [PATCH 84/92] Enable nullable annotations for Volo.Abp.Http --- .../AspNetCoreApiDescriptionModelProvider.cs | 2 +- .../ServiceProxyGenerationModel.cs | 2 +- .../src/Volo.Abp.Http/Volo.Abp.Http.csproj | 2 ++ .../Volo/Abp/Http/HttpMethodHelper.cs | 6 +++--- .../Modeling/ActionApiDescriptionModel.cs | 20 +++++++++---------- .../Abp/Http/Modeling/ApiTypeNameHelper.cs | 16 +++++++-------- .../ApplicationApiDescriptionModel.cs | 6 +++--- .../Modeling/ControllerApiDescriptionModel.cs | 20 +++++++++---------- .../ControllerInterfaceApiDescriptionModel.cs | 8 ++++---- .../InterfaceMethodApiDescriptionModel.cs | 6 +++--- .../MethodParameterApiDescriptionModel.cs | 12 +++++------ .../Modeling/ModuleApiDescriptionModel.cs | 12 +++++------ .../Modeling/ParameterApiDescriptionModel.cs | 20 +++++++++---------- .../Modeling/PropertyApiDescriptionModel.cs | 14 ++++++------- .../ReturnValueApiDescriptionModel.cs | 4 ++-- .../Http/Modeling/TypeApiDescriptionModel.cs | 10 +++++----- .../AbpApiProxyScriptingConfiguration.cs | 2 +- .../JQuery/JQueryProxyScriptGenerator.cs | 6 +++--- .../Generators/ProxyScriptingHelper.cs | 6 +++--- .../ProxyScripting/ProxyScriptingModel.cs | 6 +++--- 20 files changed, 91 insertions(+), 89 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs index 9e3b0bfba2..f1d014b76a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs @@ -145,7 +145,7 @@ public class AspNetCoreApiDescriptionModelProvider : IApiDescriptionModelProvide ActionApiDescriptionModel.Create( uniqueMethodName, method, - apiDescription.RelativePath, + apiDescription.RelativePath!, apiDescription.HttpMethod, GetSupportedVersions(controllerType, method, setting), allowAnonymous, diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ProxyScripting/ServiceProxyGenerationModel.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ProxyScripting/ServiceProxyGenerationModel.cs index b912d3905a..d4fd27d889 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ProxyScripting/ServiceProxyGenerationModel.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ProxyScripting/ServiceProxyGenerationModel.cs @@ -32,7 +32,7 @@ public class ServiceProxyGenerationModel public ProxyScriptingModel CreateOptions() { - var options = new ProxyScriptingModel(Type, UseCache); + var options = new ProxyScriptingModel(Type!, UseCache); if (!Modules.IsNullOrEmpty()) { diff --git a/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj b/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj index 3b029e3b9d..11cdaffe09 100644 --- a/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj +++ b/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.Http Volo.Abp.Http $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/HttpMethodHelper.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/HttpMethodHelper.cs index 603b6797c3..78ee75e901 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/HttpMethodHelper.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/HttpMethodHelper.cs @@ -43,12 +43,12 @@ public static class HttpMethodHelper return methodName; } - return methodName.RemovePreFix(prefixes); + return methodName.RemovePreFix(prefixes!); } - public static HttpMethod ConvertToHttpMethod(string httpMethod) + public static HttpMethod ConvertToHttpMethod(string? httpMethod) { - switch (httpMethod.ToUpperInvariant()) + switch (httpMethod?.ToUpperInvariant()) { case "GET": return HttpMethod.Get; diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs index 9e1d208ddf..890637d801 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs @@ -10,32 +10,32 @@ namespace Volo.Abp.Http.Modeling; [Serializable] public class ActionApiDescriptionModel { - public string UniqueName { get; set; } + public string UniqueName { get; set; } = default!; - public string Name { get; set; } + public string Name { get; set; } = default!; - public string HttpMethod { get; set; } + public string? HttpMethod { get; set; } - public string Url { get; set; } + public string Url { get; set; } = default!; - public IList SupportedVersions { get; set; } + public IList? SupportedVersions { get; set; } - public IList ParametersOnMethod { get; set; } + public IList ParametersOnMethod { get; set; } = default!; - public IList Parameters { get; set; } + public IList Parameters { get; set; } = default!; - public ReturnValueApiDescriptionModel ReturnValue { get; set; } + public ReturnValueApiDescriptionModel ReturnValue { get; set; } = default!; public bool? AllowAnonymous { get; set; } - public string ImplementFrom { get; set; } + public string? ImplementFrom { get; set; } public ActionApiDescriptionModel() { } - public static ActionApiDescriptionModel Create([NotNull] string uniqueName, [NotNull] MethodInfo method, [NotNull] string url, [CanBeNull] string httpMethod, [NotNull] IList supportedVersions, bool? allowAnonymous = null, string implementFrom = null) + public static ActionApiDescriptionModel Create([NotNull] string uniqueName, [NotNull] MethodInfo method, [NotNull] string url, string? httpMethod, [NotNull] IList supportedVersions, bool? allowAnonymous = null, string? implementFrom = null) { Check.NotNull(uniqueName, nameof(uniqueName)); Check.NotNull(method, nameof(method)); diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApiTypeNameHelper.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApiTypeNameHelper.cs index 6907287f88..a9062655d0 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApiTypeNameHelper.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApiTypeNameHelper.cs @@ -17,16 +17,16 @@ public static class ApiTypeNameHelper if (TypeHelper.IsDictionary(type, out var keyType, out var valueType)) { - if (!duplicateTypes.Contains(keyType) && !duplicateTypes.Contains(valueType)) + if (!duplicateTypes.Contains(keyType!) && !duplicateTypes.Contains(valueType!)) { - return $"{{{GetTypeName(keyType, duplicateTypes)}:{GetTypeName(valueType, duplicateTypes)}}}"; + return $"{{{GetTypeName(keyType!, duplicateTypes)}:{GetTypeName(valueType!, duplicateTypes)}}}"; } } else if (TypeHelper.IsEnumerable(type, out var itemType, includePrimitives: false)) { - if (!duplicateTypes.Contains(itemType)) + if (!duplicateTypes.Contains(itemType!)) { - return $"[{GetTypeName(itemType, duplicateTypes)}]"; + return $"[{GetTypeName(itemType!, duplicateTypes)}]"; } } @@ -44,16 +44,16 @@ public static class ApiTypeNameHelper if (TypeHelper.IsDictionary(type, out var keyType, out var valueType)) { - if (!duplicateTypes.Contains(keyType) && !duplicateTypes.Contains(valueType)) + if (!duplicateTypes.Contains(keyType!) && !duplicateTypes.Contains(valueType!)) { - return $"{{{GetSimpleTypeName(keyType, duplicateTypes)}:{GetSimpleTypeName(valueType, duplicateTypes)}}}"; + return $"{{{GetSimpleTypeName(keyType!, duplicateTypes)}:{GetSimpleTypeName(valueType!, duplicateTypes)}}}"; } } else if (TypeHelper.IsEnumerable(type, out var itemType, includePrimitives: false)) { - if (!duplicateTypes.Contains(itemType)) + if (!duplicateTypes.Contains(itemType!)) { - return $"[{GetSimpleTypeName(itemType, duplicateTypes)}]"; + return $"[{GetSimpleTypeName(itemType!, duplicateTypes)}]"; } } diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs index edebd656cb..03b3751125 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs @@ -8,9 +8,9 @@ namespace Volo.Abp.Http.Modeling; [Serializable] public class ApplicationApiDescriptionModel { - public IDictionary Modules { get; set; } + public IDictionary Modules { get; set; } = default!; - public IDictionary Types { get; set; } + public IDictionary Types { get; set; } = default!; public ApplicationApiDescriptionModel() { @@ -41,7 +41,7 @@ public class ApplicationApiDescriptionModel return Modules.GetOrAdd(rootPath, () => ModuleApiDescriptionModel.Create(rootPath, remoteServiceName)); } - public ApplicationApiDescriptionModel CreateSubModel(string[] modules = null, string[] controllers = null, string[] actions = null) + public ApplicationApiDescriptionModel CreateSubModel(string[]? modules = null, string[]? controllers = null, string[]? actions = null) { var subModel = ApplicationApiDescriptionModel.Create(); ; diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs index e2e0e53e9f..97919e54ba 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs @@ -8,28 +8,28 @@ namespace Volo.Abp.Http.Modeling; [Serializable] public class ControllerApiDescriptionModel { - public string ControllerName { get; set; } + public string ControllerName { get; set; } = default!; - public string ControllerGroupName { get; set; } + public string? ControllerGroupName { get; set; } public bool IsRemoteService { get; set; } public bool IsIntegrationService { get; set; } - public string ApiVersion { get; set; } + public string? ApiVersion { get; set; } - public string Type { get; set; } + public string Type { get; set; } = default!; - public List Interfaces { get; set; } + public List Interfaces { get; set; } = default!; - public Dictionary Actions { get; set; } + public Dictionary Actions { get; set; } = default!; public ControllerApiDescriptionModel() { } - public static ControllerApiDescriptionModel Create(string controllerName, string groupName, bool isRemoteService, bool isIntegrationService, string apiVersion, Type type, [CanBeNull] HashSet ignoredInterfaces = null) + public static ControllerApiDescriptionModel Create(string controllerName, string? groupName, bool isRemoteService, bool isIntegrationService, string? apiVersion, Type type, HashSet? ignoredInterfaces = null) { return new ControllerApiDescriptionModel { @@ -38,11 +38,11 @@ public class ControllerApiDescriptionModel IsRemoteService = isRemoteService, IsIntegrationService = isIntegrationService, //IntegrationServiceAttribute.IsDefinedOrInherited(type), ApiVersion = apiVersion, - Type = type.FullName, + Type = type.FullName!, Actions = new Dictionary(), Interfaces = type .GetInterfaces() - .WhereIf(ignoredInterfaces != null, i => !i.IsGenericType && !ignoredInterfaces.Contains(i)) + .WhereIf(ignoredInterfaces != null, i => !i.IsGenericType && !ignoredInterfaces!.Contains(i)) .Select(ControllerInterfaceApiDescriptionModel.Create) .ToList() }; @@ -60,7 +60,7 @@ public class ControllerApiDescriptionModel return Actions[uniqueName] = action; } - public ControllerApiDescriptionModel CreateSubModel(string[] actions) + public ControllerApiDescriptionModel CreateSubModel(string[]? actions) { var subModel = new ControllerApiDescriptionModel { diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs index a0cfe31e26..a95e2ac547 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs @@ -8,11 +8,11 @@ namespace Volo.Abp.Http.Modeling; [Serializable] public class ControllerInterfaceApiDescriptionModel { - public string Type { get; set; } + public string Type { get; set; } = default!; - public string Name { get; set; } + public string Name { get; set; } = default!; - public InterfaceMethodApiDescriptionModel[] Methods { get; set; } + public InterfaceMethodApiDescriptionModel[] Methods { get; set; } = default!; public ControllerInterfaceApiDescriptionModel() { @@ -23,7 +23,7 @@ public class ControllerInterfaceApiDescriptionModel { var model = new ControllerInterfaceApiDescriptionModel { - Type = type.FullName, + Type = type.FullName!, Name = type.Name }; diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/InterfaceMethodApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/InterfaceMethodApiDescriptionModel.cs index 53a4349854..32b79ce3e1 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/InterfaceMethodApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/InterfaceMethodApiDescriptionModel.cs @@ -9,11 +9,11 @@ namespace Volo.Abp.Http.Modeling; [Serializable] public class InterfaceMethodApiDescriptionModel { - public string Name { get; set; } + public string Name { get; set; } = default!; - public IList ParametersOnMethod { get; set; } + public IList ParametersOnMethod { get; set; } = default!; - public ReturnValueApiDescriptionModel ReturnValue { get; set; } + public ReturnValueApiDescriptionModel ReturnValue { get; set; } = default!; public InterfaceMethodApiDescriptionModel() { diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs index ed1de76c0e..c3ff20b897 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs @@ -7,17 +7,17 @@ namespace Volo.Abp.Http.Modeling; [Serializable] public class MethodParameterApiDescriptionModel { - public string Name { get; set; } + public string Name { get; set; } = default!; - public string TypeAsString { get; set; } + public string TypeAsString { get; set; } = default!; - public string Type { get; set; } + public string Type { get; set; } = default!; - public string TypeSimple { get; set; } + public string TypeSimple { get; set; } = default!; public bool IsOptional { get; set; } - public object DefaultValue { get; set; } + public object? DefaultValue { get; set; } public MethodParameterApiDescriptionModel() { @@ -28,7 +28,7 @@ public class MethodParameterApiDescriptionModel { return new MethodParameterApiDescriptionModel { - Name = parameterInfo.Name, + Name = parameterInfo.Name!, TypeAsString = parameterInfo.ParameterType.GetFullNameWithAssemblyName(), Type = TypeHelper.GetFullNameHandlingNullableAndGenerics(parameterInfo.ParameterType), TypeSimple = ApiTypeNameHelper.GetSimpleTypeName(parameterInfo.ParameterType), diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs index bb2c25e3eb..3a7607376c 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs @@ -18,11 +18,11 @@ public class ModuleApiDescriptionModel /// public const string DefaultRemoteServiceName = "Default"; - public string RootPath { get; set; } + public string RootPath { get; set; } = default!; - public string RemoteServiceName { get; set; } + public string RemoteServiceName { get; set; } = default!; - public IDictionary Controllers { get; set; } + public IDictionary Controllers { get; set; } = default!; public ModuleApiDescriptionModel() { @@ -49,13 +49,13 @@ public class ModuleApiDescriptionModel return Controllers[controller.Type] = controller; } - public ControllerApiDescriptionModel GetOrAddController(string name, string groupName, bool isRemoteService, bool isIntegrationService, string apiVersion, Type type, [CanBeNull] HashSet ignoredInterfaces = null) + public ControllerApiDescriptionModel GetOrAddController(string name, string? groupName, bool isRemoteService, bool isIntegrationService, string? apiVersion, Type type, HashSet? ignoredInterfaces = null) { - var key = apiVersion.IsNullOrWhiteSpace() ? type.FullName : $"{apiVersion + "."}{type.FullName}"; + var key = (apiVersion.IsNullOrWhiteSpace() ? type.FullName : $"{apiVersion + "."}{type.FullName}")!; return Controllers.GetOrAdd(key, () => ControllerApiDescriptionModel.Create(name, groupName, isRemoteService, isIntegrationService, apiVersion, type, ignoredInterfaces)); } - public ModuleApiDescriptionModel CreateSubModel(string[] controllers, string[] actions) + public ModuleApiDescriptionModel CreateSubModel(string[]? controllers, string[]? actions) { var subModel = Create(RootPath, RemoteServiceName); diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs index cf080a857e..a863d1bfad 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs @@ -6,32 +6,32 @@ namespace Volo.Abp.Http.Modeling; [Serializable] public class ParameterApiDescriptionModel { - public string NameOnMethod { get; set; } + public string NameOnMethod { get; set; } = default!; - public string Name { get; set; } + public string Name { get; set; } = default!; - public string JsonName { get; set; } + public string? JsonName { get; set; } - public string Type { get; set; } + public string? Type { get; set; } - public string TypeSimple { get; set; } + public string? TypeSimple { get; set; } public bool IsOptional { get; set; } - public object DefaultValue { get; set; } + public object? DefaultValue { get; set; } - public string[] ConstraintTypes { get; set; } + public string[]? ConstraintTypes { get; set; } - public string BindingSourceId { get; set; } + public string? BindingSourceId { get; set; } - public string DescriptorName { get; set; } + public string? DescriptorName { get; set; } public ParameterApiDescriptionModel() { } - public static ParameterApiDescriptionModel Create(string name, string jsonName, string nameOnMethod, Type type, bool isOptional = false, object defaultValue = null, string[] constraintTypes = null, string bindingSourceId = null, string descriptorName = null) + public static ParameterApiDescriptionModel Create(string name, string? jsonName, string nameOnMethod, Type type, bool isOptional = false, object? defaultValue = null, string[]? constraintTypes = null, string? bindingSourceId = null, string? descriptorName = null) { return new ParameterApiDescriptionModel { diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/PropertyApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/PropertyApiDescriptionModel.cs index bd3852098b..03aca1fc29 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/PropertyApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/PropertyApiDescriptionModel.cs @@ -9,13 +9,13 @@ namespace Volo.Abp.Http.Modeling; [Serializable] public class PropertyApiDescriptionModel { - public string Name { get; set; } + public string Name { get; set; } = default!; - public string JsonName { get; set; } + public string? JsonName { get; set; } - public string Type { get; set; } + public string Type { get; set; } = default!; - public string TypeSimple { get; set; } + public string TypeSimple { get; set; } = default!; public bool IsRequired { get; set; } @@ -23,11 +23,11 @@ public class PropertyApiDescriptionModel public int? MaxLength { get; set; } - public string Minimum { get; set; } + public string? Minimum { get; set; } - public string Maximum { get; set; } + public string? Maximum { get; set; } - public string Regex { get; set; } + public string? Regex { get; set; } public static PropertyApiDescriptionModel Create(PropertyInfo propertyInfo) { diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs index 675eab3c82..e5a7e120a8 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs @@ -7,9 +7,9 @@ namespace Volo.Abp.Http.Modeling; [Serializable] public class ReturnValueApiDescriptionModel { - public string Type { get; set; } + public string Type { get; set; } = default!; - public string TypeSimple { get; set; } + public string TypeSimple { get; set; } = default!; public ReturnValueApiDescriptionModel() { diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs index 6a9faa71d7..eaeb02f002 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs @@ -7,17 +7,17 @@ namespace Volo.Abp.Http.Modeling; [Serializable] public class TypeApiDescriptionModel { - public string BaseType { get; set; } + public string? BaseType { get; set; } public bool IsEnum { get; set; } - public string[] EnumNames { get; set; } + public string[]? EnumNames { get; set; } - public object[] EnumValues { get; set; } + public object[]? EnumValues { get; set; } - public string[] GenericArguments { get; set; } + public string[]? GenericArguments { get; set; } - public PropertyApiDescriptionModel[] Properties { get; set; } + public PropertyApiDescriptionModel[]? Properties { get; set; } public TypeApiDescriptionModel() { diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Configuration/AbpApiProxyScriptingConfiguration.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Configuration/AbpApiProxyScriptingConfiguration.cs index 86449c8971..eb8ee307b5 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Configuration/AbpApiProxyScriptingConfiguration.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Configuration/AbpApiProxyScriptingConfiguration.cs @@ -5,7 +5,7 @@ namespace Volo.Abp.Http.ProxyScripting.Configuration; public static class AbpApiProxyScriptingConfiguration { - public static Func PropertyNameGenerator { get; set; } + public static Func PropertyNameGenerator { get; set; } static AbpApiProxyScriptingConfiguration() { diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs index f7383f0465..b5973eed8a 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs @@ -135,16 +135,16 @@ public class JQueryProxyScriptGenerator : IProxyScriptGenerator, ITransientDepen private static string FindBestApiVersion(ActionApiDescriptionModel action) { //var configuredVersion = GetConfiguredApiVersion(); //TODO: Implement - string configuredVersion = null; + string? configuredVersion = null; if (action.SupportedVersions.IsNullOrEmpty()) { return configuredVersion ?? "1.0"; } - if (action.SupportedVersions.Contains(configuredVersion)) + if (action.SupportedVersions!.Contains(configuredVersion!)) { - return configuredVersion; + return configuredVersion!; } return action.SupportedVersions.Last(); //TODO: Ensure to get the latest version! diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingHelper.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingHelper.cs index 4b43eb70c7..40cc5c4719 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingHelper.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingHelper.cs @@ -25,7 +25,7 @@ internal static class ProxyScriptingHelper } } - public static string GenerateHeaders(ActionApiDescriptionModel action, int indent = 0) + public static string? GenerateHeaders(ActionApiDescriptionModel action, int indent = 0) { var parameters = action .Parameters @@ -40,7 +40,7 @@ internal static class ProxyScriptingHelper return ProxyScriptingJsFuncHelper.CreateJsObjectLiteral(parameters, indent); } - public static string GenerateBody(ActionApiDescriptionModel action) + public static string? GenerateBody(ActionApiDescriptionModel action) { var parameters = action .Parameters @@ -62,7 +62,7 @@ internal static class ProxyScriptingHelper return ProxyScriptingJsFuncHelper.GetParamNameInJsFunc(parameters[0]); } - public static string GenerateFormPostData(ActionApiDescriptionModel action, int indent = 0) + public static string? GenerateFormPostData(ActionApiDescriptionModel action, int indent = 0) { var parameters = action .Parameters diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptingModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptingModel.cs index b165977076..e3eecb0f60 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptingModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptingModel.cs @@ -8,11 +8,11 @@ public class ProxyScriptingModel public bool UseCache { get; set; } - public string[] Modules { get; set; } + public string[]? Modules { get; set; } - public string[] Controllers { get; set; } + public string[]? Controllers { get; set; } - public string[] Actions { get; set; } + public string[]? Actions { get; set; } public IDictionary Properties { get; set; } From caa21184c5d244ba729104c7e0ffa56c54ed540b Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 16:05:57 +0800 Subject: [PATCH 85/92] Enable nullable annotations for Volo.Abp.Http.Client --- ...viceCollectionHttpClientProxyExtensions.cs | 2 +- .../Volo.Abp.Http.Client.csproj | 2 ++ .../Authentication/IAbpAccessTokenProvider.cs | 2 +- .../NullAbpAccessTokenProvider.cs | 2 +- .../ClientProxyApiDescriptionFinder.cs | 8 +++--- .../Client/ClientProxying/ClientProxyBase.cs | 26 +++++++++---------- .../ClientProxyRequestPayloadBuilder.cs | 21 +++++++-------- .../ClientProxying/ClientProxyUrlBuilder.cs | 14 +++++----- .../ClientProxying/CurrentApiVersionInfo.cs | 6 ++--- .../IClientProxyApiDescriptionFinder.cs | 2 +- .../ClientProxying/ICurrentApiVersionInfo.cs | 4 +-- .../DynamicProxying/ApiDescriptionFinder.cs | 2 +- .../DynamicHttpProxyInterceptor.cs | 4 +-- .../Proxying/HttpActionParameterHelper.cs | 2 +- 14 files changed, 49 insertions(+), 48 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionHttpClientProxyExtensions.cs b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionHttpClientProxyExtensions.cs index 3f71924f9d..ab8d5974a8 100644 --- a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionHttpClientProxyExtensions.cs +++ b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionHttpClientProxyExtensions.cs @@ -191,7 +191,7 @@ public static class ServiceCollectionHttpClientProxyExtensions return Activator.CreateInstance( typeof(HttpClientProxy<>).MakeGenericType(type), service - ); + )!; }); return services; diff --git a/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj b/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj index 0b4e3ad76f..0b05d8b1c7 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj +++ b/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.Http.Client Volo.Abp.Http.Client $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs index a4e9e650e3..ceadc832ec 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs @@ -4,5 +4,5 @@ namespace Volo.Abp.Http.Client.Authentication; public interface IAbpAccessTokenProvider { - Task GetTokenAsync(); + Task GetTokenAsync(); } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs index 6bd7e6344b..47ae349bf0 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs @@ -5,7 +5,7 @@ namespace Volo.Abp.Http.Client.Authentication; public class NullAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency { - public Task GetTokenAsync() + public Task GetTokenAsync() { return Task.FromResult(null as string); } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs index f7b9b838b5..e8da52f3b1 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs @@ -17,7 +17,7 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder, protected IVirtualFileProvider VirtualFileProvider { get; } protected IJsonSerializer JsonSerializer { get; } protected Dictionary ActionApiDescriptionModels { get; } - protected ApplicationApiDescriptionModel ApplicationApiDescriptionModel { get; set; } + protected ApplicationApiDescriptionModel ApplicationApiDescriptionModel { get; set; } = default!; public ClientProxyApiDescriptionFinder( IVirtualFileProvider virtualFileProvider, @@ -30,7 +30,7 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder, Initialize(); } - public ActionApiDescriptionModel FindAction(string methodName) + public ActionApiDescriptionModel? FindAction(string methodName) { return ActionApiDescriptionModels.ContainsKey(methodName) ? ActionApiDescriptionModels[methodName] : null; } @@ -113,7 +113,7 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder, return rootPath + physicalDirectoryInfo.Name.EnsureStartsWith('/'); } - return fileInfo.PhysicalPath; + return fileInfo.PhysicalPath!; } private string GetProxyFileInfoPath(string rootPath, IFileInfo fileInfo) @@ -123,6 +123,6 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder, return rootPath + physicalFileInfo.Name.EnsureStartsWith('/'); } - return fileInfo.GetVirtualOrPhysicalPathOrNull(); + return fileInfo.GetVirtualOrPhysicalPathOrNull()!; } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs index 5c1d893bfd..8dee0fcc3e 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.Http.Client.ClientProxying; public class ClientProxyBase : ITransientDependency { - public IAbpLazyServiceProvider LazyServiceProvider { get; set; } + public IAbpLazyServiceProvider LazyServiceProvider { get; set; } = default!; protected IClientProxyApiDescriptionFinder ClientProxyApiDescriptionFinder => LazyServiceProvider.LazyGetRequiredService(); protected ICancellationTokenProvider CancellationTokenProvider => LazyServiceProvider.LazyGetRequiredService(); @@ -42,17 +42,17 @@ public class ClientProxyBase : ITransientDependency protected ICurrentApiVersionInfo CurrentApiVersionInfo => LazyServiceProvider.LazyGetRequiredService(); protected ILocalEventBus LocalEventBus => LazyServiceProvider.LazyGetRequiredService(); - protected virtual async Task RequestAsync(string methodName, ClientProxyRequestTypeValue arguments = null) + protected virtual async Task RequestAsync(string methodName, ClientProxyRequestTypeValue? arguments = null) { await RequestAsync(BuildHttpProxyClientProxyContext(methodName, arguments)); } - protected virtual async Task RequestAsync(string methodName, ClientProxyRequestTypeValue arguments = null) + protected virtual async Task RequestAsync(string methodName, ClientProxyRequestTypeValue? arguments = null) { return await RequestAsync(BuildHttpProxyClientProxyContext(methodName, arguments)); } - protected virtual ClientProxyRequestContext BuildHttpProxyClientProxyContext(string methodName, ClientProxyRequestTypeValue arguments = null) + protected virtual ClientProxyRequestContext BuildHttpProxyClientProxyContext(string methodName, ClientProxyRequestTypeValue? arguments = null) { if (arguments == null) { @@ -67,7 +67,7 @@ public class ClientProxyBase : ITransientDependency } var actionArguments = action.Parameters.GroupBy(x => x.NameOnMethod).ToList(); - if (action.SupportedVersions.Any()) + if (action.SupportedVersions != null && action.SupportedVersions.Any()) { //TODO: make names configurable actionArguments.RemoveAll(x => x.Key == "api-version" || x.Key == "apiVersion"); @@ -107,7 +107,7 @@ public class ClientProxyBase : ITransientDependency if (stringContent.IsNullOrWhiteSpace()) { - return default; + return default!; } return JsonSerializer.Deserialize(stringContent); @@ -177,7 +177,7 @@ public class ClientProxyBase : ITransientDependency var versionParam = requestContext.Action.Parameters.FirstOrDefault(p => p.Name == "apiVersion" && p.BindingSourceId == ParameterBindingSources.Path) ?? requestContext.Action.Parameters.FirstOrDefault(p => p.Name == "api-version" && p.BindingSourceId == ParameterBindingSources.Query); - return new ApiVersionInfo(versionParam?.BindingSourceId, apiVersion); + return new ApiVersionInfo(versionParam?.BindingSourceId!, apiVersion); } protected virtual async Task GetUrlWithParametersAsync(ClientProxyRequestContext requestContext, ApiVersionInfo apiVersion) @@ -185,7 +185,7 @@ public class ClientProxyBase : ITransientDependency return await ClientProxyUrlBuilder.GenerateUrlWithParametersAsync(requestContext.Action, requestContext.Arguments, apiVersion); } - protected virtual async Task GetHttpContentAsync(ClientProxyRequestContext requestContext, ApiVersionInfo apiVersion) + protected virtual async Task GetHttpContentAsync(ClientProxyRequestContext requestContext, ApiVersionInfo apiVersion) { return await ClientProxyRequestPayloadBuilder.BuildContentAsync(requestContext.Action, requestContext.Arguments, JsonSerializer, apiVersion); } @@ -199,15 +199,15 @@ public class ClientProxyBase : ITransientDependency return configuredVersion ?? "1.0"; } - if (requestContext.Action.SupportedVersions.Contains(configuredVersion)) + if (requestContext.Action.SupportedVersions!.Contains(configuredVersion!)) { - return configuredVersion; + return configuredVersion!; } return requestContext.Action.SupportedVersions.Last(); //TODO: Ensure to get the latest version! } - protected virtual async Task GetConfiguredApiVersionAsync(ClientProxyRequestContext requestContext) + protected virtual async Task GetConfiguredApiVersionAsync(ClientProxyRequestContext requestContext) { var clientConfig = ClientOptions.Value.HttpClientProxies.GetOrDefault(requestContext.ServiceType) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {requestContext.ServiceType.FullName}."); @@ -220,8 +220,8 @@ public class ClientProxyBase : ITransientDependency { await LocalEventBus.PublishAsync(new ClientProxyExceptionEventData() { - StatusCode = (int?)response?.StatusCode, - ReasonPhrase = response?.ReasonPhrase + StatusCode = (int?)response.StatusCode, + ReasonPhrase = response.ReasonPhrase }); if (response.Headers.Contains(AbpHttpConsts.AbpErrorFormat)) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs index abbbb8b6f1..d7755a1ac9 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs @@ -40,8 +40,7 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency HttpClientProxyingOptions = httpClientProxyingOptions.Value; } - [CanBeNull] - public virtual async Task BuildContentAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer, ApiVersionInfo apiVersion) + public virtual async Task BuildContentAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer, ApiVersionInfo apiVersion) { var body = await GenerateBodyAsync(action, methodArguments, jsonSerializer); if (body != null) @@ -54,7 +53,7 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency return body; } - protected virtual Task GenerateBodyAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer) + protected virtual Task GenerateBodyAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer) { var parameters = action .Parameters @@ -63,7 +62,7 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency if (parameters.Length <= 0) { - return Task.FromResult(null); + return Task.FromResult(null); } if (parameters.Length > 1) @@ -76,13 +75,13 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency var value = HttpActionParameterHelper.FindParameterValue(methodArguments, parameters[0]); if (value == null) { - return Task.FromResult(null); + return Task.FromResult(null); } - return Task.FromResult(new StringContent(jsonSerializer.Serialize(value), Encoding.UTF8, MimeTypes.Application.Json)); + return Task.FromResult(new StringContent(jsonSerializer.Serialize(value), Encoding.UTF8, MimeTypes.Application.Json)); } - protected virtual async Task GenerateFormPostDataAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments) + protected virtual async Task GenerateFormPostDataAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments) { var parameters = action .Parameters @@ -108,7 +107,7 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency { using (var scope = ServiceScopeFactory.CreateScope()) { - var formDataContents = await (Task>>)CallObjectToFormDataAsyncMethod + var formDataContents = await (Task>?>)CallObjectToFormDataAsyncMethod .MakeGenericMethod(value.GetType()) .Invoke(this, new object[] { @@ -116,7 +115,7 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency action, parameter, value - }); + })!; if (formDataContents != null) { @@ -158,12 +157,12 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency { foreach (var item in (IEnumerable) value) { - formData.Add(new StringContent(item.ToString(), Encoding.UTF8), parameter.Name); + formData.Add(new StringContent(item.ToString()!, Encoding.UTF8), parameter.Name); } } else { - formData.Add(new StringContent(value.ToString(), Encoding.UTF8), parameter.Name); + formData.Add(new StringContent(value.ToString()!, Encoding.UTF8), parameter.Name); } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs index 63ddd75510..65703dc56b 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs @@ -100,15 +100,15 @@ public class ClientProxyUrlBuilder : ITransientDependency { using (var scope = ServiceScopeFactory.CreateScope()) { - var path = await (Task)CallObjectToPathAsyncMethod + var path = await (Task)CallObjectToPathAsyncMethod .MakeGenericMethod(value.GetType()) - .Invoke(this, new object[] + .Invoke(this, new object?[] { scope.ServiceProvider.GetRequiredService(HttpClientProxyingOptions.PathConverts[value.GetType()]), action, pathParameter, value - }); + })!; if (path != null) { @@ -143,7 +143,7 @@ public class ClientProxyUrlBuilder : ITransientDependency { using (var scope = ServiceScopeFactory.CreateScope()) { - var queryString = await (Task)CallObjectToQueryStringAsyncMethod + var queryString = await (Task)CallObjectToQueryStringAsyncMethod .MakeGenericMethod(value.GetType()) .Invoke(this, new object[] { @@ -151,7 +151,7 @@ public class ClientProxyUrlBuilder : ITransientDependency action, queryStringParameter, value - }); + })!; if (queryString != null) { @@ -218,11 +218,11 @@ public class ClientProxyUrlBuilder : ITransientDependency return true; } - protected virtual Task ConvertValueToStringAsync([CanBeNull] object value) + protected virtual Task ConvertValueToStringAsync(object? value) { if (value is DateTime dateTimeValue) { - return Task.FromResult(dateTimeValue.ToUniversalTime().ToString("O")); + return Task.FromResult(dateTimeValue.ToUniversalTime().ToString("O"))!; } return Task.FromResult(value?.ToString()); diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/CurrentApiVersionInfo.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/CurrentApiVersionInfo.cs index f56e9e893a..7c0bac4c81 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/CurrentApiVersionInfo.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/CurrentApiVersionInfo.cs @@ -6,11 +6,11 @@ namespace Volo.Abp.Http.Client.ClientProxying; public class CurrentApiVersionInfo : ICurrentApiVersionInfo, ISingletonDependency { - public ApiVersionInfo ApiVersionInfo => _currentApiVersionInfo.Value; + public ApiVersionInfo? ApiVersionInfo => _currentApiVersionInfo.Value; - private readonly AsyncLocal _currentApiVersionInfo = new AsyncLocal(); + private readonly AsyncLocal _currentApiVersionInfo = new AsyncLocal(); - public virtual IDisposable Change(ApiVersionInfo apiVersionInfo) + public virtual IDisposable Change(ApiVersionInfo? apiVersionInfo) { var parent = ApiVersionInfo; _currentApiVersionInfo.Value = apiVersionInfo; diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/IClientProxyApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/IClientProxyApiDescriptionFinder.cs index baf1d6facf..4394b92bcc 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/IClientProxyApiDescriptionFinder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/IClientProxyApiDescriptionFinder.cs @@ -4,7 +4,7 @@ namespace Volo.Abp.Http.Client.ClientProxying; public interface IClientProxyApiDescriptionFinder { - ActionApiDescriptionModel FindAction(string methodName); + ActionApiDescriptionModel? FindAction(string methodName); ApplicationApiDescriptionModel GetApiDescription(); } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ICurrentApiVersionInfo.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ICurrentApiVersionInfo.cs index 9a8fe264bf..e5ac53fafe 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ICurrentApiVersionInfo.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ICurrentApiVersionInfo.cs @@ -4,7 +4,7 @@ namespace Volo.Abp.Http.Client.ClientProxying; public interface ICurrentApiVersionInfo { - ApiVersionInfo ApiVersionInfo { get; } + ApiVersionInfo? ApiVersionInfo { get; } - IDisposable Change(ApiVersionInfo apiVersionInfo); + IDisposable Change(ApiVersionInfo? apiVersionInfo); } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs index f01ada7127..44f005add9 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs @@ -118,7 +118,7 @@ public class ApiDescriptionFinder : IApiDescriptionFinder, ITransientDependency var content = await response.Content.ReadAsStringAsync(); - var result = JsonSerializer.Deserialize(content, DeserializeOptions); + var result = JsonSerializer.Deserialize(content, DeserializeOptions)!; return result; } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index 9c30c84496..0f5a9e3642 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -66,7 +66,7 @@ public class DynamicHttpProxyInterceptor : AbpInterceptor, ITransientD var returnType = invocation.Method.ReturnType.GenericTypeArguments[0]; var result = (Task)CallRequestAsyncMethod .MakeGenericMethod(returnType) - .Invoke(this, new object[] { context }); + .Invoke(this, new object[] { context })!; invocation.ReturnValue = await GetResultAsync(result, returnType); } @@ -99,6 +99,6 @@ public class DynamicHttpProxyInterceptor : AbpInterceptor, ITransientD .MakeGenericType(resultType) .GetProperty(nameof(Task.Result), BindingFlags.Instance | BindingFlags.Public); Check.NotNull(resultProperty, nameof(resultProperty)); - return resultProperty.GetValue(task); + return resultProperty!.GetValue(task)!; } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpActionParameterHelper.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpActionParameterHelper.cs index d5d5c4d971..f9fc79b81f 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpActionParameterHelper.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpActionParameterHelper.cs @@ -6,7 +6,7 @@ namespace Volo.Abp.Http.Client.Proxying; internal static class HttpActionParameterHelper { - public static object FindParameterValue(IReadOnlyDictionary methodArguments, ParameterApiDescriptionModel apiParameter) + public static object? FindParameterValue(IReadOnlyDictionary methodArguments, ParameterApiDescriptionModel apiParameter) { var value = methodArguments.GetOrDefault(apiParameter.NameOnMethod); if (value == null) From 96febd9fdf285d64f68ee3cb1f82e0fbd952b842 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 16:07:27 +0800 Subject: [PATCH 86/92] Enable nullable annotations for Volo.Abp.Http.* packages --- .../Volo.Abp.Http.Abstractions.csproj | 2 ++ .../Abp/Http/ClientProxyExceptionEventData.cs | 2 +- .../Volo.Abp.Http.Client.Dapr.csproj | 2 ++ .../Http/Client/Dapr/AbpInvocationHandler.cs | 2 +- ...ttp.Client.IdentityModel.MauiBlazor.csproj | 2 ++ .../MauiBlazorAbpAccessTokenProvider.cs | 2 +- ...o.Abp.Http.Client.IdentityModel.Web.csproj | 2 ++ .../Web/HttpContextAbpAccessTokenProvider.cs | 2 +- ...tp.Client.IdentityModel.WebAssembly.csproj | 2 ++ .../WebAssemblyAbpAccessTokenProvider.cs | 4 ++-- .../Volo.Abp.Http.Client.IdentityModel.csproj | 2 ++ .../RemoteServiceConfigurationExtensions.cs | 3 +-- .../Volo.Abp.Http.Client.Web.csproj | 2 ++ .../AbpHttpClientProxyServiceConvention.cs | 18 ++++++++--------- .../Volo.Abp.IdentityModel.csproj | 2 ++ .../IdentityModel/AbpIdentityClientOptions.cs | 4 ++-- .../IIdentityModelAuthenticationService.cs | 2 +- .../IdentityClientConfiguration.cs | 20 +++++++++---------- .../IdentityClientConfigurationDictionary.cs | 4 ++-- .../IdentityModelAuthenticationService.cs | 4 ++-- ...IdentityModelDiscoveryDocumentCacheItem.cs | 4 ++-- .../IdentityModelHttpRequestMessageOptions.cs | 2 +- .../IdentityModelTokenCacheItem.cs | 2 +- 23 files changed, 53 insertions(+), 38 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj b/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj index 332c803147..adbc783c15 100644 --- a/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj +++ b/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.Http.Abstractions Volo.Abp.Http.Abstractions $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.Http.Abstractions/Volo/Abp/Http/ClientProxyExceptionEventData.cs b/framework/src/Volo.Abp.Http.Abstractions/Volo/Abp/Http/ClientProxyExceptionEventData.cs index 1bc17c7b65..029556c00e 100644 --- a/framework/src/Volo.Abp.Http.Abstractions/Volo/Abp/Http/ClientProxyExceptionEventData.cs +++ b/framework/src/Volo.Abp.Http.Abstractions/Volo/Abp/Http/ClientProxyExceptionEventData.cs @@ -4,5 +4,5 @@ public class ClientProxyExceptionEventData { public int? StatusCode { get; set; } - public string ReasonPhrase { get; set; } + public string? ReasonPhrase { get; set; } } diff --git a/framework/src/Volo.Abp.Http.Client.Dapr/Volo.Abp.Http.Client.Dapr.csproj b/framework/src/Volo.Abp.Http.Client.Dapr/Volo.Abp.Http.Client.Dapr.csproj index 0d22e68b97..1fd0b7b07b 100644 --- a/framework/src/Volo.Abp.Http.Client.Dapr/Volo.Abp.Http.Client.Dapr.csproj +++ b/framework/src/Volo.Abp.Http.Client.Dapr/Volo.Abp.Http.Client.Dapr.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable diff --git a/framework/src/Volo.Abp.Http.Client.Dapr/Volo/Abp/Http/Client/Dapr/AbpInvocationHandler.cs b/framework/src/Volo.Abp.Http.Client.Dapr/Volo/Abp/Http/Client/Dapr/AbpInvocationHandler.cs index 9ebfb5665d..4a17c3b67a 100644 --- a/framework/src/Volo.Abp.Http.Client.Dapr/Volo/Abp/Http/Client/Dapr/AbpInvocationHandler.cs +++ b/framework/src/Volo.Abp.Http.Client.Dapr/Volo/Abp/Http/Client/Dapr/AbpInvocationHandler.cs @@ -12,7 +12,7 @@ public class AbpInvocationHandler : InvocationHandler, ITransientDependency { if (!daprOptions.Value.HttpEndpoint.IsNullOrWhiteSpace()) { - DaprEndpoint = daprOptions.Value.HttpEndpoint; + DaprEndpoint = daprOptions.Value.HttpEndpoint!; } } } diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo.Abp.Http.Client.IdentityModel.MauiBlazor.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo.Abp.Http.Client.IdentityModel.MauiBlazor.csproj index 671fd3db2d..4a92cc975d 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo.Abp.Http.Client.IdentityModel.MauiBlazor.csproj +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo.Abp.Http.Client.IdentityModel.MauiBlazor.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.Http.Client.IdentityModel.MauiBlazor $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; false diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiBlazorAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiBlazorAbpAccessTokenProvider.cs index 8afbcbafed..3f923aa9bb 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiBlazorAbpAccessTokenProvider.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiBlazorAbpAccessTokenProvider.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.Http.Client.IdentityModel.MauiBlazor; [Dependency(ReplaceServices = true)] public class MauiBlazorAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency { - public virtual Task GetTokenAsync() + public virtual Task GetTokenAsync() { return Task.FromResult(null as string); } diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj index 4fc1525e59..05d1a14ef8 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.Http.Client.IdentityModel.Web Volo.Abp.Http.Client.IdentityModel.Web $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextAbpAccessTokenProvider.cs index 97d88bd3b0..5044513438 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextAbpAccessTokenProvider.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextAbpAccessTokenProvider.cs @@ -16,7 +16,7 @@ public class HttpContextAbpAccessTokenProvider : IAbpAccessTokenProvider, ITrans HttpContextAccessor = httpContextAccessor; } - public virtual async Task GetTokenAsync() + public virtual async Task GetTokenAsync() { var httpContext = HttpContextAccessor?.HttpContext; if (httpContext == null) diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj index e98f5d92ff..42d60909bc 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.Http.Client.IdentityModel.WebAssembly Volo.Abp.Http.Client.IdentityModel.WebAssembly $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/WebAssemblyAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/WebAssemblyAbpAccessTokenProvider.cs index d0a68cdb7c..137787820b 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/WebAssemblyAbpAccessTokenProvider.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/WebAssemblyAbpAccessTokenProvider.cs @@ -8,14 +8,14 @@ namespace Volo.Abp.Http.Client.IdentityModel.WebAssembly; [Dependency(ReplaceServices = true)] public class WebAssemblyAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency { - protected IAccessTokenProvider AccessTokenProvider { get; } + protected IAccessTokenProvider? AccessTokenProvider { get; } public WebAssemblyAbpAccessTokenProvider(IAccessTokenProvider accessTokenProvider) { AccessTokenProvider = accessTokenProvider; } - public virtual async Task GetTokenAsync() + public virtual async Task GetTokenAsync() { if (AccessTokenProvider == null) { diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj index 083e987d49..3e791a1e69 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.Http.Client.IdentityModel Volo.Abp.Http.Client.IdentityModel $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo/Abp/Http/Client/RemoteServiceConfigurationExtensions.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo/Abp/Http/Client/RemoteServiceConfigurationExtensions.cs index 417875619b..58c4b71078 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo/Abp/Http/Client/RemoteServiceConfigurationExtensions.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo/Abp/Http/Client/RemoteServiceConfigurationExtensions.cs @@ -8,8 +8,7 @@ public static class RemoteServiceConfigurationExtensions public const string IdentityClientName = "IdentityClient"; public const string UseCurrentAccessTokenName = "UseCurrentAccessToken"; - [CanBeNull] - public static string GetIdentityClient([NotNull] this RemoteServiceConfiguration configuration) + public static string? GetIdentityClient([NotNull] this RemoteServiceConfiguration configuration) { Check.NotNullOrEmpty(configuration, nameof(configuration)); diff --git a/framework/src/Volo.Abp.Http.Client.Web/Volo.Abp.Http.Client.Web.csproj b/framework/src/Volo.Abp.Http.Client.Web/Volo.Abp.Http.Client.Web.csproj index 68bbbd1157..63da778ecd 100644 --- a/framework/src/Volo.Abp.Http.Client.Web/Volo.Abp.Http.Client.Web.csproj +++ b/framework/src/Volo.Abp.Http.Client.Web/Volo.Abp.Http.Client.Web.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.Http.Client.Web Volo.Abp.Http.Client.Web $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs b/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs index 49080939c2..a7a2aad343 100644 --- a/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs +++ b/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs @@ -69,7 +69,7 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention if (controllerApiDescription != null && !controllerApiDescription.ControllerGroupName.IsNullOrWhiteSpace()) { - controller.ControllerName = controllerApiDescription.ControllerGroupName; + controller.ControllerName = controllerApiDescription.ControllerGroupName!; } ConfigureClientProxySelector(controller); @@ -115,7 +115,7 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention { var selector = controller.Selectors.FirstOrDefault(); selector?.EndpointMetadata.Add(new AreaAttribute(moduleApiDescription.RootPath)); - controller.RouteValues.Add(new KeyValuePair("area", moduleApiDescription.RootPath)); + controller.RouteValues.Add(new KeyValuePair("area", moduleApiDescription.RootPath)); } var controllerType = controller.ControllerType.AsType(); @@ -163,7 +163,7 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention var abpServiceSelectorModel = new SelectorModel { AttributeRouteModel = new AttributeRouteModel(new RouteAttribute(template: actionApiDescriptionModel.Url)), - ActionConstraints = { new HttpMethodActionConstraint(new[] { actionApiDescriptionModel.HttpMethod }) } + ActionConstraints = { new HttpMethodActionConstraint(new[] { actionApiDescriptionModel.HttpMethod! }) } }; action.Selectors.Add(abpServiceSelectorModel); @@ -190,7 +190,7 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention if (!selector.ActionConstraints.OfType().Any()) { - selector.ActionConstraints.Add(new HttpMethodActionConstraint(new[] { httpMethod })); + selector.ActionConstraints.Add(new HttpMethodActionConstraint(new[] { httpMethod! })); } } } @@ -226,7 +226,7 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention } } - protected virtual ModuleApiDescriptionModel FindModuleApiDescriptionModel(ControllerModel controller) + protected virtual ModuleApiDescriptionModel? FindModuleApiDescriptionModel(ControllerModel controller) { var appServiceType = FindAppServiceInterfaceType(controller); if (appServiceType == null) @@ -246,7 +246,7 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention return null; } - protected virtual ControllerApiDescriptionModel FindControllerApiDescriptionModel(ControllerModel controller) + protected virtual ControllerApiDescriptionModel? FindControllerApiDescriptionModel(ControllerModel controller) { var appServiceType = FindAppServiceInterfaceType(controller); if (appServiceType == null) @@ -266,7 +266,7 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention return null; } - protected virtual ActionApiDescriptionModel FindActionApiDescriptionModel(ControllerModel controller, ActionModel action) + protected virtual ActionApiDescriptionModel? FindActionApiDescriptionModel(ControllerModel controller, ActionModel action) { var appServiceType = FindAppServiceInterfaceType(controller); if (appServiceType == null) @@ -285,7 +285,7 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention return null; } - if (actionApiDescriptionModel.ImplementFrom.StartsWith("Volo.Abp.Application.Services")) + if (actionApiDescriptionModel.ImplementFrom!.StartsWith("Volo.Abp.Application.Services")) { return actionApiDescriptionModel; } @@ -298,7 +298,7 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention return null; } - protected virtual Type FindAppServiceInterfaceType(ControllerModel controller) + protected virtual Type? FindAppServiceInterfaceType(ControllerModel controller) { return controller.ControllerType.GetInterfaces() .FirstOrDefault(type => !type.IsGenericType && diff --git a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj index a707f58b9c..b0c2b3e567 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj +++ b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.IdentityModel Volo.Abp.IdentityModel $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/AbpIdentityClientOptions.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/AbpIdentityClientOptions.cs index 364d2dc2ea..62fc21a5fa 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/AbpIdentityClientOptions.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/AbpIdentityClientOptions.cs @@ -14,7 +14,7 @@ public class AbpIdentityClientOptions IdentityClients = new IdentityClientConfigurationDictionary(); } - public IdentityClientConfiguration GetClientConfiguration(ICurrentTenant currentTenant, string identityClientName = null) + public IdentityClientConfiguration? GetClientConfiguration(ICurrentTenant currentTenant, string? identityClientName = null) { if (identityClientName.IsNullOrWhiteSpace()) { @@ -35,7 +35,7 @@ public class AbpIdentityClientOptions } } - return IdentityClients.GetOrDefault(identityClientName) ?? + return IdentityClients.GetOrDefault(identityClientName!) ?? IdentityClients.Default; } } diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IIdentityModelAuthenticationService.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IIdentityModelAuthenticationService.cs index fee1a032fb..8a5902bdbf 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IIdentityModelAuthenticationService.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IIdentityModelAuthenticationService.cs @@ -9,7 +9,7 @@ public interface IIdentityModelAuthenticationService { Task TryAuthenticateAsync( [NotNull] HttpClient client, - string identityClientName = null); + string? identityClientName = null); Task GetAccessTokenAsync( IdentityClientConfiguration configuration); diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfiguration.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfiguration.cs index 8faf3225ab..011e40b4b3 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfiguration.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfiguration.cs @@ -5,14 +5,14 @@ using IdentityModel; namespace Volo.Abp.IdentityModel; -public class IdentityClientConfiguration : Dictionary +public class IdentityClientConfiguration : Dictionary { /// /// Possible values: "client_credentials" or "password". /// Default value: "client_credentials". /// public string GrantType { - get => this.GetOrDefault(nameof(GrantType)); + get => this.GetOrDefault(nameof(GrantType))!; set => this[nameof(GrantType)] = value; } @@ -20,7 +20,7 @@ public class IdentityClientConfiguration : Dictionary /// Client Id. /// public string ClientId { - get => this.GetOrDefault(nameof(ClientId)); + get => this.GetOrDefault(nameof(ClientId))!; set => this[nameof(ClientId)] = value; } @@ -28,7 +28,7 @@ public class IdentityClientConfiguration : Dictionary /// Client secret (as plain text - without hashed). /// public string ClientSecret { - get => this.GetOrDefault(nameof(ClientSecret)); + get => this.GetOrDefault(nameof(ClientSecret))!; set => this[nameof(ClientSecret)] = value; } @@ -36,7 +36,7 @@ public class IdentityClientConfiguration : Dictionary /// User name. /// Valid only if is "password". /// - public string UserName { + public string? UserName { get => this.GetOrDefault(nameof(UserName)); set => this[nameof(UserName)] = value; } @@ -45,7 +45,7 @@ public class IdentityClientConfiguration : Dictionary /// Password of the . /// Valid only if is "password". /// - public string UserPassword { + public string? UserPassword { get => this.GetOrDefault(nameof(UserPassword)); set => this[nameof(UserPassword)] = value; } @@ -54,7 +54,7 @@ public class IdentityClientConfiguration : Dictionary /// Authority. /// public string Authority { - get => this.GetOrDefault(nameof(Authority)); + get => this.GetOrDefault(nameof(Authority))!; set => this[nameof(Authority)] = value; } @@ -62,7 +62,7 @@ public class IdentityClientConfiguration : Dictionary /// Scope. /// public string Scope { - get => this.GetOrDefault(nameof(Scope)); + get => this.GetOrDefault(nameof(Scope))!; set => this[nameof(Scope)] = value; } @@ -113,8 +113,8 @@ public class IdentityClientConfiguration : Dictionary string clientId, string clientSecret, string grantType = OidcConstants.GrantTypes.ClientCredentials, - string userName = null, - string userPassword = null, + string? userName = null, + string? userPassword = null, bool requireHttps = true, int cacheAbsoluteExpiration = 60 * 30, bool validateIssuerName = true, diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfigurationDictionary.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfigurationDictionary.cs index e8c42fe390..4993cfa462 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfigurationDictionary.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfigurationDictionary.cs @@ -2,11 +2,11 @@ namespace Volo.Abp.IdentityModel; -public class IdentityClientConfigurationDictionary : Dictionary +public class IdentityClientConfigurationDictionary : Dictionary { public const string DefaultName = "Default"; - public IdentityClientConfiguration Default { + public IdentityClientConfiguration? Default { get => this.GetOrDefault(DefaultName); set => this[DefaultName] = value; } diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs index 6f5f8eda95..4354d83735 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs @@ -54,7 +54,7 @@ public class IdentityModelAuthenticationService : IIdentityModelAuthenticationSe public async Task TryAuthenticateAsync( [NotNull] HttpClient client, - string identityClientName = null) + string? identityClientName = null) { var accessToken = await GetAccessTokenOrNullAsync(identityClientName); if (accessToken == null) @@ -66,7 +66,7 @@ public class IdentityModelAuthenticationService : IIdentityModelAuthenticationSe return true; } - protected virtual async Task GetAccessTokenOrNullAsync(string identityClientName) + protected virtual async Task GetAccessTokenOrNullAsync(string? identityClientName) { var configuration = ClientOptions.GetClientConfiguration(CurrentTenant, identityClientName); if (configuration == null) diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelDiscoveryDocumentCacheItem.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelDiscoveryDocumentCacheItem.cs index 0fbf50d020..6cabe5d9b9 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelDiscoveryDocumentCacheItem.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelDiscoveryDocumentCacheItem.cs @@ -7,9 +7,9 @@ namespace Volo.Abp.IdentityModel; [IgnoreMultiTenancy] public class IdentityModelDiscoveryDocumentCacheItem { - public string TokenEndpoint { get; set; } + public string TokenEndpoint { get; set; } = default!; - public string DeviceAuthorizationEndpoint { get; set; } + public string DeviceAuthorizationEndpoint { get; set; } = default!; public IdentityModelDiscoveryDocumentCacheItem() { diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs index d72cc9682e..78b2a342f4 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs @@ -5,5 +5,5 @@ namespace Volo.Abp.IdentityModel; public class IdentityModelHttpRequestMessageOptions { - public Action ConfigureHttpRequestMessage { get; set; } + public Action? ConfigureHttpRequestMessage { get; set; } } diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelTokenCacheItem.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelTokenCacheItem.cs index 2a164a23e6..72beed1577 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelTokenCacheItem.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelTokenCacheItem.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.IdentityModel; [Serializable] public class IdentityModelTokenCacheItem { - public string AccessToken { get; set; } + public string AccessToken { get; set; } = default!; public IdentityModelTokenCacheItem() { From 226859c82eb7467deb39365b1b97654fe076da6d Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 17:27:09 +0800 Subject: [PATCH 87/92] Enable nullable annotations for Volo.Abp.TextTemplateing.core --- .../Volo.Abp.TextTemplating.Core.csproj | 2 ++ .../Abp/TextTemplating/AbpTemplateRenderer.cs | 8 ++--- .../AbpTextTemplatingOptions.cs | 2 +- .../IDynamicTemplateDefinitionStore.cs | 2 +- .../IStaticTemplateDefinitionStore.cs | 2 +- .../ITemplateContentContributor.cs | 2 +- .../ITemplateContentProvider.cs | 8 ++--- .../ITemplateDefinitionContext.cs | 2 +- .../ITemplateDefinitionManager.cs | 3 +- .../Abp/TextTemplating/ITemplateRenderer.cs | 6 ++-- .../ITemplateRenderingEngine.cs | 6 ++-- .../NullIDynamicTemplateDefinitionStore.cs | 6 ++-- .../StaticTemplateDefinitionStore.cs | 6 ++-- .../TemplateContentContributorContext.cs | 5 ++- .../TextTemplating/TemplateContentProvider.cs | 12 +++---- .../Abp/TextTemplating/TemplateDefinition.cs | 35 ++++++++----------- .../TemplateDefinitionContext.cs | 2 +- .../TemplateDefinitionExtensions.cs | 2 +- .../TemplateDefinitionManager.cs | 2 +- .../TemplateRenderingEngineBase.cs | 6 ++-- .../FileInfoLocalizedTemplateContentReader.cs | 6 ++-- .../ILocalizedTemplateContentReader.cs | 2 +- .../NullLocalizedTemplateContentReader.cs | 2 +- .../VirtualFiles/TemplateContentFileInfo.cs | 4 +-- .../VirtualFileTemplateContentContributor.cs | 2 +- ...ualFolderLocalizedTemplateContentReader.cs | 4 +-- 26 files changed, 67 insertions(+), 72 deletions(-) diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj b/framework/src/Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj index 8581d01dc4..f405dfe00c 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTemplateRenderer.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTemplateRenderer.cs index 43cc829010..6e17d6701a 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTemplateRenderer.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTemplateRenderer.cs @@ -25,9 +25,9 @@ public class AbpTemplateRenderer : ITemplateRenderer, ITransientDependency public virtual async Task RenderAsync( string templateName, - object model = null, - string cultureName = null, - Dictionary globalContext = null) + object? model = null, + string? cultureName = null, + Dictionary? globalContext = null) { var templateDefinition = await TemplateDefinitionManager.GetAsync(templateName); @@ -38,7 +38,7 @@ public class AbpTemplateRenderer : ITemplateRenderer, ITransientDependency renderEngine = Options.DefaultRenderingEngine; } - var providerType = Options.RenderingEngines.GetOrDefault(renderEngine); + var providerType = Options.RenderingEngines.GetOrDefault(renderEngine!); if (providerType != null && typeof(ITemplateRenderingEngine).IsAssignableFrom(providerType)) { diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs index 28b2e28ad0..40dac35703 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs @@ -10,7 +10,7 @@ public class AbpTextTemplatingOptions public ITypeList ContentContributors { get; } public IDictionary RenderingEngines { get; } - public string DefaultRenderingEngine { get; set; } + public string? DefaultRenderingEngine { get; set; } public HashSet DeletedTemplates { get; } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/IDynamicTemplateDefinitionStore.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/IDynamicTemplateDefinitionStore.cs index e275eb39be..205cae5824 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/IDynamicTemplateDefinitionStore.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/IDynamicTemplateDefinitionStore.cs @@ -10,5 +10,5 @@ public interface IDynamicTemplateDefinitionStore Task> GetAllAsync(); - Task GetOrNullAsync(string name); + Task GetOrNullAsync(string name); } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/IStaticTemplateDefinitionStore.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/IStaticTemplateDefinitionStore.cs index d298a42541..6e6d763616 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/IStaticTemplateDefinitionStore.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/IStaticTemplateDefinitionStore.cs @@ -10,5 +10,5 @@ public interface IStaticTemplateDefinitionStore Task> GetAllAsync(); - Task GetOrNullAsync(string name); + Task GetOrNullAsync(string name); } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentContributor.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentContributor.cs index fadd8696a8..086644db98 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentContributor.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentContributor.cs @@ -4,5 +4,5 @@ namespace Volo.Abp.TextTemplating; public interface ITemplateContentContributor { - Task GetOrNullAsync(TemplateContentContributorContext context); + Task GetOrNullAsync(TemplateContentContributorContext context); } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentProvider.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentProvider.cs index ac944946c0..1fe3f25d5f 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentProvider.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentProvider.cs @@ -5,16 +5,16 @@ namespace Volo.Abp.TextTemplating; public interface ITemplateContentProvider { - Task GetContentOrNullAsync( + Task GetContentOrNullAsync( [NotNull] string templateName, - [CanBeNull] string cultureName = null, + string? cultureName = null, bool tryDefaults = true, bool useCurrentCultureIfCultureNameIsNull = true ); - Task GetContentOrNullAsync( + Task GetContentOrNullAsync( [NotNull] TemplateDefinition templateDefinition, - [CanBeNull] string cultureName = null, + string? cultureName = null, bool tryDefaults = true, bool useCurrentCultureIfCultureNameIsNull = true ); diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionContext.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionContext.cs index f2caa3c805..fd219ea23c 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionContext.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionContext.cs @@ -6,7 +6,7 @@ public interface ITemplateDefinitionContext { IReadOnlyList GetAll(); - TemplateDefinition GetOrNull(string name); + TemplateDefinition? GetOrNull(string name); void Add(params TemplateDefinition[] definitions); } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionManager.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionManager.cs index fa20673cea..b8903db522 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionManager.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionManager.cs @@ -12,6 +12,5 @@ public interface ITemplateDefinitionManager [ItemNotNull] Task> GetAllAsync(); - [ItemCanBeNull] - Task GetOrNullAsync(string name); + Task GetOrNullAsync(string name); } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderer.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderer.cs index 62e17f69a8..324984d44b 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderer.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderer.cs @@ -17,8 +17,8 @@ public interface ITemplateRenderer /// Task RenderAsync( [NotNull] string templateName, - [CanBeNull] object model = null, - [CanBeNull] string cultureName = null, - [CanBeNull] Dictionary globalContext = null + object? model = null, + string? cultureName = null, + Dictionary? globalContext = null ); } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderingEngine.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderingEngine.cs index da080ffdb3..e100825011 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderingEngine.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderingEngine.cs @@ -19,8 +19,8 @@ public interface ITemplateRenderingEngine /// Task RenderAsync( [NotNull] string templateName, - [CanBeNull] object model = null, - [CanBeNull] string cultureName = null, - [CanBeNull] Dictionary globalContext = null + object? model = null, + string? cultureName = null, + Dictionary? globalContext = null ); } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/NullIDynamicTemplateDefinitionStore.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/NullIDynamicTemplateDefinitionStore.cs index 115f46b2ac..5c72c6e7c4 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/NullIDynamicTemplateDefinitionStore.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/NullIDynamicTemplateDefinitionStore.cs @@ -8,13 +8,13 @@ namespace Volo.Abp.TextTemplating; public class NullIDynamicTemplateDefinitionStore : IDynamicTemplateDefinitionStore, ISingletonDependency { - private readonly static Task CachedTemplateResult = Task.FromResult((TemplateDefinition)null); + private readonly static Task CachedTemplateResult = Task.FromResult((TemplateDefinition?)null); private readonly static Task> CachedTemplatesResult = Task.FromResult((IReadOnlyList)Array.Empty().ToImmutableList()); public Task GetAsync(string name) { - return CachedTemplateResult; + return CachedTemplateResult!; } public Task> GetAllAsync() @@ -22,7 +22,7 @@ public class NullIDynamicTemplateDefinitionStore : IDynamicTemplateDefinitionSto return CachedTemplatesResult; } - public Task GetOrNullAsync(string name) + public Task GetOrNullAsync(string name) { return CachedTemplateResult; } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/StaticTemplateDefinitionStore.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/StaticTemplateDefinitionStore.cs index d12db86da8..4231f39b4d 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/StaticTemplateDefinitionStore.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/StaticTemplateDefinitionStore.cs @@ -36,7 +36,7 @@ public class StaticTemplateDefinitionStore : IStaticTemplateDefinitionStore, ISi throw new AbpException("Undefined template: " + name); } - return template; + return template!; } public virtual Task> GetAllAsync() @@ -44,7 +44,7 @@ public class StaticTemplateDefinitionStore : IStaticTemplateDefinitionStore, ISi return Task.FromResult>(TemplateDefinitions.Value.Values.ToImmutableList()); } - public virtual Task GetOrNullAsync(string name) + public virtual Task GetOrNullAsync(string name) { return Task.FromResult(TemplateDefinitions.Value.GetOrDefault(name)); } @@ -57,7 +57,7 @@ public class StaticTemplateDefinitionStore : IStaticTemplateDefinitionStore, ISi { var providers = Options .DefinitionProviders - .Select(p => scope.ServiceProvider.GetRequiredService(p) as ITemplateDefinitionProvider) + .Select(p => (scope.ServiceProvider.GetRequiredService(p) as ITemplateDefinitionProvider)!) .ToList(); var context = new TemplateDefinitionContext(templates); diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentContributorContext.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentContributorContext.cs index 11b9af255a..8ea941114a 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentContributorContext.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentContributorContext.cs @@ -11,13 +11,12 @@ public class TemplateContentContributorContext [NotNull] public IServiceProvider ServiceProvider { get; } - [CanBeNull] - public string Culture { get; } + public string? Culture { get; } public TemplateContentContributorContext( [NotNull] TemplateDefinition templateDefinition, [NotNull] IServiceProvider serviceProvider, - [CanBeNull] string culture) + string? culture) { TemplateDefinition = Check.NotNull(templateDefinition, nameof(templateDefinition)); ServiceProvider = Check.NotNull(serviceProvider, nameof(serviceProvider)); diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentProvider.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentProvider.cs index 64ecd1f4c7..5c9a51be82 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentProvider.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentProvider.cs @@ -26,9 +26,9 @@ public class TemplateContentProvider : ITemplateContentProvider, ITransientDepen _templateDefinitionManager = templateDefinitionManager; } - public virtual async Task GetContentOrNullAsync( + public virtual async Task GetContentOrNullAsync( [NotNull] string templateName, - [CanBeNull] string cultureName = null, + string? cultureName = null, bool tryDefaults = true, bool useCurrentCultureIfCultureNameIsNull = true) { @@ -36,9 +36,9 @@ public class TemplateContentProvider : ITemplateContentProvider, ITransientDepen return await GetContentOrNullAsync(template, cultureName); } - public virtual async Task GetContentOrNullAsync( + public virtual async Task GetContentOrNullAsync( [NotNull] TemplateDefinition templateDefinition, - [CanBeNull] string cultureName = null, + string? cultureName = null, bool tryDefaults = true, bool useCurrentCultureIfCultureNameIsNull = true) { @@ -53,7 +53,7 @@ public class TemplateContentProvider : ITemplateContentProvider, ITransientDepen using (var scope = ServiceScopeFactory.CreateScope()) { - string templateString = null; + string? templateString = null; if (cultureName == null && useCurrentCultureIfCultureNameIsNull) { @@ -151,7 +151,7 @@ public class TemplateContentProvider : ITemplateContentProvider, ITransientDepen .ToArray(); } - protected virtual async Task GetContentOrNullAsync( + protected virtual async Task GetContentOrNullAsync( ITemplateContentContributor[] contributors, TemplateContentContributorContext context) { diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinition.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinition.cs index 64aeba815e..a371fc3a9a 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinition.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinition.cs @@ -20,23 +20,19 @@ public class TemplateDefinition : IHasNameWithLocalizableDisplayName _displayName = value; } } - private ILocalizableString _displayName; + private ILocalizableString _displayName = default!; public bool IsLayout { get; } - [CanBeNull] - public string Layout { get; set; } + public string? Layout { get; set; } - [CanBeNull] - public string LocalizationResourceName { get; set; } + public string? LocalizationResourceName { get; set; } public bool IsInlineLocalized { get; set; } - [CanBeNull] - public string DefaultCultureName { get; } + public string? DefaultCultureName { get; } - [CanBeNull] - public string RenderEngine { get; set; } + public string? RenderEngine { get; set; } /// /// Gets/sets a key-value on the . @@ -46,8 +42,7 @@ public class TemplateDefinition : IHasNameWithLocalizableDisplayName /// Returns the value in the dictionary by given . /// Returns null if given is not present in the dictionary. /// - [CanBeNull] - public object this[string name] { + public object? this[string name] { get => Properties.GetOrDefault(name); set => Properties[name] = value; } @@ -56,15 +51,15 @@ public class TemplateDefinition : IHasNameWithLocalizableDisplayName /// Can be used to get/set custom properties for this feature. /// [NotNull] - public Dictionary Properties { get; } + public Dictionary Properties { get; } public TemplateDefinition( [NotNull] string name, [NotNull] Type localizationResource, - [CanBeNull] ILocalizableString displayName = null, + ILocalizableString? displayName = null, bool isLayout = false, - string layout = null, - string defaultCultureName = null) + string? layout = null, + string? defaultCultureName = null) : this(name, LocalizationResourceNameAttribute.GetName(localizationResource), displayName, isLayout, layout, defaultCultureName) { @@ -72,11 +67,11 @@ public class TemplateDefinition : IHasNameWithLocalizableDisplayName public TemplateDefinition( [NotNull] string name, - [CanBeNull] string localizationResourceName = null, - [CanBeNull] ILocalizableString displayName = null, + string? localizationResourceName = null, + ILocalizableString? displayName = null, bool isLayout = false, - string layout = null, - string defaultCultureName = null) + string? layout = null, + string? defaultCultureName = null) { Name = Check.NotNullOrWhiteSpace(name, nameof(name), MaxNameLength); LocalizationResourceName = localizationResourceName; @@ -84,7 +79,7 @@ public class TemplateDefinition : IHasNameWithLocalizableDisplayName IsLayout = isLayout; Layout = layout; DefaultCultureName = defaultCultureName; - Properties = new Dictionary(); + Properties = new Dictionary(); } /// diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs index b32332807f..9edd370ecf 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs @@ -17,7 +17,7 @@ public class TemplateDefinitionContext : ITemplateDefinitionContext return Templates.Values.ToImmutableList(); } - public virtual TemplateDefinition GetOrNull(string name) + public virtual TemplateDefinition? GetOrNull(string name) { return Templates.GetOrDefault(name); } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs index 35cc69275d..0d830e65ef 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs @@ -21,7 +21,7 @@ public static class TemplateDefinitionExtensions ); } - public static string GetVirtualFilePathOrNull( + public static string? GetVirtualFilePathOrNull( [NotNull] this TemplateDefinition templateDefinition) { Check.NotNull(templateDefinition, nameof(templateDefinition)); diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs index 7e2920e446..32d4d8eeab 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs @@ -28,7 +28,7 @@ public class TemplateDefinitionManager : ITemplateDefinitionManager, ISingletonD return permission; } - public virtual async Task GetOrNullAsync(string name) + public virtual async Task GetOrNullAsync(string name) { Check.NotNull(name, nameof(name)); diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateRenderingEngineBase.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateRenderingEngineBase.cs index a2c354801d..62c8dee43c 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateRenderingEngineBase.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateRenderingEngineBase.cs @@ -22,14 +22,14 @@ public abstract class TemplateRenderingEngineBase : ITemplateRenderingEngine StringLocalizerFactory = stringLocalizerFactory; } - public abstract Task RenderAsync(string templateName, object model = null, string cultureName = null, Dictionary globalContext = null); + public abstract Task RenderAsync(string templateName, object? model = null, string? cultureName = null, Dictionary? globalContext = null); - protected virtual async Task GetContentOrNullAsync(TemplateDefinition templateDefinition) + protected virtual async Task GetContentOrNullAsync(TemplateDefinition templateDefinition) { return await TemplateContentProvider.GetContentOrNullAsync(templateDefinition); } - protected virtual IStringLocalizer GetLocalizerOrNull(TemplateDefinition templateDefinition) + protected virtual IStringLocalizer? GetLocalizerOrNull(TemplateDefinition templateDefinition) { if (templateDefinition.LocalizationResourceName != null) { diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/FileInfoLocalizedTemplateContentReader.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/FileInfoLocalizedTemplateContentReader.cs index 27e400c082..81074936e6 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/FileInfoLocalizedTemplateContentReader.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/FileInfoLocalizedTemplateContentReader.cs @@ -5,8 +5,8 @@ namespace Volo.Abp.TextTemplating.VirtualFiles; public class FileInfoLocalizedTemplateContentReader : ILocalizedTemplateContentReader { - private IFileInfo _fileInfo; - private string _content; + private IFileInfo _fileInfo = default!; + private string _content = default!; public async Task ReadContentsAsync(IFileInfo fileInfo) { @@ -14,7 +14,7 @@ public class FileInfoLocalizedTemplateContentReader : ILocalizedTemplateContentR _content = await fileInfo.ReadAsStringAsync(); } - public string GetContentOrNull(string culture) + public string? GetContentOrNull(string? culture) { if (culture == null) { diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReader.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReader.cs index 9fc15d1954..ab2380c069 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReader.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReader.cs @@ -4,5 +4,5 @@ namespace Volo.Abp.TextTemplating.VirtualFiles; public interface ILocalizedTemplateContentReader { - public string GetContentOrNull([CanBeNull] string culture); + public string? GetContentOrNull(string? culture); } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/NullLocalizedTemplateContentReader.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/NullLocalizedTemplateContentReader.cs index 878428b5ef..f2988d8197 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/NullLocalizedTemplateContentReader.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/NullLocalizedTemplateContentReader.cs @@ -9,7 +9,7 @@ public class NullLocalizedTemplateContentReader : ILocalizedTemplateContentReade } - public string GetContentOrNull(string culture) + public string? GetContentOrNull(string? culture) { return null; } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/TemplateContentFileInfo.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/TemplateContentFileInfo.cs index 5469700432..45dbd6e553 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/TemplateContentFileInfo.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/TemplateContentFileInfo.cs @@ -2,7 +2,7 @@ namespace Volo.Abp.TextTemplating.VirtualFiles; public class TemplateContentFileInfo { - public string FileName { get; set; } + public string FileName { get; set; } = default!; - public string FileContent { get; set; } + public string FileContent { get; set; } = default!; } diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContentContributor.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContentContributor.cs index 7bd66f2f50..999bc62de9 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContentContributor.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContentContributor.cs @@ -15,7 +15,7 @@ public class VirtualFileTemplateContentContributor : ITemplateContentContributor _localizedTemplateContentReaderFactory = localizedTemplateContentReaderFactory; } - public virtual async Task GetOrNullAsync(TemplateContentContributorContext context) + public virtual async Task GetOrNullAsync(TemplateContentContributorContext context) { var localizedReader = await _localizedTemplateContentReaderFactory .CreateAsync(context.TemplateDefinition); diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs index 828978b1d2..0e6c9b13c2 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs @@ -9,7 +9,7 @@ namespace Volo.Abp.TextTemplating.VirtualFiles; public class VirtualFolderLocalizedTemplateContentReader : ILocalizedTemplateContentReader { - private Dictionary _dictionary; + private Dictionary _dictionary = default!; private readonly string[] _fileExtension; public VirtualFolderLocalizedTemplateContentReader(string[] fileExtension) @@ -44,7 +44,7 @@ public class VirtualFolderLocalizedTemplateContentReader : ILocalizedTemplateCon } } - public string GetContentOrNull(string cultureName) + public string? GetContentOrNull(string? cultureName) { if (cultureName == null) { From 5a78c1bde86d879b1fbf92a062af972d1e0f8c79 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 17:27:35 +0800 Subject: [PATCH 88/92] Enable nullable annotations for Volo.Abp.TextTemplateing.* projects --- .../Volo.Abp.TextTemplating.Razor.csproj | 2 ++ .../Razor/AbpRazorTemplateCSharpCompiler.cs | 2 +- .../DefaultAbpRazorProjectEngineFactory.cs | 2 +- .../Razor/EmptyProjectFileSystem.cs | 2 +- .../Razor/IAbpRazorProjectEngineFactory.cs | 2 +- .../Razor/IRazorTemplatePage.cs | 12 ++++----- .../Razor/NotFoundProjectItem.cs | 2 +- .../Razor/RazorTemplatePageBase.cs | 20 +++++++------- .../Razor/RazorTemplateRenderingEngine.cs | 26 +++++++++---------- .../Volo.Abp.TextTemplating.Scriban.csproj | 2 ++ .../Scriban/ScribanTemplateLocalizer.cs | 2 +- .../Scriban/ScribanTemplateRenderingEngine.cs | 16 ++++++------ .../Volo.Abp.TextTemplating.csproj | 2 ++ 13 files changed, 49 insertions(+), 43 deletions(-) diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj b/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj index 962746bd0a..4242ca9f29 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompiler.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompiler.cs index c1dc5005b1..bdc8897ddf 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompiler.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompiler.cs @@ -40,7 +40,7 @@ public class AbpRazorTemplateCSharpCompiler : ISingletonDependency .Select(x => MetadataReference.CreateFromFile(x.Location)) .ToImmutableList(); - public virtual Stream CreateAssembly(string code, string assemblyName, List references = null, CSharpCompilationOptions options = null) + public virtual Stream CreateAssembly(string code, string assemblyName, List? references = null, CSharpCompilationOptions? options = null) { var defaultReferences = DefaultReferences.Concat(Options.References); try diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpRazorProjectEngineFactory.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpRazorProjectEngineFactory.cs index d15d70ded6..d17bfaea4f 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpRazorProjectEngineFactory.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpRazorProjectEngineFactory.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.TextTemplating.Razor; public class DefaultAbpRazorProjectEngineFactory : IAbpRazorProjectEngineFactory, ITransientDependency { - public virtual async Task CreateAsync(Action configure = null) + public virtual async Task CreateAsync(Action? configure = null) { return RazorProjectEngine.Create(await CreateRazorConfigurationAsync(), EmptyProjectFileSystem.Empty, configure); } diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/EmptyProjectFileSystem.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/EmptyProjectFileSystem.cs index fd2b90a6b1..8c8d8703dd 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/EmptyProjectFileSystem.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/EmptyProjectFileSystem.cs @@ -21,7 +21,7 @@ internal class EmptyProjectFileSystem : RazorProjectFileSystem return GetItem(path, fileKind: null); } - public override RazorProjectItem GetItem(string path, string fileKind) + public override RazorProjectItem GetItem(string path, string? fileKind) { NormalizeAndEnsureValidPath(path); return new NotFoundProjectItem(string.Empty, path, fileKind); diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpRazorProjectEngineFactory.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpRazorProjectEngineFactory.cs index 969ce762d1..197133ef72 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpRazorProjectEngineFactory.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpRazorProjectEngineFactory.cs @@ -6,5 +6,5 @@ namespace Volo.Abp.TextTemplating.Razor; public interface IAbpRazorProjectEngineFactory { - Task CreateAsync(Action configure = null); + Task CreateAsync(Action? configure = null); } diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IRazorTemplatePage.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IRazorTemplatePage.cs index 78b80941e9..f4b2a17006 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IRazorTemplatePage.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IRazorTemplatePage.cs @@ -8,24 +8,24 @@ namespace Volo.Abp.TextTemplating.Razor; public interface IRazorTemplatePage : IRazorTemplatePage { - TModel Model { get; set; } + TModel? Model { get; set; } } public interface IRazorTemplatePage { IServiceProvider ServiceProvider { get; set; } - IStringLocalizer Localizer { get; set; } + IStringLocalizer? Localizer { get; set; } - HtmlEncoder HtmlEncoder { get; set; } + HtmlEncoder? HtmlEncoder { get; set; } - JavaScriptEncoder JavaScriptEncoder { get; set; } + JavaScriptEncoder? JavaScriptEncoder { get; set; } - UrlEncoder UrlEncoder { get; set; } + UrlEncoder? UrlEncoder { get; set; } Dictionary GlobalContext { get; set; } - string Body { get; set; } + string? Body { get; set; } Task ExecuteAsync(); diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/NotFoundProjectItem.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/NotFoundProjectItem.cs index 5db2c8f582..2651237d2d 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/NotFoundProjectItem.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/NotFoundProjectItem.cs @@ -6,7 +6,7 @@ namespace Volo.Abp.TextTemplating.Razor; internal class NotFoundProjectItem : RazorProjectItem { - public NotFoundProjectItem(string basePath, string path, string fileKind) + public NotFoundProjectItem(string basePath, string path, string? fileKind) { BasePath = basePath; FilePath = path; diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplatePageBase.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplatePageBase.cs index fd2d2c13e7..a85d9d1480 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplatePageBase.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplatePageBase.cs @@ -9,30 +9,30 @@ namespace Volo.Abp.TextTemplating.Razor; public abstract class RazorTemplatePageBase : RazorTemplatePageBase, IRazorTemplatePage { - public TModel Model { get; set; } + public TModel? Model { get; set; } } public abstract class RazorTemplatePageBase : IRazorTemplatePage { - public Dictionary GlobalContext { get; set; } + public Dictionary GlobalContext { get; set; } = default!; - public IServiceProvider ServiceProvider { get; set; } + public IServiceProvider ServiceProvider { get; set; } = default!; - public IStringLocalizer Localizer { get; set; } + public IStringLocalizer? Localizer { get; set; } - public HtmlEncoder HtmlEncoder { get; set; } + public HtmlEncoder? HtmlEncoder { get; set; } - public JavaScriptEncoder JavaScriptEncoder { get; set; } + public JavaScriptEncoder? JavaScriptEncoder { get; set; } - public UrlEncoder UrlEncoder { get; set; } + public UrlEncoder? UrlEncoder { get; set; } - public string Body { get; set; } + public string? Body { get; set; } private readonly StringBuilder _stringBuilder = new StringBuilder(); private AttributeInfo _attributeInfo; - public virtual void WriteLiteral(string literal = null) + public virtual void WriteLiteral(string? literal = null) { if (!literal.IsNullOrEmpty()) { @@ -40,7 +40,7 @@ public abstract class RazorTemplatePageBase : IRazorTemplatePage } } - public virtual void Write(object value = null) + public virtual void Write(object? value = null) { if (value is null) { diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderingEngine.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderingEngine.cs index 86298f2daf..2384bd8740 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderingEngine.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderingEngine.cs @@ -34,9 +34,9 @@ public class RazorTemplateRenderingEngine : TemplateRenderingEngineBase, ITransi public override async Task RenderAsync( [NotNull] string templateName, - [CanBeNull] object model = null, - [CanBeNull] string cultureName = null, - [CanBeNull] Dictionary globalContext = null) + object? model = null, + string? cultureName = null, + Dictionary? globalContext = null) { Check.NotNullOrWhiteSpace(templateName, nameof(templateName)); @@ -70,9 +70,9 @@ public class RazorTemplateRenderingEngine : TemplateRenderingEngineBase, ITransi protected virtual async Task RenderInternalAsync( string templateName, - string body, + string? body, Dictionary globalContext, - object model = null) + object? model = null) { var templateDefinition = await TemplateDefinitionManager.GetAsync(templateName); @@ -97,9 +97,9 @@ public class RazorTemplateRenderingEngine : TemplateRenderingEngineBase, ITransi protected virtual async Task RenderSingleTemplateAsync( TemplateDefinition templateDefinition, - string body, + string? body, Dictionary globalContext, - object model = null) + object? model = null) { return await RenderTemplateContentWithRazorAsync( templateDefinition, @@ -111,13 +111,13 @@ public class RazorTemplateRenderingEngine : TemplateRenderingEngineBase, ITransi protected virtual async Task RenderTemplateContentWithRazorAsync( TemplateDefinition templateDefinition, - string body, + string? body, Dictionary globalContext, - object model = null) + object? model = null) { var assembly = await AbpCompiledViewProvider.GetAssemblyAsync(templateDefinition); - var templateType = assembly.GetType(AbpRazorTemplateConsts.TypeName); - var template = (IRazorTemplatePage)Activator.CreateInstance(templateType); + var templateType = assembly.GetType(AbpRazorTemplateConsts.TypeName)!; + var template = (IRazorTemplatePage)Activator.CreateInstance(templateType)!; using (var scope = ServiceScopeFactory.CreateScope()) { @@ -147,11 +147,11 @@ public class RazorTemplateRenderingEngine : TemplateRenderingEngineBase, ITransi } } - private void SetModel(IRazorTemplatePage razorTemplatePage, object model = null) + private void SetModel(IRazorTemplatePage razorTemplatePage, object? model = null) { if (razorTemplatePage is IRazorTemplatePage razorTemplatePageWithModel) { - razorTemplatePageWithModel.Model = (TModel)model; + razorTemplatePageWithModel.Model = (TModel?)model; } } } diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj index d18d90c8f9..ea1d0f0f8d 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateLocalizer.cs b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateLocalizer.cs index 91af004cf9..6bf32d1a58 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateLocalizer.cs +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateLocalizer.cs @@ -44,7 +44,7 @@ public class ScribanTemplateLocalizer : IScriptCustomFunction } var args = arguments.Skip(1).Where(x => x != null && !x.ToString().IsNullOrWhiteSpace()).ToArray(); - return args.Any() ? _localizer[name.ToString(), args] : _localizer[name.ToString()]; + return args.Any() ? _localizer[name.ToString()!, args] : _localizer[name.ToString()!]; } public int RequiredParameterCount => 1; diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderingEngine.cs b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderingEngine.cs index a4da669893..7a5ac79592 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderingEngine.cs +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderingEngine.cs @@ -24,9 +24,9 @@ public class ScribanTemplateRenderingEngine : TemplateRenderingEngineBase, ITran public override async Task RenderAsync( [NotNull] string templateName, - [CanBeNull] object model = null, - [CanBeNull] string cultureName = null, - [CanBeNull] Dictionary globalContext = null) + object? model = null, + string? cultureName = null, + Dictionary? globalContext = null) { Check.NotNullOrWhiteSpace(templateName, nameof(templateName)); @@ -59,7 +59,7 @@ public class ScribanTemplateRenderingEngine : TemplateRenderingEngineBase, ITran protected virtual async Task RenderInternalAsync( string templateName, Dictionary globalContext, - object model = null) + object? model = null) { var templateDefinition = await TemplateDefinitionManager.GetAsync(templateName); @@ -84,13 +84,13 @@ public class ScribanTemplateRenderingEngine : TemplateRenderingEngineBase, ITran protected virtual async Task RenderSingleTemplateAsync( TemplateDefinition templateDefinition, Dictionary globalContext, - object model = null) + object? model = null) { var rawTemplateContent = await GetContentOrNullAsync(templateDefinition); return await RenderTemplateContentWithScribanAsync( templateDefinition, - rawTemplateContent, + rawTemplateContent!, globalContext, model ); @@ -100,7 +100,7 @@ public class ScribanTemplateRenderingEngine : TemplateRenderingEngineBase, ITran TemplateDefinition templateDefinition, string templateContent, Dictionary globalContext, - object model = null) + object? model = null) { var context = CreateScribanTemplateContext( templateDefinition, @@ -116,7 +116,7 @@ public class ScribanTemplateRenderingEngine : TemplateRenderingEngineBase, ITran protected virtual TemplateContext CreateScribanTemplateContext( TemplateDefinition templateDefinition, Dictionary globalContext, - object model = null) + object? model = null) { var context = new TemplateContext(); diff --git a/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj b/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj index 27907183c0..f8d1d85192 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj +++ b/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable From dc448c4b7295dee37e0b932f0ae6c6e5493f6cda Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 17:28:11 +0800 Subject: [PATCH 89/92] Enable nullable annotations for Volo.Abp.AspNetCore.Mvc.Dapr.* projects --- .../AbpDaprEndpointRouteBuilderExtensions.cs | 32 +++++++++---------- ...lo.Abp.AspNetCore.Mvc.Dapr.EventBus.csproj | 2 ++ .../AbpAspNetCoreMvcDaprEventsController.cs | 4 +-- .../Volo.Abp.AspNetCore.Mvc.Dapr.csproj | 2 ++ .../Mvc/Dapr/DaprAppApiTokenValidator.cs | 6 ++-- .../Mvc/Dapr/DaprHttpContextExtensions.cs | 2 +- .../Mvc/Dapr/IDaprAppApiTokenValidator.cs | 2 +- 7 files changed, 27 insertions(+), 23 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/DaprAspNetCore/AbpDaprEndpointRouteBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/DaprAspNetCore/AbpDaprEndpointRouteBuilderExtensions.cs index b5866c5a68..24f68ef9ab 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/DaprAspNetCore/AbpDaprEndpointRouteBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/DaprAspNetCore/AbpDaprEndpointRouteBuilderExtensions.cs @@ -30,7 +30,7 @@ namespace Dapr /// /// An optional delegate used to configure the subscriptions. /// - public Func, Task> SubscriptionsCallback { get; set; } + public Func, Task>? SubscriptionsCallback { get; set; } } /// @@ -41,32 +41,32 @@ namespace Dapr /// /// Gets or sets the topic name. /// - public string Topic { get; set; } + public string Topic { get; set; } = default!; /// /// Gets or sets the pubsub name /// - public string PubsubName { get; set; } + public string PubsubName { get; set; } = default!; /// /// Gets or sets the route /// - public string Route { get; set; } + public string? Route { get; set; } /// /// Gets or sets the routes /// - public AbpRoutes Routes { get; set; } + public AbpRoutes? Routes { get; set; } /// /// Gets or sets the metadata. /// - public AbpMetadata Metadata { get; set; } + public AbpMetadata? Metadata { get; set; } /// /// Gets or sets the deadletter topic. /// - public string DeadLetterTopic { get; set; } + public string? DeadLetterTopic { get; set; } } /// @@ -99,12 +99,12 @@ namespace Dapr /// /// Gets or sets the default route /// - public string Default { get; set; } + public string? Default { get; set; } /// /// Gets or sets the routing rules /// - public List Rules { get; set; } + public List? Rules { get; set; } } /// @@ -115,12 +115,12 @@ namespace Dapr /// /// Gets or sets the CEL expression to match this route. /// - public string Match { get; set; } + public string Match { get; set; } = default!; /// /// Gets or sets the path of the route. /// - public string Path { get; set; } + public string Path { get; set; } = default!; } } @@ -166,7 +166,7 @@ namespace Microsoft.AspNetCore.Builder return CreateSubscribeEndPoint(endpoints, options); } - private static IEndpointConventionBuilder CreateSubscribeEndPoint(IEndpointRouteBuilder endpoints, AbpSubscribeOptions options = null) + private static IEndpointConventionBuilder CreateSubscribeEndPoint(IEndpointRouteBuilder endpoints, AbpSubscribeOptions? options = null) { if (endpoints is null) { @@ -175,7 +175,7 @@ namespace Microsoft.AspNetCore.Builder return endpoints.MapGet("dapr/subscribe", async context => { - var logger = context.RequestServices.GetRequiredService().CreateLogger("DaprTopicSubscription"); + var logger = context.RequestServices.GetService()?.CreateLogger("DaprTopicSubscription"); var dataSource = context.RequestServices.GetRequiredService(); var subscriptions = dataSource.Endpoints .OfType() @@ -185,7 +185,7 @@ namespace Microsoft.AspNetCore.Builder var topicMetadata = e.Metadata.GetOrderedMetadata(); var originalTopicMetadata = e.Metadata.GetOrderedMetadata(); - var subs = new List<(string PubsubName, string Name, string DeadLetterTopic, bool? EnableRawPayload, string Match, int Priority, Dictionary OriginalTopicMetadata, string MetadataSeparator, RoutePattern RoutePattern)>(); + var subs = new List<(string PubsubName, string Name, string? DeadLetterTopic, bool? EnableRawPayload, string Match, int Priority, Dictionary OriginalTopicMetadata, string? MetadataSeparator, RoutePattern RoutePattern)>(); for (int i = 0; i < topicMetadata.Count(); i++) { @@ -211,7 +211,7 @@ namespace Microsoft.AspNetCore.Builder { var first = e.First(); var rawPayload = e.Any(e => e.EnableRawPayload.GetValueOrDefault()); - var metadataSeparator = e.FirstOrDefault(e => !string.IsNullOrEmpty(e.MetadataSeparator)).MetadataSeparator ?? ","; + var metadataSeparator = e.FirstOrDefault(e => !string.IsNullOrEmpty(e.MetadataSeparator)).MetadataSeparator?.ToString() ?? ","; var rules = e.Where(e => !string.IsNullOrEmpty(e.Match)).ToList(); var defaultRoutes = e.Where(e => string.IsNullOrEmpty(e.Match)).Select(e => RoutePatternToString(e.RoutePattern)).ToList(); var defaultRoute = defaultRoutes.FirstOrDefault(); @@ -276,7 +276,7 @@ namespace Microsoft.AspNetCore.Builder .OrderBy(e => (e.PubsubName, e.Topic)) .ToList(); - await options?.SubscriptionsCallback(subscriptions); + await options?.SubscriptionsCallback!(subscriptions)!; await context.Response.WriteAsync(JsonSerializer.Serialize(subscriptions, new JsonSerializerOptions { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.csproj index f31ded0e06..96b196b67f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo/Abp/AspNetCore/Mvc/Dapr/EventBus/Controllers/AbpAspNetCoreMvcDaprEventsController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo/Abp/AspNetCore/Mvc/Dapr/EventBus/Controllers/AbpAspNetCoreMvcDaprEventsController.cs index b1d5bac7fb..946c39f59c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo/Abp/AspNetCore/Mvc/Dapr/EventBus/Controllers/AbpAspNetCoreMvcDaprEventsController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo/Abp/AspNetCore/Mvc/Dapr/EventBus/Controllers/AbpAspNetCoreMvcDaprEventsController.cs @@ -41,8 +41,8 @@ public class AbpAspNetCoreMvcDaprEventsController : AbpController } else { - var eventData = daprSerializer.Deserialize(data, distributedEventBus.GetEventType(topic)); - await distributedEventBus.TriggerHandlersAsync(distributedEventBus.GetEventType(topic), eventData); + var eventData = daprSerializer.Deserialize(data, distributedEventBus.GetEventType(topic!)); + await distributedEventBus.TriggerHandlersAsync(distributedEventBus.GetEventType(topic!), eventData); } return Ok(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj index 03bb453ba2..1839113d06 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprAppApiTokenValidator.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprAppApiTokenValidator.cs index dd0c6a5300..aa7d17072b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprAppApiTokenValidator.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprAppApiTokenValidator.cs @@ -50,9 +50,9 @@ public class DaprAppApiTokenValidator : IDaprAppApiTokenValidator, ISingletonDep return expectedAppApiToken == headerAppApiToken; } - public virtual string GetDaprAppApiTokenOrNull() + public virtual string? GetDaprAppApiTokenOrNull() { - string apiTokenHeader = HttpContext.Request.Headers["dapr-api-token"]; + string? apiTokenHeader = HttpContext.Request.Headers["dapr-api-token"]; if (string.IsNullOrEmpty(apiTokenHeader) || apiTokenHeader.Length < 1) { return null; @@ -61,7 +61,7 @@ public class DaprAppApiTokenValidator : IDaprAppApiTokenValidator, ISingletonDep return apiTokenHeader; } - protected virtual string GetConfiguredAppApiTokenOrNull() + protected virtual string? GetConfiguredAppApiTokenOrNull() { return HttpContext .RequestServices diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprHttpContextExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprHttpContextExtensions.cs index aa81765b12..e73eaec4f7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprHttpContextExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprHttpContextExtensions.cs @@ -22,7 +22,7 @@ public static class DaprHttpContextExtensions .IsValidDaprAppApiToken(); } - public static string GetDaprAppApiTokenOrNull(HttpContext httpContext) + public static string? GetDaprAppApiTokenOrNull(HttpContext httpContext) { return httpContext .RequestServices diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/IDaprAppApiTokenValidator.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/IDaprAppApiTokenValidator.cs index 66fd833b77..f54f0aa8cf 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/IDaprAppApiTokenValidator.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/IDaprAppApiTokenValidator.cs @@ -6,5 +6,5 @@ public interface IDaprAppApiTokenValidator bool IsValidDaprAppApiToken(); - string GetDaprAppApiTokenOrNull(); + string? GetDaprAppApiTokenOrNull(); } From 37ecd32d222fc8e8f0fd76493c247220731459fc Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 17:28:43 +0800 Subject: [PATCH 90/92] Enable nullable annotations for Volo.Abp.Imaging.* projets --- .../Volo.Abp.Imaging.Abstractions.csproj | 2 ++ .../Volo/Abp/Imaging/IImageCompressor.cs | 4 ++-- .../Volo/Abp/Imaging/IImageCompressorContributor.cs | 4 ++-- .../Volo/Abp/Imaging/IImageResizer.cs | 4 ++-- .../Volo/Abp/Imaging/IImageResizerContributor.cs | 4 ++-- .../Volo/Abp/Imaging/ImageCompressor.cs | 4 ++-- .../Volo/Abp/Imaging/ImageResizer.cs | 4 ++-- .../Volo.Abp.Imaging.AspNetCore.csproj | 2 ++ .../Volo/Abp/Imaging/CompressImageAttribute.cs | 2 +- .../Volo/Abp/Imaging/ResizeImageAttribute.cs | 2 +- .../Volo.Abp.Imaging.ImageSharp.csproj | 2 ++ .../Abp/Imaging/ImageSharpImageCompressorContributor.cs | 6 +++--- .../Volo/Abp/Imaging/ImageSharpImageResizerContributor.cs | 6 +++--- .../Volo.Abp.Imaging.MagickNet.csproj | 2 ++ .../Volo/Abp/Imaging/MagickImageCompressorContributor.cs | 6 +++--- .../Volo/Abp/Imaging/MagickImageResizerContributor.cs | 6 +++--- 16 files changed, 34 insertions(+), 26 deletions(-) diff --git a/framework/src/Volo.Abp.Imaging.Abstractions/Volo.Abp.Imaging.Abstractions.csproj b/framework/src/Volo.Abp.Imaging.Abstractions/Volo.Abp.Imaging.Abstractions.csproj index 6b7c0434ed..288f43c7d4 100644 --- a/framework/src/Volo.Abp.Imaging.Abstractions/Volo.Abp.Imaging.Abstractions.csproj +++ b/framework/src/Volo.Abp.Imaging.Abstractions/Volo.Abp.Imaging.Abstractions.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.Imaging.Abstractions $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; false diff --git a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageCompressor.cs b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageCompressor.cs index 949a3fb848..6d80cd1c6b 100644 --- a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageCompressor.cs +++ b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageCompressor.cs @@ -9,13 +9,13 @@ public interface IImageCompressor { Task> CompressAsync( Stream stream, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default ); Task> CompressAsync( byte[] bytes, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default ); } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageCompressorContributor.cs b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageCompressorContributor.cs index 84087d983a..7fc9362c77 100644 --- a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageCompressorContributor.cs +++ b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageCompressorContributor.cs @@ -9,10 +9,10 @@ public interface IImageCompressorContributor { Task> TryCompressAsync( Stream stream, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default); Task> TryCompressAsync( byte[] bytes, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageResizer.cs b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageResizer.cs index c2ae1b62e9..2c9c2878ed 100644 --- a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageResizer.cs +++ b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageResizer.cs @@ -10,14 +10,14 @@ public interface IImageResizer Task> ResizeAsync( Stream stream, ImageResizeArgs resizeArgs, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default ); Task> ResizeAsync( byte[] bytes, ImageResizeArgs resizeArgs, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default ); } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageResizerContributor.cs b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageResizerContributor.cs index fed4ce4a4c..a6603ea136 100644 --- a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageResizerContributor.cs +++ b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/IImageResizerContributor.cs @@ -10,12 +10,12 @@ public interface IImageResizerContributor Task> TryResizeAsync( Stream stream, ImageResizeArgs resizeArgs, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default); Task> TryResizeAsync( byte[] bytes, ImageResizeArgs resizeArgs, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs index 11789776c7..d36a9d6ea0 100644 --- a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs +++ b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs @@ -23,7 +23,7 @@ public class ImageCompressor : IImageCompressor, ITransientDependency public virtual async Task> CompressAsync( [NotNull] Stream stream, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { Check.NotNull(stream, nameof(stream)); @@ -45,7 +45,7 @@ public class ImageCompressor : IImageCompressor, ITransientDependency public virtual async Task> CompressAsync( [NotNull] byte[] bytes, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { Check.NotNull(bytes, nameof(bytes)); diff --git a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs index 139fc194dd..e2c4ad7d77 100644 --- a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs +++ b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs @@ -31,7 +31,7 @@ public class ImageResizer : IImageResizer, ITransientDependency public virtual async Task> ResizeAsync( [NotNull] Stream stream, ImageResizeArgs resizeArgs, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { Check.NotNull(stream, nameof(stream)); @@ -56,7 +56,7 @@ public class ImageResizer : IImageResizer, ITransientDependency public virtual async Task> ResizeAsync( [NotNull] byte[] bytes, ImageResizeArgs resizeArgs, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { Check.NotNull(bytes, nameof(bytes)); diff --git a/framework/src/Volo.Abp.Imaging.AspNetCore/Volo.Abp.Imaging.AspNetCore.csproj b/framework/src/Volo.Abp.Imaging.AspNetCore/Volo.Abp.Imaging.AspNetCore.csproj index d727d99a7c..8b8810e000 100644 --- a/framework/src/Volo.Abp.Imaging.AspNetCore/Volo.Abp.Imaging.AspNetCore.csproj +++ b/framework/src/Volo.Abp.Imaging.AspNetCore/Volo.Abp.Imaging.AspNetCore.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.Imaging.AspNetCore $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; false diff --git a/framework/src/Volo.Abp.Imaging.AspNetCore/Volo/Abp/Imaging/CompressImageAttribute.cs b/framework/src/Volo.Abp.Imaging.AspNetCore/Volo/Abp/Imaging/CompressImageAttribute.cs index 1ddd8822be..e49a5abc9f 100644 --- a/framework/src/Volo.Abp.Imaging.AspNetCore/Volo/Abp/Imaging/CompressImageAttribute.cs +++ b/framework/src/Volo.Abp.Imaging.AspNetCore/Volo/Abp/Imaging/CompressImageAttribute.cs @@ -28,7 +28,7 @@ public class CompressImageAttribute : ActionFilterAttribute foreach (var (key, value) in parameters) { - object compressedValue = value switch { + object? compressedValue = value switch { IFormFile file => await CompressImageAsync(file, imageCompressor), IRemoteStreamContent remoteStreamContent => await CompressImageAsync(remoteStreamContent, imageCompressor), Stream stream => await CompressImageAsync(stream, imageCompressor), diff --git a/framework/src/Volo.Abp.Imaging.AspNetCore/Volo/Abp/Imaging/ResizeImageAttribute.cs b/framework/src/Volo.Abp.Imaging.AspNetCore/Volo/Abp/Imaging/ResizeImageAttribute.cs index 799cd81877..65b59bef6f 100644 --- a/framework/src/Volo.Abp.Imaging.AspNetCore/Volo/Abp/Imaging/ResizeImageAttribute.cs +++ b/framework/src/Volo.Abp.Imaging.AspNetCore/Volo/Abp/Imaging/ResizeImageAttribute.cs @@ -41,7 +41,7 @@ public class ResizeImageAttribute : ActionFilterAttribute foreach (var (key, value) in parameters) { - object resizedValue = value switch { + object? resizedValue = value switch { IFormFile file => await ResizeImageAsync(file, imageResizer), IRemoteStreamContent remoteStreamContent => await ResizeImageAsync(remoteStreamContent, imageResizer), Stream stream => await ResizeImageAsync(stream, imageResizer), diff --git a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj index d523a292ba..29d6a3944e 100644 --- a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj +++ b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj @@ -5,6 +5,8 @@ netstandard2.0; + enable + Nullable Volo.Abp.Imaging.ImageSharp $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; false diff --git a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageCompressorContributor.cs b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageCompressorContributor.cs index a54d006b30..8d2f29dd02 100644 --- a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageCompressorContributor.cs +++ b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageCompressorContributor.cs @@ -26,7 +26,7 @@ public class ImageSharpImageCompressorContributor : IImageCompressorContributor, public virtual async Task> TryCompressAsync( Stream stream, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { if (!string.IsNullOrWhiteSpace(mimeType) && !CanCompress(mimeType)) @@ -54,7 +54,7 @@ public class ImageSharpImageCompressorContributor : IImageCompressorContributor, public virtual async Task> TryCompressAsync( byte[] bytes, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { if (!string.IsNullOrWhiteSpace(mimeType) && !CanCompress(mimeType)) @@ -75,7 +75,7 @@ public class ImageSharpImageCompressorContributor : IImageCompressorContributor, return new ImageCompressResult(newBytes, result.State); } - protected virtual bool CanCompress(string mimeType) + protected virtual bool CanCompress(string? mimeType) { return mimeType switch { MimeTypes.Image.Jpeg => true, diff --git a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageResizerContributor.cs b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageResizerContributor.cs index d2ac92eaf7..92dbc25034 100644 --- a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageResizerContributor.cs +++ b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageResizerContributor.cs @@ -16,7 +16,7 @@ public class ImageSharpImageResizerContributor : IImageResizerContributor, ITran public virtual async Task> TryResizeAsync( Stream stream, ImageResizeArgs resizeArgs, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { if (!string.IsNullOrWhiteSpace(mimeType) && !CanResize(mimeType)) @@ -58,7 +58,7 @@ public class ImageSharpImageResizerContributor : IImageResizerContributor, ITran public virtual async Task> TryResizeAsync( byte[] bytes, ImageResizeArgs resizeArgs, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { if (!string.IsNullOrWhiteSpace(mimeType) && !CanResize(mimeType)) @@ -82,7 +82,7 @@ public class ImageSharpImageResizerContributor : IImageResizerContributor, ITran return new ImageResizeResult(newBytes, result.State); } - protected virtual bool CanResize(string mimeType) + protected virtual bool CanResize(string? mimeType) { return mimeType switch { MimeTypes.Image.Jpeg => true, diff --git a/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj b/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj index 535f689663..0e3581908a 100644 --- a/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj +++ b/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.Imaging.MagicNet $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; false diff --git a/framework/src/Volo.Abp.Imaging.MagickNet/Volo/Abp/Imaging/MagickImageCompressorContributor.cs b/framework/src/Volo.Abp.Imaging.MagickNet/Volo/Abp/Imaging/MagickImageCompressorContributor.cs index a0900cd14a..3aba7f5000 100644 --- a/framework/src/Volo.Abp.Imaging.MagickNet/Volo/Abp/Imaging/MagickImageCompressorContributor.cs +++ b/framework/src/Volo.Abp.Imaging.MagickNet/Volo/Abp/Imaging/MagickImageCompressorContributor.cs @@ -28,7 +28,7 @@ public class MagickImageCompressorContributor : IImageCompressorContributor, ITr public virtual async Task> TryCompressAsync( Stream stream, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { if (!string.IsNullOrWhiteSpace(mimeType) && !CanCompress(mimeType)) @@ -63,7 +63,7 @@ public class MagickImageCompressorContributor : IImageCompressorContributor, ITr public virtual async Task> TryCompressAsync( byte[] bytes, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { if (!string.IsNullOrWhiteSpace(mimeType) && !CanCompress(mimeType)) @@ -86,7 +86,7 @@ public class MagickImageCompressorContributor : IImageCompressorContributor, ITr return new ImageCompressResult(newBytes, result.State); } - protected virtual bool CanCompress(string mimeType) + protected virtual bool CanCompress(string? mimeType) { return mimeType switch { MimeTypes.Image.Jpeg => true, diff --git a/framework/src/Volo.Abp.Imaging.MagickNet/Volo/Abp/Imaging/MagickImageResizerContributor.cs b/framework/src/Volo.Abp.Imaging.MagickNet/Volo/Abp/Imaging/MagickImageResizerContributor.cs index 9ffb6133e5..b71230e8bb 100644 --- a/framework/src/Volo.Abp.Imaging.MagickNet/Volo/Abp/Imaging/MagickImageResizerContributor.cs +++ b/framework/src/Volo.Abp.Imaging.MagickNet/Volo/Abp/Imaging/MagickImageResizerContributor.cs @@ -16,7 +16,7 @@ public class MagickImageResizerContributor : IImageResizerContributor, ITransien public virtual async Task> TryResizeAsync( Stream stream, ImageResizeArgs resizeArgs, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { if (!mimeType.IsNullOrWhiteSpace() && !CanResize(mimeType)) @@ -54,7 +54,7 @@ public class MagickImageResizerContributor : IImageResizerContributor, ITransien public virtual Task> TryResizeAsync( byte[] bytes, ImageResizeArgs resizeArgs, - [CanBeNull] string mimeType = null, + string? mimeType = null, CancellationToken cancellationToken = default) { if (!mimeType.IsNullOrWhiteSpace() && !CanResize(mimeType)) @@ -74,7 +74,7 @@ public class MagickImageResizerContributor : IImageResizerContributor, ITransien return Task.FromResult(new ImageResizeResult(image.ToByteArray(), ImageProcessState.Done)); } - protected virtual bool CanResize(string mimeType) + protected virtual bool CanResize(string? mimeType) { return mimeType switch { MimeTypes.Image.Jpeg => true, From abeb0ec112b91c77dd42af3f45da25b8be71e9a7 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 17:28:51 +0800 Subject: [PATCH 91/92] Enable nullable annotations for Volo.Abp.Json --- framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj index 40049addba..67dfaf2a28 100644 --- a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj +++ b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.Json Volo.Abp.Json $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; From 1a4bd9174e26f4c7c674f2aabaff35f954141c69 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 7 Sep 2023 09:19:04 +0800 Subject: [PATCH 92/92] The `ComputerId` is no longer changed after user changes. --- .../Volo/Abp/Cli/Auth/AuthService.cs | 19 ------------------- .../Volo/Abp/Cli/CliPaths.cs | 2 +- .../Analyticses/CliAnalyticsCollect.cs | 6 +++--- 3 files changed, 4 insertions(+), 23 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs index 292b955645..ec2074434a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs @@ -90,8 +90,6 @@ public class AuthService : IAuthService, ITransientDependency var accessToken = await AuthenticationService.GetAccessTokenAsync(configuration); File.WriteAllText(CliPaths.AccessToken, accessToken, Encoding.UTF8); - - await WriteRandomComputerIdAsync(); } public async Task DeviceLoginAsync() @@ -107,8 +105,6 @@ public class AuthService : IAuthService, ITransientDependency var accessToken = await AuthenticationService.GetAccessTokenAsync(configuration); File.WriteAllText(CliPaths.AccessToken, accessToken, Encoding.UTF8); - - await WriteRandomComputerIdAsync(); } public async Task LogoutAsync() @@ -129,8 +125,6 @@ public class AuthService : IAuthService, ITransientDependency File.Delete(CliPaths.Lic); } - - await WriteRandomComputerIdAsync(); } public async Task CheckMultipleOrganizationsAsync(string username) @@ -183,17 +177,4 @@ public class AuthService : IAuthService, ITransientDependency { return File.Exists(CliPaths.AccessToken); } - - private async Task WriteRandomComputerIdAsync() - { - var loginInfo = await GetLoginInfoAsync(); - if (loginInfo != null && loginInfo.Id.HasValue) - { - File.WriteAllText(CliPaths.RandomComputerId, loginInfo.Id.Value.ToString("D"), Encoding.UTF8); - } - else - { - File.WriteAllText(CliPaths.RandomComputerId, Guid.NewGuid().ToString("D"), Encoding.UTF8); - } - } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliPaths.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliPaths.cs index 5153f5285f..d47987b220 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliPaths.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliPaths.cs @@ -10,7 +10,7 @@ public static class CliPaths public static string Log => Path.Combine(AbpRootPath, "cli", "logs"); public static string Root => Path.Combine(AbpRootPath, "cli"); public static string AccessToken => Path.Combine(AbpRootPath, "cli", "access-token.bin"); - public static string RandomComputerId => Path.Combine(AbpRootPath, "cli", "random-computer-id.bin"); + public static string ComputerId => Path.Combine(AbpRootPath, "cli", "computer-id.bin"); public static string Memory => Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)!, "memory.bin"); public static string Build => Path.Combine(AbpRootPath, "build"); public static string Lic => Path.Combine(Path.GetTempPath(), Encoding.ASCII.GetString(new byte[] { 65, 98, 112, 76, 105, 99, 101, 110, 115, 101, 46, 98, 105, 110 })); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs index 66568ffb4d..5f504bd407 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs @@ -39,15 +39,15 @@ public class CliAnalyticsCollect : ICliAnalyticsCollect, ITransientDependency { if (input.RandomComputerId.IsNullOrWhiteSpace()) { - if (!File.Exists(CliPaths.RandomComputerId)) + if (!File.Exists(CliPaths.ComputerId)) { var randomComputerId = Guid.NewGuid().ToString("D"); input.RandomComputerId = randomComputerId; - File.WriteAllText(CliPaths.RandomComputerId, randomComputerId, Encoding.UTF8); + File.WriteAllText(CliPaths.ComputerId, randomComputerId, Encoding.UTF8); } else { - input.RandomComputerId = File.ReadAllText(CliPaths.RandomComputerId, Encoding.UTF8); + input.RandomComputerId = File.ReadAllText(CliPaths.ComputerId, Encoding.UTF8); } }

b~WM06N50ph4hKJ3_hnIT`$KjSa#G)W*Kl{4vL8`sX+SNMt=$Cp6U@h2`fq+UuQ!KnmK~XWr zhvnQ;M@_X0HPqCuI`;;KvdGkd3kb6^Gn@Uzq4I+rYlZ6ew{vwb=)lq5 zVO)kw^lzD?FziA9gYLgds#G~nSPp5S9v-hLyLh|j>qJ)}^ww8%I}X`i?4pR4f+{K* zKveedIwz{cs@Z)Z?Y!CIUR^dGD*2uQ^@l60fZ5Zput+W#{oGA0otd-rhDAC4Rt2A} z95C%`riX*$kH(_E(4n4!LG63&WIyR8!m*+1Zu+om4KZ;L*3n8Cy4h=5vepaQS1xG{ zSF?xICn@_UwwP1oXyjz~9xST1S|}H^*^gE=FIUi*O+}fPe!(ri7p+1i0Nx~B>dLC% zPyC~q|4*u)$9=|A-zRyOl^aQZ@m)?@y0cwpJNI6Lko_LM{dK4&6=heqs)pv+rh#Fl zT}(36gJP7AxQ&2tIyWlPi!s_vt0N-o9rce?fALJ`Zx`XNqk310lQ)=t{7)JC?-z1j zfV7cfNn;!?L`OwsN@Hr_K`IGC;wH8n~JvhDm9jbm2&@YuWw(8WGXaR zr8EDoZv}vh4(-@KY6-vVz(3aaCKS+3=cnAr7@?d6k}gxe6V5nH6U)LO+qP+-WrP03ZF`>^;Obsq_L zT;o>*{&$_8lJ6rWS(L63C+XLj)wCs4rT%!h(bBqYU#!8r`8Z%xFzWK}pzALpb1uMz zcQR!=V+_&(2jLi2*+m0U#AD(J^_o(xBCX~MQ;g`a2D`YiTMNBq0-t>rQ{pvUAVih>Iy1a%Mt18GH8n0IR02 z9}mct-@V@1T>f@%7Ws#qPOR+Z*8K?;e9j@^cV<+y^K~Lq8R$K8hlC1_k-%#IqY;g8MwbEaAuFZ^vYr#=hNBf6SHYTM11r<$F5aDZ}Frx)ih zdwqGLxXKps;e*!FNDVBER&qF|m@`_*>4yOScU2FMSn`Zge~blkM;M;`EaFoD)5`q- zCIEX~!<6(!2H#|0XJ_BDX(*<4>n&3R9qeV_E%NJg8*9kj(tZ5eY#_%WQ0Ea)sf*+` ztgLMr<{XE*MSPfDeDAnn8l`Iw>SZDJ3wYqVz#Ge~sB6%BPrE3I1?n-|`no;QynVzy zAlP~$L;ZqF8$Q{Fbf!`9P>9^ zHvz|ydpWhR4%_bXeJMiX1~%(FgUr00)d6-V&twa$?=9M;zTfjcOLHWPmB#?+Edbpl zR;C=9rO}GJKY5ZMVc$@y`I{+-L>Y(*aU-nvgc1BYSuz=`0p@HmRxP7K_ z{`|G%(@4DV3%Tz@>sld598xWbXkYp1}xqQpe=>o$HXBVjeksA{Ht+dxoZ60x9y6e%-ll; z`H?CI_FbF7sNro&{q!8K(ZVlR+*d3@FIHq^X35)Z88}AP??x$gM{C1sZ{GR*Ug@qT zNudd>Logwf&TOS}t>}4X)?-Ox)%F4|k=c4|snrr;JmN`--ROEzuY^?Qj+^yFL5YCv zSUqm1R%zJ!=Qrd?X z91H|)Z*#Z1Jsef~*{b6TuNn1x^Kmn{M;V%Lro|^o74_lz@QX*x_Ojo6+%unQ4T?15 zlA9Y!ig~V=kHEw|p?00)x7g=>tko1^T4FL1Y8*Ojb;c^5iJb+cmXHD?m^Kx0{Sn$pQC)hp?dXlYsCJR^%|mLyf_c$AV!PT-%>9*v{nYX4 z|0GF&h1lnC&>sN#Mfc5x&zcd)y?ykS?<{_j;VKNcsyk6TRs51dt`udo=3h<*oZ1VJ zJ)1g7815@xZ@ozRkyKH6`7gupE=%~+OunKw-Y5>Dll{<<%zSJ#20 z_5%|gadsRnj@8V$hCgrorvkEN1GeHrFA*ht7&qr-)l;IgnAJ-kG67nc=hF8+Crc&O zRN*+2r3v_Wf}>n}dWs^>#q>}t{Bi2~cP{;lDQbKHvr%h}CU0*^MJPNo!Z-M{5%zEF zi@XFp>#fFv*jsYUw|I%(osI6Fag;D*u`KGsS5u>MbYFX%t^@p?@ZCVnrctgMXwNLi z{DtRI`&k6zTmah%k8$$tLP;|;DzP`u0)x)u?&$ytGZ;Bn42D31o!sKepWW4eBZf0M z;0BB8N^+7IV)WQF&h`(KA5P@m984TybzYi7X7cmtaXo*^(uuOS!~<6mfWBPPkRMWf z`0XqrD3$sMCzp97Gf44oO|o)i?4`tR_OGbGl3F|4K<7Bxtoc9C}tG=KxV$}TP7TjjXI`MyP%;F z6>L#W))d^S$koT!+Qi4ZtlQzNR7f&7@lsUhcSw`W3x=5L z&l0R!%-?Zy0W28f-D-V?w8zO$ zuD%1F*loourBAFTFF#+(T%Var@Hc7xgB6zF`=zC?{i;*+2CAAOG zL3Y7qy_;bfLnoTNfz;P#s9!T94`S; zC!gkXAw3f>UPw&?REpXkd_!?YW{^Jsm_g`FB|>mEIx%blFonIsR!hxBc3SF;i@JSM z*m$G+O6W|s^BfMj+R384)J0Ae@&4{e0PJ+_1Uoh4KS=x^%sq8s03jQolz4SHNu*~2 zF$@uJ0G(o**8Ze?#vS9Gn13xE8|mDeuY&%k>HPhRw_L!YZky7MoDG{^(qaG%JxAB~ zS*6DMKcfn9M4SlU;xiYHGw%BKiSYf<4X!*ZpXE;Y>~>d#{EWgEdBW$} z{D-4w+%e%vJc(EPF^TYueExC5=dJ!v_GjEN-bvbEowAH!U3T)^8L#m^F}3%Nm`C3H z-9Dbajn;`n=ct#Ny?(}BZ!rM7_O4bazjjLQ|Hs>$bHJ{(UWEQ&|6L$YFXTVp&Ycuv zx13_E7|%vlwex_B$UR3Hsrh%a_{X|hf~0J`t(fe`P`F!L+su*(sVySHh9lD*$-@Vy z5XKuFh7qtb^Q$XQFd(k-Mw~xZ#8g{fIhK4)_-^h`)pHh*sACMn^aYL2eYm844WvL; zYpt+8AcTzV4*2|dd>pU$eDLXEU4Q2ixhg<|5KraSIjXg>7*^=b^Bh12B5(7dbHlm} zO@l5Evz5SaYq|P7ASYOc{YX?>dg@sijg0#rK-Q}C zz46b|`{Q*-2l;dVXDIz_P$wd;ad-KLKI@ejl{JIM>JOiGzfz2AU7`2A6>ZrTnI3%kgJ!tI zBMxl^POf^uiGI*~(W(1(Y3Rh_T;hyygzt#j4**rLlWtb1T2F6JhKWb)&SH;=Pa*{9 zD4cCS_GLFc=F_>jvwGVy#p`8Xdl6NogwVhCFEtJ9ILd1<<7*`wxbqGNb@tac9OQd^ zuFrm@%L}O*@{jlIE9>_6WYwz>s#W29M;V{g*Qy-8vD9FWQ#{vPm+uC*)Jqr_)*)Gy zVrXQKzZuZkV$mzr>|5ibs)`B z8{oK3IOe;JVr$mB*}QEPV!OeHC0DbNHt(&trJ)1?ze+CS5`~cp8F zSxtSKMzSEU@EvNkIO026OO<5&;5r2ctSE`y(tPiQ6ptjgjjoXv&>T$Fd~9~<(;85i zi&3Y9kQ1*hvdP{wj1Di8`FZ$xh(vYn0CX;m*LJ&j!j&8 zx-L9iA$R^%ZK)*RDY6J#D9Cr2Q|L)msq8B>)~t26Vl*D9a&fSr3V4I-;_BJb?PVwHB+?qB#t`JhW+j(rxsnhzc%4D6#==>ni#L435`_p@|ZHG$F zq{Hxn7~;S@>B!t)H}Sq}c!3F2x;A0qX|@n|rr(N%OM^6qSv-cPwd=e2c|c}{@NuhG zHZD+#sH=2eQ5hC5Qb;Qg@i?sxpADaUi89}sd;dIbzAL=OO4DKe3bN$l-V#OL{HSSD zaIE{&xdeB<{-dX+K|HG&E5N^Ge%8%YDO9o^$dR@(rUbg)ZV+me2%q#v&vB@k7ZIp@ zE>=VXy&VA@HDaDEFje?%NAOOJU&yCH0!_;h?9fv8Xi)@Xdk)`3`SU@ZcstSBq}&RE zkmiX;okcZ2(V!-nH zimUf=nWM3#DZ-)BR-A%!bC!=~gII0#!Ew%6?-2+3bamz#OmV&4V~nt1B}iG9 zXD3&_RE*qc!Qc`=$7VrKNgl&0druRg1HU7!6oc9_`^}$+iB!ws_3oEkpRsGXity5M!-QqxN zr^lSRrFjdM?4FSt$girQImONoec0NjoET8E-qGa zBHM94s2ClI3Rk|8d73Z=(|2{oG!f#c1cYD@Tv9k&Wr)JCO)Fc4=`%(b1SCLf-D#d9 z_>~=o^C z)LCYl$uRDH-p3m9^`Q?=SJp^1QbE~5TSpg!n=O$Tj*2!p_UxPPPH(d?-O-@QMnyoi z5z+eFl+9l(ejG7g)J>WU<=pTUm}VeHKRDigN0MnC{o18&sqgl!&s8|&2ip}@LaXmz zaHmS&rwpU!b`*EEdpdzr+H!3%RIVN$Z$aOCe^MmUlBS09H!Y(Up&wc zNX;K2%Lw!$#3VWCZ8CZ*rAX*X93HX`Iu{Ei2gLOBn(gpA>VfM$?FBdiOR2y3{!sQK zyRDDs+7oi`tvOHg=N++Xn65{(a)iJev zpFMS{#;Ob_g{OoaMz~brhww6LDv@a>GBypFETH2T0d&ohWpzXuWEJ^~iz*`5la-Py zjOP?f`CPHjkPhiQRJXEeK~`+XsaSFIi104Ta~2v3#Lg(ul(p?{vuvOR z1O;Ut8~esCy3w0{49|jKKbmFfDMV$j!-WLqf@{IsEB6jM!ajc<+8-=XH?EDZr1SoX z?fL9biMk4^z#ig5TEAw#LJky}iWzo@t=-T~-T?2xl!Q0%#d4?K#a;1KzV!(?bi7I8 zX*p{CO|?|1Zm=w;GtMu}3pT$##(sP-EgNsMPOqp_6s5%99uh9#^mQsI6KLy~q4Q`e zGTz$l1h>%7i&xwAQxDhrLCf!=;6mI9Kd|%L$Z~beZ4|G~Ob@y3ET$7)ktFOm%t31) z949f4@f%8o%dE|hQgjN9;G=uTh~QZ70xo^Hf*WDf{CwSLx!rAX(F);MY^n@ed_HMU zcBQAYUR)LaOnVe=t|@Ymb8Dbg=SgZY->W2} z=JE$bLR;J^lWqYgZeDExr!Jx$!8DfR*>S~s+&-9{6lD2Ragnhwt$}8KaR@9OC6Rk@ zcz^I3b5b*iw?zOl9BE17O7Yfe7=5z}j9MJ4%-kLBMZ2lzW(?MYc*FLF_mI5cD0cpZ zmX!_gvhBnSFU;1M$Q4wXau?{D+3MDnY@VfZeP~{0I}j1tdB59$O>${66XP^J^Bij$Z4a*E@r^14-Sg}w-CoVH!K`Or38t@xXen?W-CXqV zF4rf9EsYR$UJ`%4>zVnm%?j*;bkA}J4qT`d%l;z*&KWuh+E-UvhyO^n0EJI0%Y}nM zJC`6{x=BPX#-a)-~LltQA9-Kfkt-?LEBjTc;EgXkyl*{z3|oA92coES7^NHW zSiKcw6u{BDz!R~u?%m?H%(b;{QHa}T5MN>tRh&Syvw3jjHxxO&n&Wp^filY_P;knMelIE~AlI(4;lK6Hie@c?woN$x z35BvrRcdD(%=EsgZlST`M6_y4pZ>N{aQD(TI=?Ay?|Jx2;UxQDqc~?-8`}-WqB>2t z7CcL8+rX^VjC6}6@Uk2hSajQ9!*;{Z28ZOLp7fofcTaVuhaZcZ zRfAHuQ@je|4Q3k^Ux#i>Y$J>PFNt?GL(L>JG^ z2d4<4-l(UYe-oKOoapiZyG%HXs7LMpP-BIXOZ z27-X$2cIr4j~b`I(V~O?wc?8sxt*?#sUapHOx=h)q^27;ZxOWb%Ma_R7C#^BA-=ak zS3B_?7f%9&Bn}9800I%$p}tx{?2*{RY+o$K(WA_`c;jdzzw40P^0=MwC1z*TbWV)y zo*Ap({73+YG$QV%M0N4lokRK}G$ya#ws0Kgo-E+@rteOGKV^6=vS`8wGn;5yFjzd{ z`;~Blh_JEeMQ9xI0CL~Ab`NjCC%oBZKb;F7cTKkTdQrF+ zX_m#0D~~}Yt4QG__mNgqV&`089E4l;3YC?mynsEO|Fjy}WG`pA<6M}V>7-(~HA2{& z3jA-xBv-Vb{e$W+srXFRJFe@uMV`;v7cr18bPHBbEsN2+TEr}Ed5}GFno=ftNvu&q zlbw9PSOhmLe^^(&)1bJqFUp#XzAT(PEgDikkrAs*bKo)fge2MJYho>MMq~lv@4L8g zpUiFQvd+&~UK@TC%CS5Bigz8Vc+^&u{!k(dDg< z+rW9uR~2RZX*Bds?zcxq6%O;#m%O4~cdq;Kf`YWlkE)y3uX*f@&Ua)4;5RqF-L>pr z+3;%t7E`5f?{4!d_dG;|cz_Uy#!wZe^q?uE%WxsdX#O?WGJ1d}V|q+oY!2deKx?Tp z>2iNG2fwd7@^%gW@*;yQ24ge4dgBwv=P%#Q{86L(^#J`GMgs2lcp;9$CGV8f-GA=Z z7mDv#*XM08u*Hg8UtjeEPUwbSe;R|p8D{)*-<;Xjl0zLM0j_r=TTW1}{$k00B zu{!mN5we6X&S4-2(Gv^QY!%5CcGs@f_4xFoell0xpC!`RqyvXg1*|k|JKoV0;NEm7 zUEe6FyU6TUc|c8(9u}N})}6#ii*F7lmHGjwLtga*#+ueb&MB>#TLa;BcPOs z3L2pieP_S^b4jlh31vxK>6A8@!H7LN+Yk3G;g!l8mNIy`R^H>sc~ClGY3c9B5>o|8 zlY#D`+JtW0HTn&t3y*c1g&oH5R(;(N^zhy{HQkQDsxNeUw z()Ngtsj4+?w3Fa__KB&2=BQEEFLc;{=U%CLo{U`djIF9N*YZ$hpX8b`8t4`%5=g$= z5lObXCf)QoP+KXu>Po(;R!?~FbPwnGZ)p5A*Sh%1*-weG29mnTo(4H`aUO*aTK57y za;&blbxr9u2OazNF6#}Kdxye?QF*=RaFer*yY}2JR@~n@GTfW*%8wl_wp{3{g{7`} z@9iEBjopO<3K};^PpN z84azi@WrQbe#;e}p=(Ti9k4Ww!9DxgDMMZo7=0ZhsTYd4mW3>q7fxU3Py30|T&E>G=)PT^xlAID9WVi*ilz`1_ua&2kV zXmPxSK}k@XfEA!F96s&IOL3B{V!DNMjBQ#H32xVOQaj%`5dB~5ePuwDZMUwX2!eu0 z2}npvDqWIFcQ>d=cMUlp0@5IzLo@UsF?1Pp=g=rMG?GINa~|Js@BM!JtMmRkzYf3n zG4UFJa`G7VyxCQ4?wcBn`i%E?mfbX(Dr z*4GlTLC^`eETx7ug&5y}1|Cq`B4LCNjg85ohSv^wS8o9Wc~7V1+l;2%75lz8d~Rs` zIsAI>v?`5$B+ZmR@XexCh9d%LIbyYcDwl=7OA{%uT_ax<*>t+cB7HK8kA%2nw)OxM zp+M@3O)g*Y1KGX#Pm#zCEGDuBgtE7$_L#)F+Sv|VJ+9sI8E)pC<@GqL{!tvl#ELmL z8Bv^w^fnf4gAQrgHTUyfiD&vov(#sTdf~i-zqUkP`0{P`(*}6nhg4qLzW7vHk;X@%?lDz{V}3!7w_r%a6yjR#3SJ z#!c;)i<=+a+b=AA@-U%4?5~Gp;V8-L0DTzVfclYsJE$-$#F<2!+7~Wk*&!?=ZN}hR`03 zt!XjKA0vn2mB(|@RTK_C*6Jldq@zQOtz5CT|N(hk2=#O{}a>A4tD6C2g+CONy zRk-}&hI)$tP3N+BOLkoWW;3m(+gisnr z&UC)owoZsne(6=eviF(_3$6F(OwUl@0-#z%F>P|Xu`m`&$xeU6ENQN7F}yjnBb-=JnKUXehbxW zJQ`g<;WfK#J$IS4-<)ZzNIE%YzqX0pYdV#t08Km?EirOmeE?DXE{q-&v!u*^iF1;4 zJduYfFCTCA67@OpKkuo~lgDJ4yj%RrG=)phe&_bx>D@_$SDnT-W?p%76_URGoq-@x z6ehBi{#7RE2H(am>5;+b1pjMQu~YSJMzLD@2WaXj!2!#DQ`aobzEzaRr$?9~@0B~u(>2c@z1p{;WGuP)-p6cQBfn+y z9LF&}u(i48beT8)8esVo_}@ELZ$SKAtwTY%r}M zp@hZut;rd1C3yBRLUe2F4RhGq6#GyWG-!M~H&AZKx8e>Fjpz595Bc&Ej)bZVua`rY zO!mbp^nyg(BWUl}rHk9O?bkrZZ*7KA`c%du`NP&{Kqxpe@_OT`l3M#kR;1NV_p=l) z5%)F+@0OPi_A(Aj~xu`0_gpgQr zmcZ~AZ?hgXXZv#<9UZM{@&dnmv3TEwIz&0U%y-U``i+WQ`GJqk<+1QOBx}r3u<{Sb zLaLUt5ul;na^|2uSD0Xt`aLD7a~ZwXfNV*svOJH;VwiV z>;NnKrY4GUe@BL%@>LiQdn0EEkw=jds}}?cTpacJX7`{4jo*rtq^E3rnoYafZO1&J z5^#+7fbI$dW70o^P&HVTwO;{PdO_t~|MRQMCFzrG=PQv`O$*|8M2WTe7i*zTcfkoQ zTFuGTOja2!N4*HxvX<2#980G*sC&ly9l6hHa$N3vnq4}b0LWfp@p0nauF;{slML5) z=#PWUp9`d(0;Jb-?M{Nk#mlfar!AfIIE_b{c9bN?6Jm%aEDFAkZmQZG>Qqltuxatp z!8_u|RemRi-djnYkjdSX!yNwwlW{)bqJz7FSb?B|VY8M2%Aaqqv^{eoK&ApPGpouu z(rr9G^-VzP2(aHm{O8|Pzw5LeWzERk^yOuXxKp|_4OhCpoQxe(nQGli%qJvR+q8Z( zyy)9{EV?(Zo;Ay1+9VCsDrse%G&ReAsf8K{Tn}DymKtm?v&N&qdr{zcy&rP4>G$SLVL({W*)Tn(}4c ztxRFRBqdu+*`HqvCM@@Txdw*vE%k0E|RfUqz9H(>xIZqYldX*bgVdCn! zml)gbD#5^iW7Y9Ud0^H}^@3w`+vEEFUQSx0ZT6!x&w@QtR9U&s%&Y6J>r7ZeMbj}#@cx}0PoQMh1i2ZiGl1Oc_RLNK#+d$? zs#)lIOfizLwc%af-h6*+ZUNQ&Q5?gsZs9cEzwftGGbX~XK6ZX@c5dbKANxiA17Jr| zm`LAR#JP2|oS4wlVpAU5D(gAl6D%Ef_q$fM<|0BnqhvdNyNN=}@6o>-cJ(#oPO$*X zg2q;AOji!yw7c`P6x-=3(5fTZ$EC4TruHQ+&P!$(*m(5v&T%420&V)cHfdIr5B393 z#;o&lwX0lTehnI{)c_-*Vae=;g$DWI(+m+CVZi`j+SkGzULjX22wndcO2&U&}bcGnQOH+5JQdY=GD5~xtyqcei(VXcGygMH;( z7x@b9QWX%}CA5HPa)q%uwymE{TgkqP=n=@f#(3K*%Q=``UPh2hU>xZ+?o8aVmZ_;w zpKWm(?UB=WgZH9W33L6_-Rpj>{yXs^ep_uf?9ah?I|h$Ly+4u`FGC($I!gp}*LyBi z>q{J+eR~NUz=2$8ti z1^Wlz1}&^zJwGYo6|H@|FR&HZrR*N-Re-{U-093XJUlcpa3gCR9)@!d z^d%Y``57^%zbCJplyx(6VQy8WQVy;5*X^IPR%zDbub}b=ewd9MXa(hf=$R zv8!b>6;Zntv#ZPCD`&JmCt>_C`=u%`kV^zF!L78Gc0g>;mG>eTn%%7mN?dI9>d8Wt z-1+P!!QfK~57OSD<}a2FqRY%LRp!Yq98+9GeU4clpSv9?l5ofPg)io*T_U4sJ2+!~ z>TS#Km{6eES8}d89D3XxAoW=L% z7NWf`>33CFzspvkhrZgltSONC4(rqZ1F-s3536LY6wdcAhB}_g1TqY`b9)TZj(h`# zm{8feQ)wOePPWGFFu{Jx#;+*`eH60>KX!x1osMt{*DdkLoeWz+FQ+Awpq8aLPI!9t z^~MTQ9=18`!(uWpA*2(J-Iuq#tLS^@ol(-iPKM3Flbgb39!T@UYqxyx9DVNy0feyq zO3DrQ~@f>2bLjI2-wnN!#Z-qw3yzUg7qOArw@GtsWs}Rz8K!$ zeYhY2ISAs78nVc(8=&J5(yOq5ko9ELGMKi9?1RmG`ekYsn7pio+@R+Cp2o$$ zBlXh3@i;{WH9z)#Y z-WyNp);1~3v-=}->~>_fbtG0qqEndfN4POBtlz&qx;u!qmtcpr_-&|ZXN_U7)^|vf z^giPVox=S@S5>>BHK0N#?mu!_XG#$qpn$deoK%ua1^i^c1^?GB1MMPz&UE)IVcR3L;TAQyay7Mg>cZF?7e+JI3 z#?^X~`&KmIaWhHt2DMH>12t&Jy}i5EuVJWa%U6~YR}blADH7do2KH7~}Gw=hVI0CKMo7^CJ$31r&sR23%^1T$glCG5IWX)-))< zU>2+-!lV4V<>_3NO~GFfO%YwF)U4}zC?oi>jDGnl{pQjO#IR(uu8N6=b%uLWw0;p< zMGk&MwIZS;J6ReMNDSaF;84}EZK2^P<6H%adRo6zNExe`NIm|}ClD!HeiDELP?}rc zi}R|pUs%V}9EDo!r@_i}JCLZ6FX(seG>{0fAm{x2X;E7oI7nRNR?OFE$!fX*F}dvs zD=PRkP-dvROvhJ649Y+aeW3$v)t{`)D>yJ>ZWBxljGTkC0~<3shWm|mfZFFHf6ZQI zH!tF(3%-+l2Cj-%J?H+WT>p**eP!nyDcIqr&~g061538`^R`RdR-%I(;N18jv$2+n ziRF~dMPhEr)MM?Q)^Ly{8b9SCJESQH1uh@H%KM-#u)Z1$HK`$N@Xz-pp%-m0M&zJ= z&388MzmeHR&g)VlI=o*b_nW?MNrOHI0$`w>(o~lsU|ISU;<^nKp`*ObJwzD6!!sq3 z=L_L~0P8;Q17P6leN*3|KY5Y=8~ps1;{l(_$h5-v+OJy|jWNgF0DacBMO9utC!d|M zS*8|=vVc~AHL@BsHLFl`aOQRhXvVQ&B?x5QSW8}e%XuKU1g3iC4Rsr$Dt=qf&N_ps zIE9FM&SWt7Q;YV37x;=-;N6a%(F1vbYzN9S@GHnddu;aB_WZ(UVL8holSg%|yz5-Q z9GbmXXMSUea<2x3Wnwdl*z^aa)k6;-@xq7R1YIC8BN4>Qop!nSE z))cVMb+|l7J2L~@l;%5n?>~wy5W>b55+X6+J1z?E*5}1e7Mv`B`-Lanb1?%j3l?gr`c%n~F77v@fX@ivx9P<}%@yqv8Jf5udElQ>E z8ZLX&`qizzeiK&=G7GQOiv)A34W|-HV7>^ZCuRN6czNgJP>lv!B-g_CO<$CETiigG z%1L_))zs0x9pWcgYzqKdNG3TA)HwuyF=Rg6sG1CWdhd42 z)s9xVK;jhOA?BabN(3HgUA2$5q6ffZtuMDnq}neX{H%qO@c~AoMA{`^fn*&`@;}N) z!esJX-3~>Y|5UmJC~@vuvlIy~9BdrrN!=M?Q`L`#G2%o~GID^nY+Lju-T{gD{1d*Yw# z`5pDAd(%jMkyj_#P0h%>tQ;Rmlo~2P%n5_l_l6*cgTnzrk>C9cGU#ofYhfBB#OEJy77Qz7vO#))pIwqJqz-)#IUTb<~4Oaj_8vIrp9tw*K51C5#V%SlW_|Xnj-x)WEFX@bxhx5Nb>Ds?EGIB-1z8Nr+}sGl zFG7#{wbpyOxX;^VshS_J#qRlDiK#UfC6Bv?5^~-9YPVF{XxTVsL<@d0Zn@{5RXpc` zO7vTe0OXT8wsk{f5z}^Ua4ejQbie?}!yz^;Lqx|Uovt5N-26*F(WK|*P~>@~RR0hi zX~pSwb{CnEuflA(lvXzSS4O5M8tgipPEL@&{_USRL!yc@fXUC-dGvVM6HC zT>~SX{3UrF=SSY2EXe1W_g`zAf(BZ?y5ls)`ikIUj>+{?+TQC>iq4fX+HSANL~9e# zk<6QnOX)FP8Yl_Q&7?7l)uqrztfyb8e*oa4PXTQQxpqg}&>EjF%NA24bhDdh2Z9pK zb=!S5-PG&-?7LCpF=7M!kVqO#f|Gxhzev3UEC1jG{?UN9ket%zxnc;Adv`kv9Bl5musp0$&uP9VIZe$y&yq4mK zzk@j5T-50Dk$ot#TWwTslTfNxX)Drs{gmgkrPFLK#0Dp$Bv<@;tEj{FBCXD5tR(Nw zF-VR0-F^=B3MBv0`PaotKC@60zx)jneZV^PTPjT}AGR zgKtaiqtfJI%YJ`*k7j{Eclgo$QYx136fOkI^fNb_++D-!;)%b^V6qCk`JxJksT6d{^r(b)oK`_{4 z<8`}E;+KnjSKo8nHq~SoPe1GE8MzGxT)R~}F_Kg$6;W2pd~b&THy40b=+xkD=SbNd z-7K%4PnQ})@m^IuIDU-T=%=;#IY#Q5bB=y@-Uo+`zN@vpKfBpv)t5BZbVnm|Ox%Dk z-dDc-^(@?ay;N~2_IG#Mdx@YHt8D3FgWY?7+{xJDgRbJ(`u^ZPncm`cu?|F>xD9=x zc78F)QeN`$LyQ#7A6C8-m_8|dYi2e?@K136Q|XSa#QAY<3RpV8-5o5jseUN}{*A_b z+&7NB>pVdhq0dac@P(o{&m-WhlW^+Eos&&RtfvFhC zd10)|LtV32z@VQfOKB}zgNvuVX(4OqtQyB%?Br>7Be70R?!(B?-Yd1C*LR(aDn<7B zdR>)0U1zyNQ|aDkt2n> z{CqY|XZ4RR=+r2PPpF^bb5VA9kttZvzWLacyNCB}R90mT!Gb}N>nJTTiv@P6^&;o` zbxFRfkc4M@`fD8Y-4re=(?=x4WmW^v%vmn?XlYYNYZM1oNuxsOX#>^h$t#Kb>|IiHebMk{+Q z5mMqlm)QHwhiF`k-o3^u_NFmdQY{8r|#H z<6y!--hVO6_?F4J>man3JB#&pi-%q4!6I};87JM1?Uof-%d)9x%f<1C%Pw>~!P8`W zkieMM`*i8unZnCk^+_O0SJ&znU=&;z=XF8%R7^*Gb{m4y<7@MMi2ti#w^048IjQ6`@6 z^Jdjt$O}_hTLJr>-B95GKiq^xPiZ}ZUi)bhQe2@EkNdNuLWs33KB;QxqVva#R z@Yc}S-lj!j3IB7VO&i(byNW*ZdbF*a^u+hiyjJVj6-oG}2BYZmP_;Sk$4_nrRadkC zAgqL+EVQJcX18zsgiDlOS%gbI-f`I>#IZu^zdJNmIvSkYZdX;J=>7g2MaPDB4aW8# zo6Tq*YJF6a%u2yqY#%+ zV7TIP-2++vPX&MuhMYh`CWWN&G2>>N?yaEus9KS=)&M`m35$wz2#C)|%g3-(upgck zzwBsMW*NOEF)U#n&9=;Dtqbsw?gIB&YqHr?&MMy z{LeNrHf=U#vdtQrBKi=L(d0BO3R$fIiPmyv>Ysv=XNHxZ zEa83B+l+NfBN;ZmYXJ1uS}q4#^Ogos%=alZ^YI50?<&hJ4!ZXWulSThY z)g{6#D(Y!6hiu0(-PQ<`d7lbh-r4u{FU=}PEi9W#e-8?1ie-O0o|tZN`VBtwa=cvPfR)UI;4^m?k^Rl~#e4(^1 zx=C9Ujm%RH$EFOe%s!68^PVq%pta|qT4zyB?}DqEOehhREA}vWdA?;G< zoRu@)KY77n3b~!$)jlKTw>U!}=@LWY|779C>$1~T=AB6vUUkA~Z+ z%1vd+^yh-fGCh{b5-k>C78aHg(^ema&CSi;xjF|Wo_2l4B4~O*M0(L8z=2wh z`0(Ka$&tF!->A=5k;tNr!z{m}{k~Og-$&Z_SGG)O`ArAI~J#$ke4H z0P68@U|XeIqF#mJ;5|Yk86IA{)F(mTFry_Kv+P|{YwUV`$(e&wy%RkH@lEiBfS%Gv zR=oy)H|e2HfQ^@j_O$s)o0~s#l;&H>87g$(vFJLf z{^rRNoP5Q&JJSXZ)d>Y%^A%_8rc-t;npN)7yJbdaxR%=)4JXzVX@2fcoZ2Qks*flv zo03o8{NXf~WBOWB+QngXyUlr1Q9(f^844vpx(jvg8pZDd9mnLP?I|VM!anGr$H4K^ z5L8zDM7MYdmTj~33|k2V!gOMXa945D(P#6riB9XYU)%DCZ+1)Jd!CKHSO-%_+SLG4 zCI*&RZLWh$E*X5~+xY9ajw;TMEwk3NDiZkp0F9SQM!kH+z!pH_h%T1VVLzQ}u9Bf$39366HP_YNUvYLAwUKjtj3z{^1E@(=So^PgdZrrerSciliM*S!^WQ) zY8|}dYXA1#+4_0NN&fa}bzAybl*wrmSH_Y`xkt?~mzIE<*{+3&AopYM#>Pf(-@3K! zGKF)1(r*xfFlh#@?aw#zN-!|wzwVBqK4;g1aTM!T7zTz*^$K!7#olkbgrS+)!v^&p zDsKaeCyw67=2>IT5@>L#rT1HvG+t>u!2f_v+MIX2`_}2Tl#~>9XUu&nklD$aPL(+KT+U&R*uH+4@2k&p(rn_+y zSCa1eO_NM*C4!4^i;)mmmuw4Gx@Yc@ReP%oHB-MPgxvCrde^$d!OgzP8rBK-5H-GA~LqLj*K ztx*R1*k}@#;EQ<#GRaVIRE;sW!7a-0Vnodb@8SyHr3egJ+M=PHnqOWp2tIl)XH2(;yuQoLi zhq(XsV8LurH*s&%eF78$pPYloDS!9wr+hkLUc2mpEMB>EK|5wyQeEfwkN$QDe|H{# z{<}ktB}fope4QpdT(d{)L*r=N#eeuhmj2JTNZQ|}(+=k}Qs1d_uyA$q6cVcY9t0ZCw0PHyXD6;|+W9tB;3mA1{OB zv*bvj;SUPI|0OEG*W;$$kWTuf5qI#K{C_ZZs+-d5d<`}%Zm@Y7DYy#i;-Tk*9*pUF~y!q4~DK7z9@kEnmPXi`hn6?3%9_(G;^b?~x$2b#FPa_BGsoFHP z=$V=(OOe?cJoYM!wqfS=)i(<)ZY1DJ|kxiPK_41_b z+KCZeC{A6gtJhWde;(;?P5AQ;UPVim0n?b(M;HCThJkV(DnuniMFxK|LsKnpy9QLI zf(Gxy-;q*i>yAVe5q>a=orJH-yjb{;>+&b zqPRTm6Ic3iTV4tp55w$Do?9`!|D5)5q!N|)T2*>PF?4OHnVU@^4u0z{ME^*i6-y2(RPJvIvU)dl8^#7%4S)*_c1m(WAP~@#mQYralad zwb>*g2)vaj=^Ae+$ofE|*f)Ej*;8&h!`Ptuoz0WDh=4a+;?`@WI@i5<^eN}~WL{y~ zel?{V7GJJHm`C-zmWK+LiR$G$!OAPmsGU=il7=G-3yZ!?VYi@DD`bpG$Sbxz9&Mo- z_Zc3~hc179_y4+@zq_U1{|e#azSdZyYv^(3=D`Aj72Z9k!vX2_aG7dsVC`Mv0|8=Y}V!%xY;{dh5%@_ zlimC+v^*y%CkyjjzSVroZ1-RAk>jgoF^^>`cFEq)w5FdWyzkTEn#88b#U$f;bRx8+ zX#EANeuPPNY}`&hsZWQIoyDl`EX>%|0#3Bg=QK6XHjGiTOm+!)C#|zGCcmv9psQa; z#m>dnRrPJE!icFz3e@8mymK@y{ihuM!^8f!$^QL{ULx%+$Qe7a8cq2hJ$v&I#3Yvu0|lU1b*$7viABv%x`ik)k(e~MSP~k(#>2AjoTQjkD1Cm&<2J>?f{8I{ z1_yHu1zySfM7x(*U98jU!i+a@4UY8_x}poKi6*C|uzAX&I?0(7gc%~E&8M~ z2Nq?EC|P;T<}{mTAI#ma$Kg2!qSBKj9b*%^eD#MX`oBJRjy>@&(>GjmV5sK<+;B-_ z-NyRCcfgML+xgheaX+q;ouZa2JD+y9I?a#NLvdV`2B*+kS0)bXmh?TQ0hT5n{ zk3~+l`^K1*$_vC~TYeIF*dmC~X9y>x0^gM4aXyzf-_A^H|CLJpatP)-MV#V-bg!+A zMKjUQ>D+Xpr3M)`kPk!zZeb?-adpOmsCPQ!Nw|$^Y@85-W{E@gx_udi9q?%7&o8|> zCiCt|lj0B({UtfJ$a;^!b4%OjqYjqbxUKE1A!j=YW6FpwOXrmJs&*^Flk$^cw>5b; zG%pNzc6NA2u8o?vHx5oIY}K*_G}0Dzb5=MWcW`P)kkwPn9X88eJuac1NCh-fT^`coJ~`ss&Ab$ z1DFy8%3rQzT*i#MvvpM*nby2KyocqPtNg5b$sB_<>6+TaIzr2JeDP_GYEw@0*1<%l2!sCuIE@0f5!C%SKqJ9jh30tRmUO~ zu+}_&E}MqsxZe$6{u2voXrB`fJprR=IO+W@X)B_<2z_6d(BRunQjwyBf6-vQmu$HGpfp%1>gs_rk-DBx zG!=h*K(rDqX^HhT+&q*)TR~CYog;^lnc2|WqzES}ncd2WuQv(1OEJcH`$j=>uSbFJt#1l14&&_uqY^mS350P(fB#8D|ozx)oz%V+E7-+3v6w z{mK>dJr%)vBsQDlf9rRGm>Xqq8G%${5f+{)8Zhxam8Z*9>}tE$JJ?(EBM+@rMR4=4 z$r0THyudSco;VyV9IBi3A#utKF90tuCwbeK_f&+QbTBbKetES*8y-Qd_oRPMtQi9K ze7C>Ynzx*KvW-|nB(dC{X%$pkeTxJrj?<|<>VV%9^QcSV9&es>(yJ7mBo8};0tgg% z`J}m_6)NVoJ`mSy*YKl%G?gB5S&Di#;?c&ZZ>FF#DR?k49lG2j=HEDuoTpd~*Q^l_x(OArY}UpLTsswky~d|k*T}wzB=!NT z!UD#%#@^nZfv4Z0nMBFjCEC3Tdi6rUHkaS-Jhj%iKYBQ`(M^SdHC~rnrJA=!ncB9Z zQ1XUWrK5@5e0+Mk?Okd6FFhYZ@C#aOj6!M;lSxx{ML`kZffBy2@)gI1)!n#nfZ06D zq|a_h)iiPQkBMrW&kn-xc8&F`W`lGqbGgEn>C2lBof75>!@B3^;7+Qw{*)9;m5htTd?c{FPuL7si%zrTZF$vM zGpfX>5;ok}?71I*LM5R8;h|AM-q#fCVA*I&gRdl>2F<9wQx~~{?%K+etqB(^hQDZL z9sqmHq?720;(q>MdcXp>nIx!6Iwd>v8Z|qMBhA*79A_q<{fIiHfUPybd4%>(3n{y9 z;`(5ExS{a@9+1H4iUF2EAQaqRtWnWK)Wiow$6xP!I&J~ho$5~kYerTc`Z;ZT>3O@j zv{}p{r;T>ij>rZXTV;K6LDpHTtM7oPYO^wXS<$_V$LeLbqgxg7XTbU&1U#@>I_FoP zr@PSnJG&AO&nYFjcw?TU_e0_YX;`6jNJQ7NqD*h!P&}C8l95-` zD4v*DMVK{<{*mVwHuueuw$^tUZm7M%=X?IHQ5%Ih*B{T{QlNxEE#cYxv$~#~l30AnQ zetfEau6_tJW&hLgHHPMsiBd&F!*|G!z#N8Oe0n@v9xc{i)D}9t+kW8SSGkfA|KY&? z+3CC|2RxvuwtUcEI`F@}KTHI8kA|FL;D5F_|68q10Y~Dc@#OwrG^l?h`&+ zjAxhP{i}j;83LGI^au2h@`A9c;tk#czL6&}h{NoltK_0gt+P?eJWLK*94ssrp zmOS{Y8WyN235X+W11^pd@$$-%F=jPSTUeh<82xt@l>cZ;&K>}&78C^0e<&X|Oywvn zTm0cNTR$FZ{}**na+49Th3=*)JaeVN!7WchHIjII!#Dp^mFw?q3LPC_hHj2J(~;ed zKMY};5f;|h3CDij_g8;@;#;6FrFhWE8mSV=D<1HWx(bi$ecv)aRP8U?wLnSW_;1s{ z^clcqWMY>0^UGYN#7GDWhv~e%lm6k!pL+ivMWHYXxPMKM6hZPjBUM#|pJ=zFlq}YauPx~hecyypP+)Vum6!xE zrxv6n`>T%U2A0LA-${y>24MkLiA7Rk!7Byj9;yi7KJq>!8LvE)zm=DCYtwd2_h0^| zz%j+w+cA*CxmtsG2*kuNL%x~rv)SF9{=RrKOd6}G=Wa{`^}H2P{>t}TsW(=xZ?t*w zQ3E30;m`P~fp!~eiz{?H{vk0(l_Hd=Q#4F^KODogu`hzZi99g z84?1}M%U@WX8xB}$@a6=I!z#ZhEVD;-58PDpbdRG$(&ju{T9EZv+K7+PkUajMYXjmmhYi8M$+Ol>lEq&T){?31w5w!S{ts-y ztL(y9g$r-*N+-or;ZJDaz6poL+uvrFt)joUG1%J+zs){Hn7^);8rwy0yYl>>JXS|a zM`gg!r?eyTOXiOap7PC{;?hZX&HSt&Y3b6HX! z7Wnn&#{m;>h&)&r7_=-0%-%ufazH92Nv526t^^+w1RNHam2}Iinr2}#TC6GQe$U-S zm&LEI5ciPA;Gq()T-6Fn)!8p3K+vD4aE`KT72*H3=VQ~PmI5SN z&TTsN3!tjbibibY*uRnXYgzTZCGzxAt>_=LAE?nzTWa7fhKWp@KC+&v&3)(H;$7!A zX*knrRq3H%3oL~NhGN*EwVp-?SIfL!_&De~%8BZ&_A3)z>n~J{{YDU1O3L0R zQG@LNz|>zsVCFgeh=TX{PB!+Cy25}#i!xWso75!m^q^i(ND=Dp$wUy>QmC179QVp% z?S+`jRsLA1!ndFpDIw~;@gryNgWcG73tfY*AHr$N>64sOvHOhD_r`IuXr5^WWHVp9 zxIjhtMhrnc5*43{a#xvGDV-w)1nhruWz$Qw;%R12Fd{(fkY+8 z;(28+#0~|_De8U{!3o3uPz! z3iDL>u&@fl-y2@~qYvIxzd6z^aomeL!zEj67*-r7E#zd9dGBJTSx|xl*c!lWp!N06a3y7CczSFZtpC1&uG#*5J0h@U2L$tVw zWLS6a-VM`M?C;E>E=-mLHtrIIYwr-aWX~{8(BX%1f+;U-D(j+X_65{E6I_nfD0e0O= z;)+Tr5%~B;OTy!&{ES2;6)tT*o6YX@`&5v+6QSDt0!HtQu_^PF#fy=?%S(xxS0)O< z5205AD$qwL>VPZJxnA+*-V}@8h{-8`d^hSLu{9xNDs}j3`WmI@Yqgd`+La-;mra1_ zy*S=sK8l*llNdO=8f<9knNDE^mUJebGoS!9`JQEl(gyDsfC5XiqF(lCy(9Y+nI#8CnvU( ziCoa^B1(LPKvbDfnCGaHwhCem0W}A6De*3Coof{&uai1 z+-lq2t|4Dlu+AQ6+GTe*R5tNse+RqTcJ~fzb~=4%x{Gt)ft&(*c5^vkcjxG8f07JJ zh)LzSem>kHQ8XMEK{~cN@^V(bUe)1c)3YhqlKs|&DcPeh2*YoM{uS<{$kFgt0$>Vi zYj*O^Jj}FRf!XgGGGNwXJmoM;508>bV;Dqx`(&Hm9A@2;blC&wKF^Jy>6gaY6%=V{ zW1m$WHVanv8}jj@5AtT?AP~;{>;SEan(QX@XwKdy&7;e7QiOzF7Q)Q7P|xjjfe7pf z4D+d9XK~9x)2fPcf%Up$a4^;8yE>VWWz&qjzSws|ZYefP3FA>p0@U9CL$UV!s9bb6 zI6u_&~FeTfLlxoO>@I-vv?m=(r2(mLp;>s4jUB~|H`H^+q$%6EL&E^rA z;`qmt0S~@m)g!cIg>f+PI)|a{UK(w=Rt%5hZp?ujc$KSvfdGQ?p&ji6Pp2Q9Fa5iuRgiC@&j7M4h4^ z4n5w$7!w?u{Bq-kUJIBjee2*=<(R+`)Vib@Fm%E^ z&oV15$r9!;1s+g-{sz2*u2*=QSC9LOT$8I6TmZ-2rn@UCGpIN)}Ixa6K?qWl6p5 z*ABa8K6@pu$ec*Om>JQgAO0BPN+J9;pbz2UXG=|81!H!=G8Dm>H7(0sNGuG6WdE%9e0B}hJ%a;^_7pg91qNEfvU%-{1{drYW0fZVk z@xo918g=N;w74J{Y?;6huGHrfW#XY2p!q)=u)OBEHXAvdXvg(?SK{J_s+1-4tF9>D zairhEXlFM@`N~jsX>E7CV&ty>-MIN8Ta(SNRH5WPbz6@R2ZCE^h*gM{tb7K*E@O+| zl980e;B-|lS!{u<%|34mSXbyKNhja&W61K;S%e7nF2d`~s01kQn1SPrU9L-X=eN~d zDx>w%_G;ykFPfu%hwwpr{skkCrW%#Ie<{VzJ6N5}&#o9D8I6h`0&2Y`&OVfSw!3dI z)Z#q)o_MWKR92X4v-YJ3Y?0U8cn-72%MgS|aCNiz^)Ss#fE?`}o3{6E(C~K}UKYx# ze9>2B0c@$bj8g#p)-dOrf+3=xcshCfo+Wf^T|Z+Ro4I^Zdq*>|oqwpUKNrp=R|B|P z6**g!q?BX?6B;g}Jyq4!txKyn_1LR4Iy%CpLhT8Vcse$qMpIVNYVCCy<_-b;SaW*H zJF6=`souMfifH9PyL7p@I=Yn$8<{Iy({1E^R5aJXy`|sx{*@-}mN}%A-K&;&G!Yb3 z8CRn!K4tPw|6p0Xzqb1E5!k8cmN`EB=otgek&mUMV|3j{(!!AmtlWJ!9)c*_qvX6uew*`rjN{`RJt_K2E4UxJ?r?3W3Nm@#Zn?oAj$d-2 z3&KfxY5}YAciGEn9-Q06PL|2UiU{-LKNqwcHCQ^U4@$0}r}D_pmm;s@YP1N3!;j9K zP*xJ!-<`**#LCrbWEXX%Yg+*ljc+!fZ74QkM&aHA8(?bLo1wLAQOH{G}A2~1>Zpn2FJ=h1+KU*~ls~UGNBYOgCM{xt8Q=JJm|3Y)EXLZ}b(lE!D z4+%fWM_oKRsR<2AeA?PND_6z|nl{|ft>)#OWTGmZtxt(PM|}G&C#!7&NvXh8jY~{| zmp~U0jP{}3j1q%m@lNQ!yDLcIX>4Y7u|`%>Y%Pb)xQF~!fs**0V4m6-mS5D4>c44n z{q=GPt3bEZVbm({PHRAAn_F$UsopW~k6bG=PqMDsd#$j&stSZQ=Y|(Hd~5ZY=BOPM zF-U4- zpt)Ps%(r16QR0WokORk}&8apV?Hg&PgLCO!ZcgZ7;Dn6xP%Y@kQ#^?am)YQ=QR&E8w1)@amI(=~%N#DbH`MdtdM(*HatTVRDb-BJc#7DEs9= zBf=-k8T;gLOCsA5-v$5c(qF@MvIHEG}?O5q#uAX0+0t9 zD_h|{f~qF7uW7e->ox?YJ&W7A-94-Q&(;W&Lr7S@ke+wqe%ZOSdruV7ki8AFznR~e zMs+;1_e@iGK!2n9o7MW|K>kV#5?eGDQD-|DF;p`Sp7+nna^2C`d&e%m)hGxNRwX{Z z9^aQZ^((P?+1>J*gJRvFWen{sU7KYQ+xDwYP1Ix2g?AkJ{ZnWcB@uG}C*N=%mBLKi zfJs$T?AN{LEIz-#2BiP>fapto{JB8K4Ts#^0 zv)p2=j+5)3x2B(`g}Zive|Znm$_i zl{0b!>&egw#)3W2Mytc|q zDv$I8M(S3v4j7^*?UJd^=@0Bief0mlya8;m^ z044W2&I)MFP(w?U?8uYryb;b8O2@0TCH7hL8ss3}1`IR}dy0bb?1Ds3qN}Y=5U@55 zx}U0iWWZrE^$Ik%-W=APjvw#MO@a0$U5v(iRP*S(4kPp4DF>CZor(Sf7@wN%_Rn|E z#4cz7AV>wVp(V_SrasJPRA5Rh&HSu*>@6tWvduVfiBT&UdyA;~7H(Z&sJfrwvlA@JYfNI^fQkC07wS-56Q#e15ErU{-8JSsdZJ5=9xEhS86e?1v>1WC8kR}3_rSd@32w>RF> z>ZS;TS7Y>OD{4EZyQPvY=OWy(+X7jQ;gfUbqIVs6PzmD)a>>p_tN4{I*UNX_9`A%g zHX{lg9@@hJNQKDwHX~5q>)7V<^_+?7XBLm3t=m?;vmcN_GHSja={x5o-kVT83V4!0 z0`{oK%@#Gh+qrnB*1}v=P>;ej0@Nf@-V@OoD4=kjdh8KjgK4Q)xbA=s`&NMulz}{NFI9x=Ez7=0x>@G5_ zAF@w7>l1j@oAF@)-vbr03VxR3{Q@AY$tK<))-b^rYM??SYANCV$4Pke-nJGFhpkQ8d5iNTKBEWaN zVL~Nl+wdJC(+4|!H(c~QNCfE87yI9s74C`Z#vNF1E_0P+_R=R&kY0e~9@iD3imm?a zCLQvSsTSDjuRUzuaH*b}8*#bi`bFoWPKsIga}%lo*)5k=m6sB@DQ4_@LaUsz?Z$%^ z{bf#yOeg1f3d(*Q`gq6oq{O+?BvieowQ0Se?AbW;mpcY?2fi#uxD*K)vk2XbVdtqI zATH^gEM!3_69@www|RAB^*Db1P0plNl5{5~`DcjP z>G5kvi$7lSD$U@O|BcJ`r~KZ8@b62Bs5G{y5QfdA%9W24GQ>>VQJ^`&ybXXu%RfrAhdkD-){S<#`?!q6%- z!YfXRO2dt3Gvb{HadyiL;XsX5!$ z6`j&Cc{3^*JNfJhhWU-Zz$2&(rCgPnZ)U)`#AW9_}d)&1JftRZ6?_ z91ctXS1koFoahM}*IuP5&Cw8*qTe3QZ@ANj)OJ4Cn%$}SIBO*|p#I#Z*=>C5s_M-5 zE1rwpkES6}wfYP_H#jw*w&tpHO4fDS~q9%Ofoo0wT>G_Pf*2<%r); zi`LuuAQAYzO`3fr@(~kLX@Q z#o;IWf!w^eeTI2EARiI_3k$hKQ#}G_#d}X)p&HmNZ|k}{87T=W)Jv2>l^vS4^*5&S zk_2^3M)J!IEU;8>CP`Z)HJhG$!yYA^)zA+s5-e{@XDD60-1SWKFwpp#|G>~)yWY6k zbXvxMn!>(+506>15|;>7kDOTQw>*2Wt_w4Odx<(84Z0KQbP3422MjjU80z)69A9l6!D*kv!17vaxs~nlOLSUAvRgo{^rBa}}WPqrPtg{aG(jna1baxL3hnP{rTX4HB)Ci&;bC zOON{6oCkR2DvG{sqH>Id6IeP_1=i*%zOKzpU{BLgS!thS<~S71jV1lT!J{TeNyRY5 zM;Q<g*@DHdd29$j3;K|R<8S?P5LqZ z3+26e$YQj=CDd~5;ujFFW%V@+(kR|1!2qx+LCq=9rHuC`;xl1*Xhu+#Hg-ehDqI~+ZlO9o45{cjxxAOWw2Khl0k1X{)>{2Wn z#aYglFd0%LOYFRwcH{nE6TbeOPt-oLP9MmMVPCm}=SRGHap+;AHY|!Yb$B<-P`z$% z6g>SPK|p6rRqd8YD7RXztY=y05t~!(WOlr4T}mm+cHN5gydaTD*$Po4lPRGhmm$Id z6AvezI{rR+b3lR5pR(2@JBys?PJ!GV@T{;Vpu6V18Cr%+j^RzTH4R=eByUa?o3;Aw z>1troaKeUTgs2NT{wn~3Ype+?SRRFamfQ`VSo3`0@OJ)Qmz}LxhA%pF&dJ(O+kG?^ z$9YTV5-*@iSGop6;?PVxNYyu&>yKZ{y-H*PZu>MrDyv(utLz2Ei-QTAy&WhGk4OU$ zYkM8O>Vdj0vnHyd6d{bhH+kP&#nf?{T9-<@IH1d>7;&obiK0x|szT*uwTZo(r#@Mq z8F7wk`1w_=$fN89Q?rs6ce*(jlFhka-PkU3_as?H%HFG$CF`t#hIK0d zHqZere92(3ZRqj)d~htz-+^BE+Bh1A2%D2lF%$6?t*UkM0e9tgS?qvgy~h^^5)M84 zBvCXh)(Y~P;2FU3+L=5fk z`ZD|@pBFtT)_VdMpr7aA&Y zJm5hIs0$hE1p^`u@1OOEd88y6fxG<^Ayyk}VPH#>s+|Du(4-w|l18Q80b!QSNq;*? zlpfi<3^x|^<*o;Iv^ZvBZQ4UeOOwyYB43g6%j|F-7K{jXWwua6oG7hl$0;j=r^E^k zD`T7i0@9%Hm0zG!CDe#!m2g`y)?jU;J8q1;`#2{E)`smOEGjrIzD{XnwL&$oP!1)x zUS8Zkxw!w9uOXm_E&0;}y`3UGV&}Obl8s5qWiJR9fpJ5#zK7ntX-8TQ3uSmiM@Z?lzX5sB^O$`Ulq32%(AF51yeD!5NbUnzg-IMVdpdV_BpgyKGLu>MP&qW3SPP z0*m*iL)Ej|FH7}RCS+8WvwLx9emiA`-6zs~)LS2)1%#YV6gre3*+|B1B$y9IUkZS@x8yS3+g>%-*R z^O>_nam=@cQJ@OLwB#xqg@u%LqgJ9By@b9#KLp)Lxr9QG=v()en3Akmku|n$ceZ5N zOM#7u*+`LFj;wSh&Wd<1pKL)+`4%xoSMh@Hg}3P1j`rr`HSRLL42p_I6>DiZP@KiG z8bbR8avT?o+);(2xdtr2urBC$iHg+G;5yI`kP!#Rz>6cSayMq%uhYVFR=wJ8)|#P& zwmevjQX6K3&@YS>oi|>rCvko(K$ByW%~KXB1W*(#$0qGPcar&)pvf1-u1cHYKiKaO zv~9e}aF=RUVrCx2wI*5Vj7t=-890yv$EDoge!vCs--ADg+D!q1BXeYg(3id(bAkMp9pjdI`>bZccm z${qMqnt$;(q$gzPn^*Y-P?6FypiI^dGtzX=k2g`jZ2?q3FKn$swUcqcEN>Q^0U-2i}YL~-;fdY)N0yf`2l zkA7OKT%>R|0BAeb;cxi&2QR;uF^}X6g*z^+fzBZcw(8{(>&T<0-hF9s1G?+sM$3Ss zw-WS`PQjBMXM&Jx&;Rys!p1XFEZ`rf$pa52FJcARkAt?y~L2v120qx#5s ze3|x6i%K~L1r*9IXb1J>&FC)t=HEEh4X{?5pdS=#Y=#!n!u3E`8L%0)FqzloDX}bO zKPj?J`3TdT-HDtunuf_ranC-p*16v9C&q=6)XXY2v1=gxG>q9+y6M1)w6sZL$< z(EoVgH_Ckd4;PvKE*E7|!Le~ixZlls@TQ&E9BAj6>6CpP?|-+8N=t)+(XI>P0Wp6< z?6@EJ?kZfok1x|-mSqzVaFl89I3Wdld8NNLy?WA9CFS5AVVR!w#B`pZ`RYtgt9SJa zRfUK7${*X698;4+_kGm-0(-n{QMn@HC5@aG5$geZ!?Pj(gOn1`ZMTM4b~|{$92~39 z1q`v6X^%<0#jD!0CU1yf*@S;T&^sK!>tXGWPTFCFl^P@22DNDr(D zeFW`1lTr2yf`dYHSh21l-u4#*hlt4TRFCl=6lo@i-}Seb=o)CKKFzt7b-t9oWq|&O zTVReS82c-+Vk^Y0IG%@l9sOX{;z7}!)bUxhw9x}dwQr7BNELG6T6bTXv==lxHRYITCUgYi$$qM+mV7lj zW!FQJ2Ox^Yx+)Io^@cVqLKrnmW7l#n1mT#$#pw0ov3rpp#?FsZ#{+NbmlV7;vk41i z2Ixj^Gn}2vY+J`Eb=u3I0#Z1fz*}A2Zk1~8L4v_d-I3@Er#2vixY*i_BbQG(N>_v9 zUA^1gnXu*4?rZARV8ODXw2wC=mm}m#m#t21&tEj|?rW9oJJ2VJ7Q-E*z2)^RyZ7ut zM9BrYgDJ& z#E_|v-_zw_YCPJjkK;T<;}Lm8+6h&~qsa65?2LMkRe9PQ_xRL7jUl0C`1f+5R{AMf zo3Bu*a5(+*7wF00gJ5StB-J$+j>}i!KndSdG9&Y;%Tc~wKyJ^@(0X^F%pz`oXnM!rZ*`S!eVWcp+<1e(IMSkp2a=jmF zj}8|gIeuNXDJxLG(r(KkGEjJuhoP)rQy`+S8TJ$p{KiM%+tK&b`WNx93;Ve}&-++` z8VBa<@dP1Qk4YcT1tHsuFX7@!T>a-zNa5p z&zK7d|NiiLezSIz^YCI!lH@JievTEX?_K|J9j*t^7}+MmQsVd@B=nChBha2t+sv2! z`J%qW?TBc$xi<-6hbi8yqk>CU{G9smXzr!=v29$PV z>J#ngpY7*M!zEVw60oMLP2Jb=rXQg5`yor`@Va?NZnB7Sr%PJ7hY6g44eIm_Qq!*+52t_F!|rh>G)v<+7( zaPeo!E#Rn>V90VjCtn%}txvRu%3mEj%7wYi3!AP4WH-yCtSS7?TGFL;Pc|&+`jfR; zAK7f6B(!%_T-Dd0C8HoiY_OtI&&gA)1)3>z+%^Owt@yJMoRh*e7V`{eXXT`C77uYk z8NgnF4y5_OB51h+uPh=DN@C`&{*1Yde1?pcx(X7~;$c?HlMedo)zZB6x=8lVGrMlTWtA zJug^KQY(8H?pb{yNUO=@aBo$l)b^Lu@_U4N_dHW^lP$_iyNvX$SOhmrv^F`*e%!KQ z@BkpW#$*!+(rxE$@Y@`Vb%M}B%(n&)^*RGBQ<-cE>2&|fC27+!If=WRMlEy<+-p=C$TB+4wH-=3*-6x zQkRE_3zVxEH=dkBSg>SGa#<%2L2Br8s>p9StX!NX;5fvGGe~IxwL(-C+HoE(=OeDx zwZS8I@ZTJ&F}>6^4}Rl8gcebaD!s&}$gBy1O35_XNJ4)c#Ry$5Lx5wWN>egnX6o>5 zT$288YQ@+`IA6+}#CV?v17-)ET zde_l_G{6GK#{ECp*@4})A+nWb3_K2eN0!(I4#1zC4ZrnQQfXs+}< z_LJhfa14Hr@XZ}BQ;mZLMb}DKv;zeI;?XW`Q$M=x!d$}`LG|taH4E~GwLt}9L&SY& zNUeIcD|AAWf|twbpi3VcZHZ-`2%ixIX$o9F7OGdyt!ZlL!Wc*aa7u)`8#KwCF%wyn zOh<;Ez?t$p-$?`5YW*KJG1W+kW2?QBEx+L1t1b6xwY#aFfM1%cma=v=O}oGW^zCw& zmWDim^eUZIw{G;wz$-_hywgxMMV^lG+7w>tZ5q1kv!tA!lfi$23dKp3*A&QXNn$L; zN_Odew%EM#yLi_nUBdB#Pszuu{?gesQq*ql`$i%GU+nmt#uKz0lk3L@pY4nD7A@zX z9q9Y9TRNkauy4oiy*#(fQz|=<4l#hHZ%4Rk_GNrr`-fQ6Hb=-V#+ESnYSJCDG6@>8e zQy{=Kk<{fGsD8E#niFLs`)3I2w(=^O+1C5|RpPAEcT`1I1IoJ-0>54?y3Kb+uJmtW zS1eQV{(4G_`v;eWX?|60!Avh!~)nNXB;T0e3`N? zwU24Dx+Oo2<|0#B3CJy)PVIu*EPmH!54roE90M)PmFxtnczntSivpS%P%Llb_MA}V z*Rem(CDXxw+#4_Eu0%|2*Di1pWSF6+e*#rpCS?}l?Z*SKi9h&y_fptne*J2ZDo{?= znR6~RDJP+9QY&j)vCF8N1rMa|jcGa43}B)6PQwYoT9p9(3d-JH5E@l2)X);1J>$b4x! zKsYbJ^?UNzU7B&(`@TiB_K6IzU z;PX^2V47gYrPVgj?|L>71catQPZ&8kzw)C~84?WY!p+w)k!z-qky$jtD3>=I1jBhJ zO*@K*fQ0XP=zElt>MrekbNc?$iPCNyU;1+gonJ1#j>G)>QO%CuV^nYKbwW;cyv#JV0j!tIu(6F8r(?n^V#M^@H(Ugq*1Gq{`#J3bOXq`UY;IyK8c z0G#Iby@Eml46S7b*nKYO5&6>S*x0fMYK~N^ShKWYWo6|Qkaqu~r>E~?WMJqfU;TJd zX3$(>@8ICze-^3J;-IFg`UEf_c*32Yk#2=gKjW;X6ul3Nw}Lut@``YH+IGl0+ zK>V%crrwu;DMIB8G|OO$-zJo%T|3N5y)9n7T$P`JsLY^E2N=6fhpBp#>rm=;Sh(0g z`ARWx&4Wq@>Q!1PU!};L(zOn-lcg_cAxt}8HAKY=1$8}n?G~5?-BDGNEbYWXCjc7> z5Tv*gv&Dq9VshTK&ZxF2dZ~BIy?qF>E7fitn&KLY6R`O0^^IV>qeFIC;95)&k11JG zAeZdok#+6?0i-u)>xzXr*OXGeay=evY9f}Lz;R&Bz0zJy!x-4<2q>d(J~ezn!D?F> zxx;B{6X%JtU#K(a&&_#WDLr42PU^J_Ok`Jl^QJnd&bceQOvZ#zyip01TEgq_(vIaZ zFoKEOaSi@Zj#@)~7Hw|chqnwV_OU6NFd~BdV*V?X%YaY@Sj9nI0@F~}`XtBxP`t$7 zUJ@!3K_H>)9rkDR^QY~b1glf;msLx9NVRlzCZ4oc6FkIU35aNxBCMdcT6pJRZvZ5#G8w$n*EbZ!O&f2kT%VV(%pT3V&OhQ6 zZ$DqDrdevpA?UsvPo`0<&Hkj5aQ%+0uk!#t2o-W9qKZx<8ts=hn`h8&BM30%n@3Cb z4jx^0KOQQ-kr(nDg1Fas%k1F?YSWzy<2AuWk?cif&cNdluwa=USESiAhKx`5u`MDs z#{9ryYcgUBdZrkc78Mnh=F2Kw&#;n{o4dNs%fiCK$i>B#uixm>h&kCA(5ZJYa0tXB zatXgf-(#ihB6|AgmiPD7AP#a~Hv0c5m-}yda_oznJp5(x&yJpMDK}g2RQKw99HiAf zPNJ%iEg_g$12$e=A@Ns?^V(y>N-6-CK?9fjocQ4Cp+FrOS(JQ5rsG;Y(EmEWJwSr0 zT#B$YU)nVPb3L_DJX%<<{eV zaM5y(;SSj(qvno^pJw&@s6)JbgTD|ZjX8b}`d5Y8ruhXY8-L}NF0v-_w~Iw%O_xPa z$NSvRzxBM`SEdK3giP-i74 zpt$y23UY4RRKnR2Rqfx9k<6R@6M%7<4d@g`_kSQrL-3f%BIBI&w<0F1OJuw7RC6@~ zvznfc>@USrY|asFfYloT@0s&1K!YLH2k0GD-=r4e{%w7AeSgIYX)D}T$r|nUzEs%^ zdR+rJ2P>ELAHE3G`ph(fd)P@Yerhw8+V=1&rUEty$|v_O1ik%Q?0(sjjZ^59(+VWC zDvoB0-*yT6uv&@*1LpgzH4%m0X=L5WgI5ogpa5`i2#|3N>?0A> zmzbm2$w4wQk~^zrBUKte6}0=pmU$wKC7@bqlfr_{3~1lV3f=^9x%f9?Cz1nnm8&`d z+;Mk9bx>sJ<*&=| z`+S=@CoX}63M%IS#oj*yN^BOyFBvtntR7Nn${CgJhl6^(CvWAS+@^NA@$}TYTVJQ% zxmt;UU9i0EXsZ=#(00lll2-6E@c<)Q<+gw4#-wB0i90z z%1G%_f&pm6U(bODeEVyQ9OqjqYj`q-0O5*GceJceD)hTFaB=-)elD*HT{fMiWi%Bd zxQn#(A^;@+#X_Nh&KASvK6NH);rvKQUsX*l$20q!VL>68yI?EI6-!sxoB>ca69958 zvo9=}@sOCUy2Ph2u-u(3MRvd1pgzZ~tA3^sfNQ z+Ud<(_O{)($Vd_eM&J_7GsN=U*(5~+zC`{c1$%#k$hv+g*OUr+NVd++ z$-<)d|SJ8M*v1;L`nD`N3abL!Ec~$rJ4xVXr>o0kH-s7QWu6R{i#z zg7Mk}fQje!lAMB^)&JE(-2eM8r6#*Jark0# zKh94vH$Y77(f_)R|2^_JUjiY?plzyVg)bX7^*LAl|9qLU0oR*H`?iM6DazNy#p!Yx zFo*s>e;OYcXP|)}wiS!$*9WB7Vg|3t{#Wn4f4_^LL&dUK6l;FnFVKkFE6FiKt^l%d z@o)99c>g8{{jU%DEfMzel(k~hnm>#dYesq1+CD3wn#%(3HRXVsQZ%n@$E*(HmkJ+7Jr~9~_wE~(?(PGu z)N=Il-2wCqI>M3~P5oF3$3yg@avJNpG17YpYpE|Iko;a5`9G;T%CC zLd4DmgWl38=-~Q=RIR%8KYqJk;n|yd$9@`dcBUHi?21djga2lki5=aO=b?!! z&%e+#^NSS1#-|Pg3Ra&fh3M3E%wd0!f}WWwgtQfZH%vMALvj}^GxYaU=;;tM6Aw@B zDXuEcZ5rxKnp!|~C6iSdG*@Ww0QTgXwik1CspL!XT|5qG&g*>0$x7Sw_)VyYkX19g z&H~N4$ckkEHC~)cVP9Z!4_D6PXz}}`q)Bf~uV`3W-|Zx;vb5^{5TaWlyl4Kq9q+%A zf*0GjeSBs3r>tLyUBcd&#N|lp-=Gjn2+R9-8M|T4`K`(fNgP@_Ov;!@|QX)!Gv;! z_k)eFF3G2VfTq&QazylLz+2kkS82qVq8BD1*WKWWwQtK*aheKb0y~UP1pN3z6Z!)A z9#$(pcRwU@S=<1Ni=I&r^d$=RvcH}Gm-h}e4X_SqI*4~-I_itEn6bZ0?0zwiK%d3l z{U6WpAAj~T?oE!NWsaHSz@JL^CROtW4XHhZj>5JVs^L}8gP&aG13<}r*w=%9z4|$D z;6^U-54p<^R`?m2OavCFAbl_7J3d|2E~N@=Mv_m8LpEu<*!68 z9xQ6buz83LXq6`ffoy{`X3OTiSN=|VyFO!xzdK&mTQylS%S5G+Oaq+%QLDC-a%bbu z3XPicj&|k^nvxEemvP#jRdcY&K`t(hl6ZV8fw8gLKt1}QRhK7M4ioQUlaWnNU-)x1 zN=pLJd9niGZb-~(@Y0sgF8aK7G}klcj*CfoXD$Fd80H7Wt+D&gMx?1Swg$ObjmbCF z*wU9K2d>qb?jL9zVA@<)VAj><`Ns3z`qe{g7pNdd7n8k=Uq>_Y7i-c<4kgI-TEOcx z{tn1irW|FEgIrAWuc{Sn^15U=1IA^TT}2DMpD0$34m#fYfPESf%{xdoJB{P8a{@E0 zkOX?NuO^Nz1Zr1~Agwv(%XegiYaH2Y8BznjXOqWg zo%$JoqBEpvW^)Ew%X6jiSTpsp3})`Q@vM-D9<=KEAtink3VOP=5av3s2k=4OoS*SY zA!ya=MajlzMsJxKRWF?*WtUO;003o+7&IQ1vV2xGW0t`^HkSZ!*Q!}{8g=XJW?zDA zC%(sbn-6{lk|Amla$d(cXGdQ%B4^FEh0!b-@L5lovH1n^h+h?O7=GdPf&9?NN^j+P z)vU2&{-7>(1_T|`YHL4nnbe%YXW&(*5iF>dgB}gwfP4p9DYAgD+vPYgUk_H;*LF#( z_HbF)n`@;I;}F%o2Eij)Abdtrq@$EQE|*#)%+pjzR4MtT~eeQ^))Z-od4-p0?^8I@0}> zf$J%_wrzo)CmFUgt5g8yvC^D@ty)VavYpfk2BiZm!NOFx-+;d0@F?&%qv2U(WAK}t z*_ZaYN-&2vj(sj?ok9b?T=70{PRwO3xs*UV!@BreQ}5@{Sz4FZd28${Fj3LGI7x0C zPdUHNB3%#~JpS5rfaNr@6-3TE;5cTHgt3ZX)v47LsIz_lneEoMmxI!VmvsN_2DR;oa~>La8C4Av5p?JbdgKgPx9YaPAAt`RHRrDaeG@Xkl54}+DE=zIfxxKhn>UOL?&RlVfl zs*3OZVI#qR06Z}}rfd4PqPgw^gbZv}Q!!E26ddH@;k~8V>m;t`kEy6mg9|dL`TxTQ z$~;nRO7rc5D<#q)tTJe%f;C_(Sl9xX0}j2o7?FENavO2JCr1isFg5Elp1a4Sy4ex1 zl!bZ%Z5>#M=-X2=CHV8Eb?=QG+EQG5mTW|Z$ot!_0QFcPbQaY~y5{j+1qNl`RZLw` zJo!d7T9(^#HB})VY6XxQsreSL4Hts8P#FJ71p5m3VDmX(shE|vQVl}SBE_zTYDqF) z!S&yYsjB*i8ng^e)MWLy?T@;e4|m=2Ax65rs~N0B>PVgJj;VQh?6O{y+^R!Nyl}U1D0xF?Bz@l#zb$|BZ@CM{)F+?!vccopMHRwkSEz%l+M3o9Po`=kJW!bHnk}a z{%~CvwO;YL-~7^9P?j(N_u-vPhuqg5;-bA9ipL}VNGjZ#&2lrqS%fAzOZ!f9!kq=5 z4El-@A-JJi-rU;@&Wt?B#ldrHKw+(vj2!}o**x9j&-dJI+<(*9+h9DZ91Z*a5uF*4 ze{FcN>w6LoOcWP&jHEEWPu~(j)Fq@nZ@6kbqgD=O1jKzWhmA+Pmy!tU&t4#GerX^P zujSRZmx+#=7XGPXw(1>PhTwt$~DM!6!-bq z7MedOl({5}{X^+Zki_qEEiksMJh>juxJ=aww@iOz`5W*i9_sND6**ZFRGkpw$Y?+_ z@Za8gpAP>jd7Z-E5GdDE<*NG@z+C541;{kIE%C!XFq?DtkFnG z62Ek_JZ^e)AZjWj(dqpD*+`xFQx*rT$`%XKz&8>Q5Czf~zMrbJ$0)MQ(u@Te{T81E zmVm9{hmi~|yp96o!gmjm^CIf@Ul9V^kFV)?1;@eirflYEp0|ujbB{z9tulPh^Ddo{ zMjR~RaW@6sc1H~bfZoA1V$14ml@3fx=#y!Utf_vh2Ns0%0*!wR*~sC9e}FFkaHb=4 zmm6c_NjJB*qvYF90a*p+xM`N!9m@=i@y$-i`m;C8v|p^z!Jt=0wjN)M_eQkTN*Y2a z$D8Dj*%=|sWovMY5tO&4hR z&l)JxC+!&(E)7sGj!WjbO((K`xa~~MRB``+OLdmuhL$26W7B*;oy{w){IE21jjnyf zT&80C+~$>Jr;_glOAqCUhRtNb=E~Ry=bm^aV@km;Qtx=F+pas@z|DTB(_|7(1n*k# z>VEQlo{vJ>Na@T#k^hQGhAUpa<9?TQ#^lqlMlp9lX1SHRIqxzEj1kslW8UM z0)`_4(cdGe1dn*((xnf0?A4V3sxwoMMq)}Q0CmX_iN2eXfI(jZV?|31!YV08`kO?L zdqiqWvKE2!jhom|_e1u1ZJH06v#9qK&*ai&`I78+Pr($VA?);%atNRxahaz`;{&ps~P_@uM6@1{VS}2~b z-7B)zW?+W`fvQ&=%0-?wc{n&4q%4Ok_n>@h(qH;@D;L1fwkU`;^z_Hiv{XC+0H(<% z997+AcwHr2T%wf{LiOsEjLXtM+4~O#wAEiECM5VgCG1v_e;cY*-OQ0zt+_S=y zqE9Q@8@dIBgi&|RY_?wrHFlqVL#>gigdTIgSC%{^y~VWVZCmyHk!;yWX7BbiuIBj@ zG&w0VzPK3G{klY^4|Sh|T}rVn>r6ENRW<*!0{Qt)k=ibl88_=50#1$Z5G!6o-==bN0hW-4Vk6$!$p?U=Z+>7_~nZruQ(uyvI)Iy>vhqiY__9V3um z_2)8&+d<^@&o_rY7yN0`;54deQ^?$RsC98 zs3`CuT8SERp5(?#Kp zG69B$U~YtE&5*r?jNbZDKa87$$0S8auC2m4CDp}FEcWa{NY>{p)h@#d6VG#M$&C_(-SSX46W~&E;tJ?OBC2WHAfo0O4@Vg3iIGCA< z;BBufk|bjh-o)T((L~!zoWs{5Q%@YQZrYF0t<&hyYQXtos47T*RAgOZ7vd2a#m{g< zo~zx*#(#$UyFAyS5Z@+yaSC|wxE!69F6gaOaS7iszuWs zP5?*hTjJal`D9!|^m(cHQERu`+gzE*Ib_S-^)LI2ku87BbUb&fcX9B+%Vp?*Y=LiA zR@R^ksmbCyp~4$+G7?&nONLcsud!3RT3(`t0Fygfv(mq{s2ASs(DHlc{g<|G1)urk z^rQ9H*5>{OIB`qR-~exeO&$vZs@(QarO1{}vh!Y4ahkQvZX_qHH0#cM z!0B8^im&K<#oMmbikUaH=d@Ec+Hh5j6xZ9bY#*+K^~)c6W=icI&JH5Opm6IENCadJ z#N{?uKY39h&CoBm1|HQKSswS^2&_cEB{e&eOBQGuD!6R-DNn|%b`K1J+~LRd3)n>0 zd8_Y;`8C%%=P&-5>>lpam#JgMJ{Lr-#HePV$#Imbmd0wBT$+mzHZA3aym==<_S_Va z|3lxk>rzNjR<VQ$eI%5bp$byi+8ihbw{WIoS5 z+-6eZoj1nU0AU3;M!bbr)#EU;mXBaeb^FmJ3J?>Vf*lutE> z-1+#zF$gZhi?D#3K&8xux5w^=xO=*c3Z9rLmlFu>S5>Ep+@AOmyG?z^;Kxn!8II@UtPIn8}iOEj6I#OxDRsuQLI1^RMU4$Clob5niFHEulp58n|E6)(g**yw|Tn`E{ z4Lb7RJ%qZa5kVL_b`Zt8#B(Y6Ne@*#5`W$sgc_5y_DCm*%&z)ctcQOf9t_*7*rN2d zJGCF`bZn*=9Ci!#Tz5=xeu}7Ie9*di>k3Xqj=EjAeur#j|0e}pu!qMM)gg|NGI>Xb zqW2KJbKE-BL?v-w)p^$_bz`aJI^Y$#`~ut?&$GC$Z_Qb*CHlK92fv=%r&?f=YTv@R z*Q0v-$o`JR5o&zzDdxf3T<55pir+&tizV{HxjWOXd5PJ`)_>fDT=kDxd}a2a{$`=x zw&_1s%Bt2Bc_-THbDqHw$7VfHxU4^RO0Kl&0Drmup5_7h?|Bw$BX4X`G+Pr0QJd1) zX0Art_v!Dz9M0}Z%~OZfzjRc7Nji&0@(j!bEPeqT)f6W!C%!|po{c;y{?{lzzp7Wt zd$V@a+eTsNkdJZC+itw|x&2t|U&FhBzx>|NW!}W~#WsI1^zsgwdu**)T>rk`2Z^3H@(6IqlNTMfvyybS9ecNKiFw37_9h2U+zm;-FBWPM zc)zZMM}q11o6fgZBh+_{5aV!AGWh)$v!j<)iWuhe&sS6IxH|H4vu<4NJnm=khwvr# zlTM9!?7PF)2(3b!AnOrUYWK5)V51$G5xci1oa;_(;NKGFMp9oC%9_^YEho4SGbh;# z`*4v+a;|{y`1^khxU1Wpp5As{8c7qTOb_z5_pDzQF83o_)b~c6EAC8A(BA7cgx6_s zF@9ajprNFm#Y~kip6t>-{bZJ);&FV~8*9qpIGq#Kf}UgAIv-&&s=H79Z4qCJW7BIkxn1_!&57sid;R*Kanl1%~L9G>WWc;9>r zN!+@RGeV-H^)5@|B4Ybs72P%+Ls{;zFf8rRm{0&IcD>S~`C2t-Wsnq1|fHYi@&u}|h9IC-@H79wLJZ_BSo}DOu8uSg4 zcg75|Mc)0gi5wT<(ob(&vieZSuO=PIx*PRbrvpPY?Il!UzpZLLtr z{p{BMcH^JBUF^G?L07N7Fm_eTk(E3ddM%b-%NhKyH~(uMT>JeO;2{ttsq{8C2Gz>J zM=*Qz!{xOU7sJ%FIiBDycq+!N8l?J%&KD_q@dI6T+PZUG2nB) z<7PP)_FLXkm$50C`g?u8d~JMq;-0_H;TV;sdj##^f!H+OT5_$hZl+^qcTZfvr5T2geX=|4 zrlf+ihkvNn)L4(Gb5nO2ZMbNYTgKr_n znGGFUf2|;}5^BgOu-&!aiqSzL!=6UQ=Y?-#N~?3q*nBVR6M|iKrZMYV#`d}mmcn`D zNiPMCW=6L7=bqSM=a5FXN{?uxIS{_h%+iUl0xEImsg>(!?sH1~g>` zBQze^FZ@s#5FgmaMN!wV&AQ)iLGOV5!5}?iw4qCVE>fIJL8|&0Qkd=u`p=KxXQ^C+ zQ@Ij>2FCt(c)T?-OAMl{1XZD220C7V+x*#O$?&4>c9q?PuJ`CN&(vXsr{25wM3HzW zFo2uXyLr6E<Wk-YdAl`Kwsi& zTOem(I8|idh73<{{`tAHrK}*p9djqT;fujs&v1*i#BQGO8i7c`M_^hSE z7xvS5@`S8ne>}&dlxnaeTj$NtYY7?<7pW;Xi=P1v$bS0x%=-~?#ucuU>mr3N>2b^2 zY7o-A&8aqb)d=&QjUV*4dUcRu#|@7$z{h`_m^WKvrMtH`2cDnCY}wW_<4S}yCT!K* zX^vHQ{_AO?*?8!ug~{VKmRf_K&GmGFec?A~C>HF-)nZDP^=s^M=lD?kwz{{b6kqE| z4soN~JSx;{P}q-vZN&aG`0m~6P*&b{O{i?<;rH*)Pst|HYmsf~3>m)I;@|1@Q(DJT z>|VkU-4OneT;K)Em~*#*Xy7EddNR- zzRZ-E8+U({9b-j_nk+D!Fl#Mf?{O1QFH%3jQcscm1i())8@tOiDol8YS3t5ojX;?G z+}_(L_g$;NXz#^^fN4anz{{aS<8+I&PcADI2dExI?-rHM%X8{+_Vd?Dz6>pUc@LqB zE*su`Iw#EcpH(c|t(cm?P=A7m`lj^0pXJ)b+0|7H6C8S2QRG|6_vfy>uHXebI>`VzZ0sNzd27w$n9%mhJL5N^&U3>`xa^WU8F;B$_i z=leNt{_lS87-rAR+V{Qox>sG-nhJTJ+@$b9^Kx2ym*C-MQ&Sbf;n=-)yWii#)7s3B zr0lev{q|2I`{!Tp zpRi;iR+P#$7oKngX=QoxO*17l8eR-~A6tF}Z@#*N%$0(e_a_mdi%oIJe>|4gSYbIX zxtRryc)(^j2-GCAray3<6)F3-ZOlRpAtnHCDyu{P^HWIbt*hiF5B4??0%#MCmQV`R zlNyaFw;t(T_zA9cy9$KDw3(8qFiyXAeu%86`;P=60$mOVjJnh0A&(qAj3O zsU@|puKi!=0T2V=qLa1;y@H7Q!}iqJM?Pwsk2B=9>SQC)WbBZT0T5yN%arOtUWs`) zuc$G+esJoF^mG_8x3|A=*MQ>LGm)ouR+Coepikc`*Gje}8L)G_whx57x`HGfsh4@p z!MWSe3|JN)B&1v)@g9^LrCDqN2GtM8xm-P6be}x^r;RCgL_829sf^Pu%gsUq8e~^R z9X9@W)B-c(9Ds4lz=C8uG_TtR&k7yT7tudw$g(OhJ}x|{1G;@o>T&~p2}g0^ zJZq!dtcG7#_9uFFIxTiQ%(sq1y6W`N@-xB33o4b^0k({|AnmB+0?;^Z0SS)k>-T4yFQ(l+FvRrJZ_tG z)D?sD_VziDZoa~2WbAyO*{T?wbw3c4$3U#`#e+5wq_uhSY4o1pN*TVL|c?D#usKDgAOg13AL8!HlR9)Dp>%H z+f3=(s2c0|!ugrlh_lJBS5!C-dGF2kz;+gu9$I0PCYtG^-v-t{#~HMw?jW&?tL#vU ztQ7USi1u1#3?FEMPu`KVwaIA3GX*m7fdfEr1?&0fb<{@3<63*1c~s|q#Ot~Znp+64-XYA0cOIPaLse|~l@SWVmi4d4{on5&GeEJ%sn@k-vPP5`Jp zziWWuxfdReEuZ}>Y(LH+F8Dk^wm+`90O-pAKK|P07Y4^U(DHrgZHxl%&6G48o~C5?)i4Bn_8+5867-8VoT0ACCq3equuQ^5dPG!**ybUW6k zX(gUPgHq!{`zm5*>S|K@8F=H!0X|219`Rn)ZPh?-TD+%!9#q#Z37Mh~@>;50g!1{T z>Q9FRVWk!@5`x388TOEyp*=6x4)I)^L$IjQM1utj=NhS7^LkR^49Z0K;Zya;g&mM~ z#_8qJ9_#SWODU0wexDxd#;e7YXh5JN8(|k!jv~_15z$WKIcjllEKn2R96!F*_i9(n zXo6jKMeP^c;BY}p*qj2XwXSV@;JCg=r`O2twW{y?gr*MiCWqEr!XI}0hv9owdbAI$4zvZ&(yluj{9*_Ac$j!zoo7rB% zY_aO0Cn+f&OTNz&Ep~f|v4vI`n%8?HDFvILa96GwP#4eF+j1%;s*`zU$3B$(j+xXz z2*dmg>FwE^TdHg5F`jI0Dy9W^&BSq-EXz?1KgD($t3BNc%PAF6!}8FBUE5f z@!-b}>5v{)AA^0B@vjh2*Wi_JL_6UleS4&ndC8X3m#L@6 zaFsQ!T|x@`e1h>O5m_B}+RJ`D{n3F`!g>W}JL#9AMn9q-O7~=cqM+td@MMoSOkrPZ zXBrT6&siUQyv=&jF3391FMP4IQ@aoO$YX!BMZS`McOVKtQ+D=igO+^t zmEvxXiMI0}B#e#mk+?l)5-Q1Y+?W{ucq5g%`GP}2@X|QpVA8f-szbV=));!h6EJLpAYXT9GM^upBq2y_q#=``l3SfUa zgOa$hrY04eUR-M{7|Nly7qfs{nD$a21nAf>$|XPz^0_v9e@0@{1P9Z)=MQm_RWI(B zBLAZL-mGLSCucH7kzLm5*cBXP;y3TR<6(-`)Fbdn3i>&*53^s(mdgYBWSXqG(@T^PRfw-*3l&NRl=*4TL0~+xtrUS zevHFttH+`ap_qNL*tlZD=e^&s_ZzDn1}s#gO-KkWkx{lwNxp9EZG^fE$s!L3I>u&Z zQ-MnEfG)=^nDOEGO~!rd00j%iv-nr;(RQL}nn)CL5cWq`WYWasfHy_DlkUyQ9NMgQ z_$I5~)Gw+jHieP7=`_6Z?J!?zz~$SA9FH7ea&y6yNfrf)Mml%DH6AzQ2cK9{oN;v~ zdG$RyY=bqc!vavVYkZZV@J-u`O+o2 zM<-(O5pIKXD~?4MU#ct~e2>?P?WmKomv2c zI1Gy@e>$n64*Nk#r6_(A{YXI6cZI~OmTY%mwyWR2DxBy%X-UUW4q$S&;c`B$6)-wv zE72^E6dJ&`98II;QxsQQH|gkX;nIwM5{nKnOU(!RH`txS3y*WutH4K%BY zWl0gzY9PU}A)Sa0r>^7psq56?wbld>BYDtpZuWcH2X}F&BcaWSlg?o_oIO2VU$KkO zsrT#H)Eq15)>058Gf8s%*kKP^T`d6hEVbHHng9t`uElu|>!{bZbvtAc_;N(SsBbWu zR|tpDJm<2cSJ>kZJ3WT$!L)M)g|2XCcm}z3B(+?2*dm6MQjtBStI-7u&rZeC-LVoT zY7&Q<1|ho&M^mlcqSNO@exk%`51gM?EZ^>jzB&`Yf>Fl~oxiT$b-xmWva zy>kQ?3DLr{<Ek6fr z^RMj=*x2ETvQ*TK;KpEMwxL3W5+Pn$^LPfCIm#q}sCl2u>qy)rj;t0*RXC=xPq%z+ zI4i+mx?PfzcnNQ^1@U+-OVZ;9zqF? zcBI`*xXRb)P@m0XJJ;^}utBACt~c4+o>EVOLp>bxq0ZYkGud*9i{{{B;${nQan0f3 z;UA#2j~_qQWM*cbeErp2GczgTo{``>x*_((%IStu zIO(K}ACHM0koG3DQA&BujPTl2jg@>;hx9g$yGzf;V8UIbnH>qU{6YRNneQQs~K`sy?sjYF21 zJ?Ue!W_h`T;ZV@4@m;bbb8u8P+StQB>HC&L3v#M96Nbn0=9qk=4H_9w{i*H1$)zr- zh0i?Z>z0J_!XosM={F?~7f!bY2!Qz&FD%r33CHMUmQbAp{OW9BSrpkYBNHu+XP0cP zbVl(9qiOPtZ0=%3VF~u6q7mp9W`-o}7A&GHZ5PS1yrgNU=+?SMq@l7zXa7soJ~KI_)(2iqyEs&F~2>cl5~&RR%MypeOpZP<4V6016! zpbU97y^uuMOV}6jmMXQREzZO@DfrB~Mq5)CX?}t?-Gh{EXwFd_`tSfR3l_+xG4eD% zoGNNbU+XF};a$c!XtQ3E#`kC~{KgZmb$B7B3>lk-DX|_z7}-@T28(U)(YY*!KdQ32 z5U-5_q~O#h+7hIb)8_@!JTOkREVl}2ngaAfpWB|5jm_b>q-RV`*?wer*!~C@$jZkB z;K!<;f4Jj%g&mvy@8*D?oS%>YA&{7QfAH5%`58Ae3iNJ2GTj`P+VUN zk6R@)H<1{gy?tie`A--A`adxh;GP2PNjjrX@9LpD_M%jy48I}%+cWb^_;dZTlu9^F zx-fY!m&C@-M=O0wgz#sE;!l71HqF-^CnVSZCi(x9ViJzWrPODw$qYc>D7!ZcU$oV0Rk)xX&UKnWk+CsU;Kljrmg z`s)h+Z|S14fqYC>p2GD1zT~Iuz$L;M=s3CeMX3`-|E^uvLB?-4C9Mo>(eP-F)phdj zZ%X;w$H@EuH46M3+4uR^!1a3Pevvba7FbWS%@NLjv+K9Xa72*yp^xN z%k#U)G&#s9`B5XdYt7RrxhK_cFn?R{zv|w#LjOl)Nr$S?6$5Fgqo4c_)%e>|3V#O# z4CFSepr;U~oLa2-cb2IQH-LH08v2S8<+c(n(VDl;Kgsjk|Abk9+d|1up{jl&nI)To z&->w8^xrQ1>l>c89-VbC%V}tfypz@tU^~3~`-1(~F8urp`EJ-t$}b88S~6kM1bj~% z(f-w^p5p*!0;OfJJfLkH*cs zk1oFXQ}F*wLA-|_k||~#4v4%X!O6UT!~fOa_VTZb_SZKQ`>$#><yQ4G zHa(CbD^&-TDx=?hPn3C|dT(!)nn}JF(HDB^|1*62bK7tdkzGGuhG^{a8Rml8saPaF z{UV6)gMTHba2h{4&X(e)3H_lZ9XgdHB@6wxH(E8^7z`ncnaJ#wI(IXE)B-=&qSzsWo>-ooe}*hIo@=uYF?Pe zT^ucpXLUU&h3g6{L3v6XjBR=T=)ZmsjxgEym2XnX*1z|Q*8sRhgUIJ)4u;eHjS)tE zCqof>$jTADUjzx$7E4SArPGV6ssgK#UzPRl3iD9uiTi3FZ}-G(Mk`bDJZsU#W03fD z1(8s&)RFf4Ucg83nG>Z)>!o~u-P!Lo!hYy9lNBDZc$w+XsPm-IBlJCyZ{?jl9ocdc zn$?92r9CWCgXH|ffdja{FQV1?mL4exV;*)&)tby7bX>iCER_7ANaoP)kgM>ouW+}oknOMGa?Nw+MKp3&%+Ez5) zfXXcA=~+?EG!ZB{de2gevUWDFEkm86%@XJGqgmQ7$a=KQnmrXqK*%PKk5jy7r!ixx# z%bfUE6^)0RX2!|(-gW}^J@XESm^qpH$jnYR5UGE zN<-xEm6FL}NYqmItOzpzXXCV)eiFEcKK$A0ZYo^2(KEw+56(PZw=LoP;29!xWq+xJ zP5h=bfHzufVVQk>(>cD}HqZ2(LgS(4@zbu}-Uxu{Uj5+H=J+1LmzOHU@awp2p!oj#{$1c!kYvsfAi6 zT=1rU*O<#k2ELk=3TlBmV%m+$eg8_HHraY#mBX-AM(sBm1u(D>V&i}&IKOpG-pF!c z{s5mxgpPQ+GGag{nT$=yOHR;h>t$dtn~mu+b-|MhiM5%M*VRq0@1i&m$3kv?)LX;O zJRlLl&;NOB`rwmgNDr!52K?em0C1r);Sho|!?lzP2Ba>k0186!>B+=sgG#Nu=Mfa& z50cYOYaWjI3EFx&ePfxdaH=0I)EPs0(6)N>Bt1#r%p*BrY^A+})MaX%>W3|hER|KCK6C9x8FHQ&e^Ip@+VF?v}a@?>DSP$dzmM-qnWOJG# z-Cu*AUNO4>ltr-|Nz(qJn%x@Iq~w*ddXi~nz=M41G0q=fZyFC!cmq|gf~TJ#Sv@=g z^=Ou$R05rioOzS3W`Jh1nTlNOg>g2!WC?llRJ=3jF*U7})Q5!Ri&Ge@&7OUpA*(n> zU6sq{qdGlU3dZS=0#c)xJ@s$mra62uptaN2C z!&3>KQ!3Xzb`CgP9~Z}G(4zHZB%Btj=ZophmmKQWt@p`=`6c(AWS#e4z|a%9e9NO9oq5dNtISZD*XaQ z^_2h@?_~_>rvuXRRo+CQ-HG6<9y^Ps4?M?nCMkw;=LM~kc8K>ROHn0W5njDcSsif+ zNerJhb7Ww}$(hsP#22UvuDUivoL15EmzUs~f&;_Jgi4@@gl}I{n;o(_szaAa1>z#I z_3U-9xq{_f<@!zP--I@i`Bzz6_qniw+c&654CEkiI8fKn9I4iI$+Mi_0|vYHV4N<1 z3Cf&XjW=A{TX$&DjR`{qaOHl$xj7`z*i&vJvfAy-uh6(O|a@G-Ylm|>NCG9_>Ywk}XhY6iU zthZ|H>;sG3xo)BpO}*Vbd&hKFr{uuK^Duf6A+B4noK>CEsSPg)vtZ&aA9TY^syV$x zXNAmv_%JSad783?(9ZZ8YbADyq zkp*FBves>}gNK4UaXzu8xHcdJf7|R$hs}Rn*1)ks58{G2ZH6{$l=#}zygt*hkLlor z^%4Occ;uvBlZ}$b{Q$|9(AlEaFe2z+rCo4MN?Lm1D_LmrMeq8}je?y=8l4x@sfZ{O z-Be3t&yXk(n$8w%;*b#PGBEM{9GJz%07+_OIVKTe3`W1`!aYwq+8pXbSBW?CA(^Ri zzI9xtESoyxP1m&f1vaGS)sYLCyV#W(ve-D1@Ry11HmmE*s41y7z!p;JuYVKJ;fBcs z>Y8c3I&#$7=N~G4=|;q#51ea)LETLyW#w+%-gM1@0)P11OOeH5r)#={j{kr>{@9_Z#{++*gNq?ReQBvNrk+i}x?(Q2G zdEc$U+Y<3&tjTUC8*0g9(Lh7frw5?v090cbpcg2YMg7=MH65URRr`)+Y)b*F_3;iKbc>K+ zN7g%=n^YD!nGV_fz~<1vc}|-s7ZVRb6@u>VYKLZMETO7$oCzcRo@5k3?}?9{PjU(I ziO@|^_a%Jhbarjy7xuFDQVecn7_{)|8g%&fGP#Hp=6uZRaa*VUg%ga<3EN-^f(Syq&%_E+~)bx%cWU{@@K-&AL;OHz$XMiWBFjM?F&lZ6}lOhU=Lmm>)TUmo(DTh?lg^!MC5q2XmfVs0N*1#>Ph*6)#8t zIFZ8!bG^8xor#r7m|&$3{g&&F+Ll2sOqyn`F;mdDA=KCPI^Ia*zY|qdvK}QNa`y2z z7i>j`%mE>)+h?sr*k%sq*Q!2$N$7DqyN?6HsoC-NflFQT{>yP}qMV~z#bx6C-ogZN)e3>3!xeOZ5=*XJnhc2nI5$ot* zwM@_IaA0fMG(cZ_y?V<4#<(@`sjf$J9E_r4T7^_Jud`ZO3jUa)>+u!=lxv4OG4e9S zeFanAu4v;j95itts=5m8h6t!NM~;Pfla!i4`@SfSli!D25{2I#kMB|@2rMw;KKd*| zw)r{!g*+FMG%r-?%Sv-{eb!F$>6$uh2+H#?#nXoa8r5ImiU4&42|A9G_J!EZX5A8H z+~6VN-R7AcrCUpxnoTOdn`H3X%Fk+8n40h0uTh(b=^#-W72)Uf})rXS`ey+{AX zz25D9PA$2Za0^tS<=1T0@lPDiblhVc7%h&2_~dqdjHgb=FtD8l;!KQY1h`I#@uea4 zJ24i^!w&LJes}CmqJ|0|5(Et)<_zW7fzP+4; zVmV-hf>(b;WG_gCWu=&ixtxdF3+oK&9zf>G<@K%HvA_R5JlZnaT>q^YVOcBO)+hs&o41I zSh zO;jrVVe3r48P>-W$UHo?<49Cd@<~AxTT^hFf+@n?-7|w$0A;sjqS=GMmmg;4s4G$~uigX*vYO0Vpo|(UpdbFgM2|hD6Umh8BY>-T;!UlY&oDygE2EII@6=Tbn&s zB3Mvz*08K5%5mu6ynPAAhxB+#=lOFVj>B+c<{{RrRvj`@7lPAe`hI9IRp-h{F>w*l z>iWneL_D-lps+tOa?Y*_+gLvWeYCX18%a$^4|5OTm24U0GQW&KKP)Y8{^)fn*VWI| znZMs^!xa zxdg{u0*7%}q3qvKKs7xRAXHuvy1It3mQO1w-fBFFg|Ew7;sKW8hwU><_cGJ1%;s&@ zm2tv2y#m)x(P4rCqkE=bBLyxJjk5_nU^l2G#itcv;V!S&3=@aaXfSCG)q)N#b3{G> zjTuHB*6WQWsdt@?S*;}eiH6^JRjhkddaN;7Oo4?cT}z_An}n4Z=n-6Nk0Qxcemd0T zli*Je^g5^$7P|#~!gBc8&Fn$Fc0Fm=t#r5<{EpY0qZtd0b z@z5f``7eZGm&iY&!c&UedPPzKz_YO1G6D#+P52YCT^|SMe@eCFkkTY zzb0=ALM@nRVR8!*rA>{4-q&=Di}I!deJV)@ubfi#1Zk@l_hDNPpO$!@jOj37&zbdW zNJp^QD5yvm(7#`KaGy=1tKS8B5 z%HKq?X)EEL?!-3jL|RjI_AnvbW)BwT(3~3=nmkY8Hu89cw=*@88iG+ZwCyf8`WMA} z?#{6#eK1b1+3_k$B&BdUu9p>bHELkDQkmDzV$-g6ZUIex%c4(SnZy0he!C#zefJmd zGTQR%TbioUMYU1kV<3ov!8x6?%lS_i)5zavOQm_jn639I0WM4Sk=d3tdT;yW!6V z`2aG4ANu@=@0*qu%#dDlwwmb!$#U5q8Ab9mJI6!r@B(N#JYwlK-Mlx*j1{JSkNRvC zfkrE@MBW~k?Wrw8(JSU22FF`n+(cWclAId$(6X7=%zcDhUyRr4NtCKBhDPTy2O&?W zMCHvM5Yx5wXAid@D%@1Mh-UJ~OUjr$fTJbU_%hEpjTIyd@dqrJ!ES0DefkGcYA=U~AgSkGiW+H^6NC)Z82G4+`Om{WZ_EE>-Q@R0B}}o(c7J6 z5YakVyV@S!CJ0s|%_;T3f2a82CDi1%$hBick&C)a`7TCELbxu5mimQGp z)Q=fcJ^8eoIFaZyv*DN3xHuzo7?^h5rP|BAkpQv+Qp$OIG4*Pyjn>8&q3zEa4K8CC zq{lbycbv9QH&-8BM8E(3)(dz}UDFN{e~?@FIDZqM7}8R1x(`RsHYE$h8hEKP3B40E zq?e@wo_jgUG=7#vKdwpO>}dSS^=*;3KYTA5-lA!CIh2;G*B{^Lk*PC_y`V)56*`fc z9(fY#7(k9WWsk;MbDj?S&}_l>tQ#EF4ErES>R=wUBP(Yeo0griD}uA0q9D8LF(9!h zczg52cfvHI_84mKJl}F`_!ZpN<8GpYZuoNaT-Og>@N~0dzHlJA*?6GZCmh-NTSs?9 z(;r*V@#f3z>-;WFEOHZ~r}{OCw8pk0!KtRI235MvwdK6_Nu$!=B@aDizJpEcL7Y8X zJd3S6{lG-SSyf)K-e|=Tty0^L>uiKyjQ^-i%Mc3myx&n8`uYxNr7T58fu1#%XRd#F zri_5SPXd{{fN&wN0MJ(oubg!QsN(ggO>W_9WtN#>>$D?&o_#FWA61YdvRknJ@-@a7 zbmj(HYMmKf9e0QUEdSj|LcEBKlG4yTB50!Z;GF>7Y;=`GZsSCGz24hg;q&du$Q@!+ zB3%HR1GU4S_9%=}b;M8ZHol!^8vF61Y>pHk4uo5it)E3YO;WKwJ*U~ zJ?R=xgXkRa8Jsxt;u02RCG?*+A6c7-4xO447^eF+PR#nyea6wV>)>*WUHojlVhHBPRa z*F`XdDKx>mPEjvw0!w6k&nh!bU>SvV$Z!K}(M)fqTB34H7u@%lD2kU( z*Uncf*<`OZTp=`>0>9UBIDlbStCYKO=q5%58E*4Tz5vx#B_21&TmGlNd9BgHW_N%BVz*$V2L%^c?BjO{AtfNVx?w8x zjS=wX?D9`M#$WR+hQzf=V1sG$P8&L zY6g#v8g5LLCLfLL>>n8Vp{o5{#WXc9D*$9)I)YPG+-04zq12dwEBp4meek0Dn1+FNydOWIu1mlOe{uU|Ey_PMjz zMX3}i;joxg*V{p`KxMrRFBaKydmm#E|5WX74{jqYc;7g`oBi$Jz2QBKFF7gnQ3e>F zkmuNTl@j4j=1vzSGJ#W5zu#M{d15yNc z4>S-cB`jAp#ZHu$eY2P#Gx-4iPD?e>&IAkb(y_O{gI!VqK6E`CDFKQYX9cLHCz~b| zyyKtcWK1Tq&6)?UreL}?p8@PO#~p?5rr+))MnqBk0ZUV7qnXfn&`>>c3INke%V^%3 zl<^$ziYE8zdLbN4ra+6@4n<<=&`I1W7V0i4;UWzqc!FMD%iM}v-tu+GX2if_3^iPfE0ebGT9w#%@{oZp&NgkE}WGC+g zu!+`6da6c8n6;Y}CCIf&FY8Z%J>P2q`SkIw{m}Bjo zv(9?=gM(Bg|CIf?IZ)FT?rDf2a*TS^zJ-9Aw|++8%xtou$d)r;$20zkjpy!%%495; z;S8;ZCaL?}c4?0tfGMDp{Km|;;WKEU?Qf0PK4#Q$keW4Mz`(0nlQ~E>f@eCun%XfS z{~9*ch~4}j*pxBm-7`oHJJz4wJW(dzyNI)wDWNG% zzeO@Pkk4QMGqtd)DUVuup{d_}OGb;kK6mVWSLCed2&B5VN`W=sMtcatR@xH223DRDN#V zy>if5c)B48KF zmB(n?6n_{|;C>M@pBlal!o6{oapRtTX!6|uaL__{05MAH6$xtRr$*x_r1!7lQ3q;7 zO`UY0$6#^m8tCgGVM0un`dow}!P}J&!)0dVUC+WTg%T_|6cP+7ddjiqX*mk;FoF$% z3VjJ$_cPMjyyVu)AGpjt__&5q=5qra!ui~yuXv(e<=%rx-@aON;EaQ)`zN^_FVtrO zJW7SU#Z3m8ug&MQ>f$VQ+!_kN))5accgWWcC>vEVd2%FNQn&C-KBIP+p+5Dn0mBjj zEODfAFMK51Rhgb`{7?viPQT7DA&BQRC$kBdyvx#`eawpESAjLeB;fM5PDf!C6gstD zY?UGZZwV`6Y=uCc!?{9$amq7OdRnz_`NK0 zhi?HA(Pi)H;_4=ik^@2pJv5B<2JNXz%T>cCLwZDigAbYh2_K3jqylxu)!Xc=^E>_k zI_xg>AuY|u+zYq`3ABr5_ zQvu)Wtf{!ANbg(N`XAf$vYocxb26WwLc!q(6~k2}KKpTU4VDT~yO}m4qPXqnm>V)@ zf^R5kS8|tK;7^2BM20t)8$V&ia)GI0_bj}Gred?I>0wU zfeG?ZoioGjklji-R}E*f#|}WJgFTR{PhRMO0)fGkmq4LNRZKy=1}4IijK0b{4(kc` zwRzB&n=bB)zV+_83(=VlxAVH3(i0B*R2xmiJNo`=R&q14A7CN)8+gt1*hUByi$gZL zF+<+{-YW}~7Qsuk`Lk0ho%ZXX(9mc$<8_|;XDyzl92tFYk4l|F=x%!xG%5FR#9Cr{ z?3i4mj(Ad}>1-a?zU`KYx;Jjq=J-c!Uz>IE$W&6iA)8B3^;kW)i`DLMR(0?_jQ1xJ zM&X3sw`7Mr!ym)ekKNuT2m3jPZ+lK8mHH(841_&xd3NnZ*R7m$tdD~?h&|SYE@CVS z-x0!^#N{kl1{ETyHAT2Jn^E;%JGOU?Upy=kFfIe5a78J;+eW z8<8A@$K@&U$WaN{r>^h5Yzoq`2o0%`OL70sK!iqz?Ly$Q1v6A?+T8)QWlgx>nUp01DWa7`?? zmHN_$+NgcCtC+Vy#JYxl1#XTLjKg)VxT#|)M#Uo~^KNBgKKWRDnIBwjh{(4*P-ZsH zTXA9YOyI*1%doH#Uxv+w*kvFycKHS4Iy|9KKt4Nqa4x~ru=}k>E|IfstXP}R6I`r) z#g%N=)z!5}KtNz8B_*{N7zi}sprh~AyX;iy^ga5zYD2TPcb0I)k=*`3esBZcgWH!c z2AZmfjEanmG`%#?^hz8;EGpP5KpG}hy)3?r$9oi=o@n-wvh*OwK$9+nNW{;ud69@P z&5SO&GM-Phb+mW2o!pv~;9&UKgYsv=Er8OyLD7qvvD5HgcS>kz&C$D;vtO*L4UK@z zyVN2@o8e8`ya+R&H}>}X6tvG?4j1G^tFWmyPG%QfrFUOMhU>2tW8}ST3>wYT5G4ec zD5r0o<-3;?;9pUdkLRzVaYShv-%iyFKAjFPoUV8^ZZq=~7#-T(g2u5+5cQ)#5WWiE z#7s2woz(RYHk&JaDdyk2H)hVBosc`rvJ(8mEpYIIJJ(FYzs zw3R3gb_6xb=?QLUUvmL?W?0VdrK(6uJwtkNL|LT&A%Mf=vYnU~q-;r2- zO9YJP^XtjS8xoAE?8bU;Fb>OoWx*wxa;n>SI2B)VmziI0!xIR~$77SPt3nVHp|B_t;&Cq_p{YkhwHp~2() zc*T0+%aanNENNFNR7&vowB^S0?fPT!7&UuDmSsr5KeQM}ad`vHi$){I+NwBRf?XWg zgyiQpv;>Zg)-;bG^G6kp5lp-n{Vh~9VqVhqqxm|o4s*EMF7C;0CX(HSqgR@?e*(^S z4WZB5kj6&AM;>z+;*M>%1mLKW4BEBr1o*k0vr}`g#5{CJ<0K##5EjzD#Hg7{YP7oDD3@%b` zMfr-?Z}>o#Xu&$eThAY@vlGu6-U21wS#MlE-vPl%D(cFmC1qwcDHTDB3is12_BlD}HSNimxIuI8nIc@2=ZhwNU zobgF?ddGI3oKo#q~q{WUDcfdG9_fk*W3mVV|}f7ZdDBjZKjW*LvM zPoB+N(;sxr%~;Z>Q3%elJ+uEze3PNGua7NW#r}JPIza>nkk9`d#f;R4n$fyudex+t zacJDRe&Gm93PaiC4ROh}#Vo8U6#nc5SY%I`pL#-!=P1 zkukmc%>x!b#Tz7xm>Q$&s!9e?((`E@8?Q+EpsPqp2gE8OtFjAI_82O54c*2AI$*;{ zcxSNVRl3(IUjob}{6eeN1dfP|KawOOvH*NNesRe*MDRk9fXgv$eel8WJ>H!F4B!Jj z(qAR}b6IxD(^@Dt#zqYP)7y(@84;OCo}f-CC@7>y*&^G~hG(eR)zcIC7&kHs;O2+eUVaM+uv1`;gekfFLoa0Rx?@R1_vYKOX zK5p;bm3e=sjR+S# zfU>Jranu~1Yi<3nQ;>>GXsA>f(G{TYd2DPfV;pn(OcZ$~?p^fjNb$Cdc@)|>S^Cvf z6gGavAc93|O4^r7$|nahr~FHwk9eOvc~U_<@hcOA_ai)@iTjz`B9GI?v`MzDd*7>XU{IgKrxpx3O-z)21 z;gA1(H4=*c6$EHP0QUGNLE2BV_>cF2^9pFvPw$p9`1QX2@#=TN&?|B3*HXxTGlT!E zP3c$9ph~UT@6X^r?ni(&AdWt4#$owi%A<0nZFF3pev7=W_2uvPQA!Vp^Z%6pAJ-lL zr~W_X|G(7k|9|E8{yrh#_)mtJCi|<)0p)pYTLha!r6KbSg{zE<%v>=;U_lgxUEeT8 zsgae``h?>BP;(~x=Ma6)Z`Qxx$X9P_;k0gV7kQq)qdBe&9}T*9Z`Bl8<2yoel+P6Lwy*T*QNig<=!f5bLb&iY%b`MHl357u zZ{{F~F^uiP-v8{k6G=E6*;ThcMq4{I3Yu3C zG{YH%S(Z~=x;b`6`w#LIqEoa_AvrYMuDP|pzi)Uo{vaKgkt<`b6ajMjx*6@*98cX2{jH(P~pKGR%r&;S@-DJUr?HFCDLW*VvWi0Vp7M!fi3 zdaTRgO@$0nk^$8r1#Wl_?p@xY3XG13gs}o?{pUU-Rj}_^4v#^7dn#;B*(Z5y^z_q* zPed!`&wCvK;^I70Pk=s1y20n=-=1r4RtCLWc}bjk%WgH)TF&uj^d5H6-;<}BmZxa_ zId*#bV+hLEWa?x3G9yljBd)@TC@1eNK9?>ZO8Vv9s6haTUZDml+7H<`HD3JlbG}ozRD7D zv%*zZ=2jHDsWNUgVYyXBO|G24nZKs}fvwr-Tz=9FN(T^pV5m&K@#N8MGEXjVl!u#wo%@I+~NP8Yl$!F=JNxwe#qnt|d{JhX4 zkrF#I^BMvhdntM*BYj(UoMx!MmTsV{D}02Bl;SGu8gqGgd7xDPf&+{%`}Cb~4Kj1{ zL11rE`B!(Oyr7Q_OLevd!SQg3KcPrn7qiUT+fbKyhZz~Q;_wu;8S_4iceBfD5_}M! zQltfl5FkK+00BY>N#3ycKI<&cUf&qs`|lkigE2>bkU8gb-`92B z<(bpCEvUZUSkdZ@fw=c`ol*-Mv9Z@#3$0==ho;z`!!spH097p{txp3I*81%)QeMMw zFN(pZbzue%#m;)3ldb`TWVJ~T88jm=zZr8)t8?}iCLeipuI4wE*D$j{Z=++<;<)vA z3$xoBph$jfeHY#^xW>)9=+X3Rbtwd~sn@uQcnj^Mz&;i%$2jrp1=T9i>libvYr_ z;8X9ySC7GLT+QIao0+4uI`$2Wh4m3_Y>UScn-dau~9=;L8*$y7>u zv+k7h;HZw(bP@COl8juBdEgNM$d>_p(?mX5*H`scD?6z2B)*B9wJ|AuXg$EO#%Mdd z`B@1=&fAz}WC9N!y1a8KpSGR?e!ThYdBuVSjibS&&myXEr=N~E2I^e`k`<31MnJ_dwoNRXAFY@uU`-N<6QAm3VV$d&gjq4pWkq5SKn#p`SP#_K6>TWHQbOc1^ttEg4*;S%$2C$ zg&%}}7(OCEMziJ7!yUn{Sm)u7XmwlU$Tr4*VkBJ*OWX5ZEo8NoDTk6L4#ZQ{N1DQ^dF#5aoKJ)P6Z%d05m(98LXbXwocH|Di^9*$wMVb;FADiWwqGar@UTSOg-oVlVst^Z zOLfJTY1+fd4{olmS`vzrohMU#m!t1S6wVF^OfPKPpv$9aAI9Z(zTz#Ac%xnsXBJq# z?kDQHlqBq$t9{{RUiOXK^0syH*K4h8yuTXTAP$SxviW!#L*PED)?1oiOuv1jy#K)Y zc3zTP@b}?L=f6$zU$b4;Kku0uu{nX>P)sh!4T21i?-ioY-DuzZ;RY0H&6IgYx1FF6 zkb14~;Pj!S>!{f^B7RG={KON@rAwj8Y@-}OysPyL-wMbE+?tCnST8T|FRa+sB|HNu zKcY~6o!HHOj2P{FS}UH=h>(aOhlp7YNCejMLEf;G-MmT)^5Qk^nK8#C-l+=Ocr5(o zu%Jo5Kf2@y-y4#^B=SAWz@gK@`t`(Pg+E0Wzp6(16UwD67vJ=_pRlWD^Qs=-P85yn zt!b$cEVI_IpTNCr5;20)ym-vHZ`mCj-CA7>I>MbTGRTEH*eqWm zM8XOtx1mD8$u1aXi5l*rEK@jGw<;JbWa?O9gwjnZ`yKBUS(Ejd_|h`OG_!bF6CyLI zu=rSkb3plp#p0WLQ%K6r(%QwCyiXN&dGB3nmg=fVIkJ84^(Xx0Pa#NiTCl6T#K~G} zLIa)aZG`JV_k>WS9mrq6>0z+LjAiL?SB0$8&7zA(9=NI9)1d{rC_|^sG+!+Ul8arz zXVx0&+@_*-T&I&Rmf7om{S7}J0e+g9mh2kzxJKCjjft! zKs$QIea|4cG!Z|xzVKe%i6UlOKC=fb1>w7`Uli1i{X|r0tK4#581_|#^`KolxRQew zZyH8nT|3n07qLnJDp}W7oBP8Ts#?f*S$5VoRHA2YjCJun=&IvQ?#yX*0{9iAeWj$Qn8LxwIa$sduNF#DX@-%{#g89XQW~!QYguvrmUsuFf zSC1IF?k4aZ+VVT;s-}wqL$XCI$ChoD1jL?xpLrFa2dWh@;8ktLNwojyRMA9q@;r!B z7PCG0@@7P2`%uOH?}&Le{(&N2FD(5K+EMexcFz0hK=C=dTfNEry~g(%TnSWxt~vUe z(~^*YZ>-XbX4f8&cR>Dg*g$9?Sa=@y71)JYlk1EHv)-Od2F?fg9*?9zM>1C>!EFLr z?&HW#M&Rt!w@b*_$`GX5QaYn;18*QE8yiJxU+Z56C%6d2?QQ+)D*Ib zGh99y1i`QAoXq!i87g=xe<^X;p2VQJK~&~gyTln_&_)~}ywP@aXfmv;AK==`Oa zJ^1`ah+t2OG9=~F=<>A;XN4ZK5qFc(4en{_Hagc9iGna^=8)j7@}(m@`#_!UYs6LD zhDs47E6{Xp#N-1n%Dt>z!HKasfzM2ycH*$83*1f`ljytOR|2Ti+Rj4F@787Of{v$D z{EZ1qLcSLh8sQ-SKkGvCVSEyC@kkgPZ_kpzN(ZJ+yp%whHJos|u25bQv>9P2x;1`z z#1k&>Be?#hQ~Vc#JL{(dgx!Ccxl|~;7^QQSWY3>5bdu)Je^jM zBW|0kCa^4?cQ+rDDg_6da3>Vr*NA-0Q3_ONFy|0>`eJU6*K9F~@?sO0v2W+G)NPIO z_>N8<-X5w1VDdIfxFaiFD#VGkzHp@Dao18r<&JH}pJQr8yoCy@zlklfjtT9!^JBMi z`mICcM$nan{HLET?K8^KJgFw|{4mIT#Y$sJyXcE$lABbebZg$unM%0Gjz)ptZh;TD zQ`98}dpVwmP_j68uZ}}NjB1*D&Qn2$;9u26Hs&V`jYCH!7qeb|xsVQhr7qQ{TD2a> zU-KT&;dO#FY1dkuRLyX+W63hqk-{Vi`w~CXmbN20)Wmf74r1uZ=h&e=h5@d0P$zeX zy{4ln8=C@4w3%ExFOfTQX{>k_hfd_a&s%3JysX z?|zmh;Q2-DvPQFyvcG;|ZuXcCBPDDXWrs9K6rDHU#G{pQ)==WY*OqrdBs=Jkl;LjR z7BSR$d9pu;^Z_H7m?wFBG*g`iv+>?l7^vRFwFa;T;DQ`ghnE`FspkpUjA}j9`!`G% z?{DXy2keLZFh6N+bK*Le?Lf;IcX#q8?%OCBvh>(LM3ZbI$M<)#hQQ2B#asd`Ws>)f zE>c43jyqOl=Ka`1CJ@8l2EgDWn@j;aKMyYtL?fuVM1}zwIyZN+o8l?xxSFpBlnycd z2V1`zF{-BOrY>82jQbuf*E0z7WUM=J=IIM5gD$RU-He;Ttkw!%jtlxg#=x!+ z8Orf?KzIykyb%geleKC!+So)VRT6V#h{xIqKm@+}asuPX&vIL*5BArKct)n{+C`GT z{H3@4H8{8vy3byw`7Gw^>pNA0A5guK%Dg?*T-y)zY;}0@MM~bXybLPhbDA+`m2hx6 z9y9HMW6EN@jR&P8INnChR^@MB)+gTC@QBzK6ThxO_%6A4nVM0E#u4^~C!&yguskf+ zY&u&?K~UJdA;`w-n$=*zv=a}4S>m9ikYcc)@c)SJP;r${d&RRV;__Sh^09-dnK2#@ z&`=J^mSG9PI&rCcz`0i<0dLI*0<(M>o}0n+*scLu*d1klZS0g2<-^)5Q9A~0?}PSDH* z1P~OaOflIB5T3UdN_4F)mKh%rOTXlCo@m8N$+!}I;phrCn8@H>0%-7O4jC8)Gx~9C zJ2QYDe~BVk>4J@S(t`XCHE-l%uS`$`f7f>zVItef(HK{NY9fGql2Hdmo~=B0=e zdBH|G{cJMa6r``03Q7-Uu{Y3a1$On_Bh@qZwz1lQn3xfFJohaJ^Mg9SFhvFVVcn|Z z8$`-%GT6-*AukgsD(5JyaX*X{v_41C{KpOz7xD-80tjW%yFj=8_t zPn5@*O1*+Ch~g&BscwH$Uz!8tq%v2Zw=19yIWCPu^l1Cay<^UO85=Lz?>6gHsoPuP zmVg`Zg{D_XFzjr)rxoAP{S{Zq%3$sOruno4-nUzCm;;ayQ_D2{mWzlj0t~pCCQ`z&%*-(8#FJ9F?Mi zHeKE=krpa@Ruiqub=V46UjVLaZ=iaKi{!QyJh5psUC5)D_8foRv&C}d?#d~^{AP$J zPFf@j-#7X!jotH@r~=DwW1o{D!UnvfrBwY+y8jI9D=wN@YjGQIPQA$b&?v-__7zCx z#QLsEOkcA!sfo3Nl;dM2Evi*pJp67}qMm8Q&(u)n!2-@~-1+cePc0Z3ydAr=p12KZ zJ}OfCV0nX?HF~@c)B?Qndt{?~jb}SX!yt<4>fQ62i< z>YD=RrXWIV-})efZAQTPEEx@Lu(DgY#qB#3l;M4l5ROPsQkyt(;X4l-pmyJ$`{w@g zL-(a==narhj{kUd?%hLEjYX~nQUvYkN0MT{NE@#r=#>Hh=GGz9{!<~FZa>oO)KkR%Sc(|e zj}Q`qT2zN`1)-FR4nYm2k6GsUyW8e2Z}<8lrJNdJ3cdDu>)gIbFNpz$q`aTd z%nM2q6|RqLuLVWq=~dTQt(NQ(Ciiv`)E#5J>c6^tw3eSNd*Gf;2UeM&5Qz%>GA>QY zS5lVBJaeU6n%bml539rU!*ns-Jp8Fy-X7$Q6V)OGjWu@MQ1iEB>7!(YT^X?N1M`Ur z93j4V$xml^ChGco?^mn!+V_v=RlAuT$4lqoDD4er9vadJ0IKvx!$=`~`Z;%#Ys-*9dxvD-&9)xU^jwQ16aTn;g?I7jKy+RGZlHV8;d%bQr}^}SB>RN&b;DVEYizUtxK(ccH5KQ+UxUH7A_*b zao1)tT?Q{B2ob)zA6{*3HD2K&_SQhzwz$u6as<#|f*%f|0V<-YPCE*D+s;wu%+#LAyGZ3H@d z%d1{(`c;SMQ~=E9{?yb}Fmh|g=l02`8PhfD0Yiem*^lvtGk)vomoE9Hz_4cHNsbxM&$M*-8MO5Pohm)7pDZRo6=MrexW>9MxJ*_V_g2&xL-jC+c# zEFVTI){xj+>pZe{gG}b?+IHkZ%Q*#3FGT^W?3&izdUi<{v1XEEcC{iW%2DWkzD0sezHeTn26A1$xwJmHoI;bcEw)h^scqa(WjNd`*&kx0f zrMbcn6Svkm8AAw7Z4)mM$NSBRfEAU_Qi&E94(S7~7=&r=!O=1)0L~?nj$pMb4eG4M zxwF{xtZp}BI>!Szij4VT%RnVk)UD^%Wh1XfP|BV*Me zT)T_QX{_S>Jv2tYbjfQ98Ex&P#oDNCM+i1#2 zB4DNetAUiaL_6)3?GuSphkbz;D2H48I+1sJ{g$}0>qf>fCW!B|w&XZ5G}qSNSCJj@ zBy9K_eofZX8sQkvesgfx;z`-=z3GGEWT)uKM$rTX+~D#&X0B}Z{lrHJsDS>1)xph{ z7N%#}a$OvDg5H0$9HlV0xudTGyQEtYzefyT!T(`gS z9KHSCI97&$CnMj1f|p&qz<`?mtknd~1zO&SmqpGE{deWD9(zJ3)s0PCHNhcB-tp?% zt%fc<;)aA1^khxeGJAXK{*2A6Q=Yy5(DEx$?}Zq5csi|&fNp_mpK*Ij#jiaRz4!I< z&Dwlsbe3C2aRK8uE$`k2XkRSiE36Q_n<9~vJjCBxDDv#)eocJCR!s__BVr|3;_XDn zyG1FYEx93466C9RxIZA)H@Z; zj}grhzJe39mQ7ZZOl#8>4MHCm&8nniW`7h_F#X}ipKg2Ut*=wavZ82bhv|b_>E?7r z`=hptmYex8M=FL>#uwExa8q3P5$I%dmhJodxIQycxPF>_JR zN@P`2)dp1PV*m==@FjA|W^~C|PhZjc`Tjvr_iOgpdCV@fD;FQaBdK{zWaf?-%?b#K z>(g5zGla02B7=?j4;D)`%7cqhLzP8h&V%G`#ja?&Hl;YFpIX`WvS2uKm0%USoTv}zT zZg90(z^9H^2Vdk-%j$U_EV zWWsrsLTOv5qTBid$;{^*-$o3{r)E9DRrF#H_NEtI%@>EJ+bcw$NdHY2g?>|il)x8; z@%?GO%JH>MTniQ!XP?f;t=n*HlPGIaR&}bdO6Q+$Ww)S?*dF?jKxF}tA#(u>K>B27-73Tk53*XjU3p|&(v?D%AbV_ zJ>S2~^<67dPDBR7Z`QzhWYfe#)-bv28PN+;~h-n%YlBzwb+a!%F%xd(O7>O6(uEck&CQyp*kp+K{g}tszJ3hB9 zflo``bCiUK?_y9cw2kwJ7KK-`$j4?NFMTX`QXVE3J|G(s9#Pa>p2U^Ut`We65YRC} z0NnT(40mAj=nz}va-HelgC!+Y-6 z!xt#4ewI=vK1w!mvT@MJ7uk-RQIsyM^eNUk97dd24ddX(#*0?TD5vJ5eZxkvLEXUB z=j9_ZY$wf94&);F+wQtCiHq-$Xkkw}oAp>kWmHRv!*5yqPx@zxNM6%Hxp$X^jg-l{XT{fumhl)w zL^27Mxar)_dLmJ^5&f~FQSPX`p`jurc~EBUr6Qc!rhrR?;-bymhZy&0<0DzfukW?9 zsuNvXIO;Awu}{@aS8FZv`x2@{R?;*2F|YoMVI1E)!o^+At+=3;axFs<1A@@r1Hh{% z%<@@RWv`!%nOSN~A?-TGiXF(AuXJJXQqntDuP3Ze1f@|cZf7z)C&b>?Zxffk6xx?_ zb+k=btl>`+?(9I7=ljltvVZ@2qeGB8Xl>W6J2Vhy+lo?0OxsJg zi^U`YF;?XCP`mE}$5tb9#BxYm@(QY4mP1TsG^8)6eu%5ws}RVxy1nT>qu0(>kSHGb zb_nG2Om`e#Q_bYhpDK3jg|waNs+_+~f~=_t?;p+j99bO~8p>|H7#;;&?P~q?MX}lH z?onP^-1bT{VNp%AI0_B5JD%)28g)Wm3bE%ZIF4qPddKQJncHkE3JVIV8uBseS?wNW zr_Xs9m6AN#&My-oY&BRb1Z8i4JE-0V%Ty63y)O*)l>zN?PG@%!@I|JI)(uyYp?HZ+ z4G}UL^bH-b_m`2&5A;e1)e(pxygy+vDS6UWVuJS1(yfb9fSiN+Q~Us2MTWPm%{tfz=_9+5T`_vsg5-U-pXi@$HnZU=A8?L7zgUTN-xFoAb zMVZ3KvMD9=!|SuDu5FLNMaq<=wI)vPl$^VzEx)0`BZ`2GN4Sb@*_FUR8tf=dJmcbK zrb_vMZnIVXOvsIr*u+~dr>OSy6)|0D2`5J`nj0@h@N@3zZR9+Ttl72qrH-4O(3~K_ z(@i??<@);B4VU&mba){OPC)q8T6i|(^5|KuX~Pv8r3UenU_hQzARhPbL5_xZr?R?n zcNz5VRH4~r?VgUbFK@nPP^p+Sf(YSey_?4zoibD5xRYkG1nZW78Bh{4{C!<=IG!z$>O*4^Cl|GL@pv|(s=rWd_PL>5 z5pJ(v18-qBYSxgL={gh5NAla^)pe-tSkna$cW*a4KE2N{rt?cl);Uw1FdW~Al(+5Q zZODEACgOos=Bf<-@Isbuw+`UXpR*gz`vtz-E@-ocp&L*VWMJ}1dbEMXd+CtVy@o)< zjj`f&cIxNP48j+HRoZ2V@W_I9a`K{;xv#5Bu|huIw5T!#b2><~VZY)u68S3OQmI zQq_=XI4TD$&=-2{*}E##;3+%P#G@MgnKy#51l$~NvtSPOagOGYvmfn_< zu7$W0AYyy$uNv%i%!4s(@VYTc$%G|xMLd#_h(|8*hYK%w89HGbgfVXHTWP?*lzK&)?zdDttij(;Srs{55=D-FIel7+xxRpY*w@l zo;~Xxvzf8|kftB6Z>AK+Z8vqwp3eq8!FDP@WQspsP%3=HecohbMmSkkK08iLFwj+{ z=~t8?-nOzl_~auu1bh!o^gfj0Z|Jh_ds$=|u#+;4xh1=whkv;|+OlG2IW~?Jg|Ykn z0_jEq=l8KqF%07&fmehmCc-VO&^7rWnc241Wi%A!-vjX~u{yrlFa`b4^ApiB@V@3j6eCZTm##TuwIq#FmeYk#t z01(^?6)FrdxA+H~0xeccHr?iYE3bk`JEU+kpij_aNHXPCeXJd|Av2bH>vqNito#YY zt;^XLsmj>CumCS;OoV>+Rc8J@D5Sjn0c&AaqVZeH!C$_6i9gg5f`4QbY>v`Xxw3tA zgnN|^dMh%!&W=ZVMpfyHM!Jy$%fF~o3#-5Nn6FN33j^SpG#%S(TukwPEA0iBf6M2a z7GD^Op!9&X)7h!oOLZ1*>@lLD$An=^Z)fMMBfHPqrFf7hUlV$ayVF`%0WjozR+V;} z`@odbG%_P~z9%eEo>>hcwe(%HbBS`thE^mq>MV*PouWOL)?{n)7`7Vij#S*sK79pb zxl}YSXYCdzkH(HjNfNggzb=nFP`DYBXz=t^c*6Og*jEQpP9LIRJ31k;WEAIQ^*laT zO&n$I09)LkTKUcZWHhg~e``V7Md(IZclcP&z_VCrPFwNFLTX3)7TvR-%^>D{W?aR6g-kiwQ zx_twz7E);q^?xrib1#lngrC*@tGS4#VWLtcH1CkI5zd#qx=bQC8#(FlbUB5;U}Xy8 zOD8DQ=}Rr8b>(qgNU(s&ZDhG^Rzs-7B(iSZ&dlgilHeQBt!Ng}9~J5#ZC8z?ZG8|( z4?llSb%U@%%djzr07@zq&XXV7DSF*jnb3U>C zPDk?*ONJz0$3m!<-a$3tXv@KK`=e}sND&ekY;-(K(-?`1{W#<5=_9pFz7X=zcK$_P zmuBT~4W{4k#chvYi-4smN9s0z+2`4ST=IVU{KL-kg8hHSFJZUKAHeR|Yj3>_EQQ<^jr~b9 zw@$2i;C3E7W`WAD0xIX0k;bMB#xnP+2|6jSveOv}3IbHTfje2*IeFeAQzn#Yp4~V@ z)0^hjo+x@AW(ph)LI?2nErTE*p*ecr?}x&WTdAcUIij$d}9;E zzV`U*kiU7t1XL3oV)mW<2r~QZ(`GCTQa~YS*wUBe(fHt=%iq}OJx~jyh4SP^hOK`3 z<_)viMTc6NuH3c!a3z`%MqvAquDkklL~>VW&k!dnsb(tAHy`889W-+;P+9Hfrr+`g zBSP`GDi}Dqjd&LzljO}EPZx-8Q6l5nzzqp08;(_*)um%yKoT$U5TS5$Z3J|~1&Ulc z&djmrDqTq)8kH88@mke%6rx4aC2Vu)NQv3D?p0!E9-2F=am)rK({!G7M7+__gvg(M zbvrB9pqg+a-5gi@KIV8CQi zsh#g~C)kWglW06yzVWV>B`c(|IP1R;=4&HPIk7OW&H9xg(vnbF9{o|ibmYrl2UsD_ zd>eN@w?Z{t0bn*S(7}&stscwJv8Sdwq)L)EJ$UY#cH zwz*B_;u2+9RVvzcS(dor1lvq|^B2!1BWMcao43l6yX@CqFXjEnFU74#`BI-X8wmS% z%51E&)1hCD$bvgIlU`p?eX$rst}oacCU$9EWTOc2*=y`{S7V!d+l3J`(arAq!VL!^ zy4?nmz%f3E;jjn+few;qb)c0nyP2@f0w%UswZ``+>na4Vhpa_=C&WvM$$>oL@SWU1 zhXiYGH8tMR131$B$Re=p{;R z5?@sRTW;szV(4|p?$q5F-Js7empUWvG2GYUF>Cg)8OT>p*5G^aK+~|&-0Z2Ip56;{ zb8`o!xQ`Vt>iH_11(!wj9W;#%pFK+v7Z*>VcZm^d%=e%(k-aIA>d-82fVm6$mPA|Y z?C)NlX#ZTo#ZWtE&n(u_@cHyqpBGB26*r}2<(VjMGJEmfm%iJED!&=uzr@sqc?4xfDG~JAtRm0w2Pl-rU+$ zDXTcP>&M#6ymq*^&vHAeMYOV|7WWf{44hM!8HECc+AuqvKPG2xsAh2W)bTQ4Wc2C` zah>;uI^U+0lASDYL}2@;p3_|0MW0}!CaFpB$td1lm$!R70&ZoDCU%DV=>+NT4VYKo zJ{L%AYBg&IKjcMM8+_TBI|+~lA){6wlx~|c(HA`wll9KsGJA_Aa|B}_DAh+R;xCRk zp$V-t^RpQXwlB~2>b+v2T^5RL|Lm*9thC*hj?5$)+bOV0>32ss)746_efidSIaBEI ze1j;>$Hw>dQL_zph~Bxmx!#X;_owb_bEzdbSuOnd@xuTFfbP*Qu#D>9x+G@QukQ4j(a2R>sk6&DM42LbpHex zB?QJ(O3ZbiN<=U%Eg!@V4}4Ma@gv=0pM3G#5B=v^eu7;45zR+fiFzXW*VFy`;DjzT ziO@)!M zZT$SmU8-a$xicD9C^}M@h$B~~84a5~Vt#Md`1iUFn9ow(%nssr|8Jt<%;kmOQ7PM{ z^y$!u!%y^IH3j-4dbbC`?cG}d@%iJ@=gyTL{Lfhc`DZm8Lr}nTscl)qNIUa1W@@+( zR%xk0?q`r&A2#ZYVue%U{?ULwf$87nX^>9jCt3c9%tAwy|FBD1@(q@MXugMi5_}@R zurnJygr%{8%Y1?zUj2EcP|KA2bgzgpB9J|VbKVEtWx2-U8bNMQi5rIx#j8f{Gczd8`k*5A%_J{dqKENHXi8_m;Nak;?GF3CzZ=$n#umcY-{lQjoIb19 z{cm(9f77n{HA{EUxGbe)(OJFzw-$uI4C(79&L=Woj#OoT?=}C&|M%OMKU~k&4JSU_ zO#7#G|Mdg^HMlBx-ot>|6k2qo`cF>v_wLc($0q`3h7NbBU3>H&-j*`hoxW9Dl@8WMpP4k?#z$h`**9l3T z+A8MT%(?geGiTQpwtde00>pnNrnB507u6ou7r5vpyQ1<~vk&=kuf+osklh_fo-uPG zwr#_wKla_ngi!&6_v+fAObk|({YaD@?LV>oj`2TB9~?$`Uq{=>ZP~~zVhUj#|DRug zPAZ2E8JC0~lD*O96>(?I@t=Gl^wxR%E_-WhYl}bSa-2Jv42(52HI>LG>3mm9lWH*L zT3uaDmulceQNzrqP*&Q^oBIv@QGVw2LPS>XknhLtxd>e(pf9`v*h2JRz0*QkC!(e) z5-7n(7V*dJUFdsdho`wnA$jm7E>L?DV4C>~a&Zrpf{j6a=C2r2ocfrYwpYP!eM!_+Gk`0J>cic0vA^s?ODYsz_b1F#@le0qx&Qh1%HI ze3>pWV9v;|G?6=8(TwYKP{>CC`MjL$=8 zhF5b@l{>%|(k8A8Qe;#FnK(EtKQd2FvviRzLAMc%`ugVdnz z*0G8BsT?4iZWi>KXP2aneIM#&Jbg-#1JE(jBWJl1F*RXo_1w4*fK(AX1ydP(UXwa|mp)$G184m!-635@^DH2GZ1ub`l7 zXzzRk5Au?GB9^h-+^~h;(lz#!{ir@w4}bZbU50I10t1*0EJI3S^awFuKS_@3L`;t# z)Q44p9K8uY34MtdL3oioeB}=G+ODI+$?c?s2~1QD@ZfX|3IR%iqH4U>vYj03p~+|u z6GryI{(7|89WurWKGLWEN4q5|eFe!`@vjwxLZv=MxqLd1Bfbe0$C>V@aKsB?9%C4x z-Tu-b2IOIYOz@uHlmig|jN7Rj)CW2_CEsm6;p}ta(;d3iYg0szdBgy6FPw0(xN%iUqX>oZY1bL= zS2LFM3N&rWYE)|W!XLy$v@Ld^)mnnl$#bJJtlzqgW1$JaZ16zreIU0NL7nyXX+S3W zr1F0(S7{U!K%B(*F5j7DIiU>D?Z8)}R5mc9-q}Y7fax$JeIaNzR+ccY#Fp=$eV{}( zgsQd6SGV00r{utgzmw^IB*Z5MiuvdbRrRayyPMBVOe|cB2^~kYF@x0yBsMzyn04*6 z+i7TM(q-DrDu-a)bj!iKLPCj_u5i2>dnLrJ#d!`Z1q#GF=}Y2x(S#@X0kjaA5KdW_ zvc_;ls6>zuA>;dA==w>f_tYeTyP4#P{z)(#1(*V)xP!`(l`A+#_7M4>n4%nLpd#s) z-@f$#T8SNrvKj^M<3!%-thBHmK4o+l+`t3v`LC0^*Tr?oOzudOd_wmRa_A9-%%5N5 z6K@OzH!HJlFbPgvdMp`jRdtt*V@p+YzxEn(udEn8RHHgirIE(C96ha`=H=^R$+9Q& zWdbt}q$`3wC(r+k(7cEnCx~esGq5*l$-D&bDth}5{)01sOSk||xLbzQB|D-7Aq;Wb zJ^S*)A4^7R<9)y-s{`QXzTK5gjEr@}8RGpwo>4in|L3QFl1GoKDTMFWG;z>(eU4g? ziqRXVNyyR3=o`CbSvjNzzf;lCq2SYl*UOxPRD?V5Qc_?8VXtYhXEa*zs z^x0#nfVPm1<&y(TcA#gbZ;0ApBAoufAiw$(*IqQ-KZGRAsTJ)b1`>s)4rUL9HXn^6 zxkf9TYMTT<=;&&!S5iek`j^rMF&G9aW&R_T`5RwrDDI2T_`m^JHEj!Sh|y({zFhlc5v21TKJ*UG zruWz`vtc3_8;m*XSIeFZtvVvo7t%HuQ`P=5MG$ra+Gxh#4F^xdGJ1CDPq91))uO{YwO+g#w>qp3S#SQRp#hAy7zz{S^PQTj zGh`p%rG4ssx6}#h;Tr6I)>>V_X?MKNN&Hq^UH){Pe zsftCJckM9H*cFb_My_52=dIZx8?4HQ=}xP$t*FUuZ3hy}rzU25AERLA z&^g_#3^GMQMu28uFEVMWVL|fXV+{SM5s_ad%?})D1?vhRYUE@uoujr}3pzM0Mxt{j zfu~G}pq1Hdd;`4I7{7-+VTN@VHO6?#527rz+k~WtmLsv)@ zIavRMJd4wi=_S42lF9eC|u>#bV%pFI+F3F_X<|NNP=*E%hqW)vN%Q5p4ckYiDI6Dy1h;-Iq}H~KPx zDvDzvdBV7dF?tGSboSkPsneMiFxZGd>WI?6VW?YA3kgD@$dadpxJgWA3)aTMw>;y{ zWCB@|$%C=s#3h+jAh@8iR&PU{u!pB_p|+eJ?e7#H@P05Zr7#e6T)jy+bRKLXMj>c| z_fE|vR98+p;$`lV@uywwk)08``q}V>ls|ONcU+weegdVWI|sZqG4deH4qeCn8%Dk3 z_;pE*Q&@(xyIEwMCZ6eP3`UMPp6xZNdE0WoMUVV|#fqnUx)v4u+gvukl$XbQ`x7R^ zLK!%+Tp)hS{X-f1`GIKx3$ynYXuZc2R-^6WpCs^V83oF(AMMYaeDV-l^DL5wsLZY;0=qDDc^T+Aw(o{#4eoI={Q;v-(iDKu6rc zN2xgh&8S%&p^vv3ht$ez8+#fb(8LQYdI&In@DZc?)m>B5{Y3nUZ!R3vUyB_GeQQKu z=c8D@8Te(Z>`4D_NcahT*=su#^NS9>SWwY&Zfx3?uAhnJGXBl`Yk6EP_k`f`IjZuD zLrId^Itwe`zN*W0W=M@++dO>OnQzH@7|>=$zHt^!*l(FVl4)0HD2|nj#*X5(Sr1$N z@cGG%>Wzt>Z?T%&+)wtpPPIZQ{vI|{MC;M)t5-b10%eU3` z+^gcnH1!ja(4Rx>Rn{$I33lvBh|Y#6O!>BHG>*sG-}&eKie-cG)@iKcb(8&vF#kc@ z+H5iRZ!Uj!JS%;Eal{hyr@aK=!|rmdknL;xO~}4evX8Z*vdmk z-6Gm7T^GsX?&^47{zaH|5vg--sEpkvRAu!=5vWJ@#<{C+Kf`tVM-ze1-%a3Ye6me{%zF)R^ioF`yozF3T@n$Ou2oPqDG?YTb1NoRPN)i ziA!6U@hAD8f^Yq8W0+o3jQ2je8o}>!$`!XaO7nU{T&RDZw>$oQPOA7NwJDdNyL5_j zHt)TpmxVQ2EXU&$UFu%KCU}N~C!H!Q9I3=h9hJA#v zks}FY;)=iKD2NzTiX7cKh?a9i;ab5PfEb0auq!PVFGzoaG*u^*L88tBAIpecd)l+2 zCbzYb)<38=?{v(2@q45ieu(hE=rNl=yII0_y)S(QtE&+5Nv@9~c6u8bk1FqGh&pb* zA$g!iMsyR3>)2|SXSto6!hc-8i%mW^mMS5wbDjTIu142m%_bOcA$iN+t)7qDw|hm-{Gxr&sbjwi?(RChlq*0HPt+U7U$AO7=X zn7*hy3OYJ1Kcj$5ozO1%PV1K-GS653GI%SfKlRzyeN-dIhGF3c#NMd3$qzgR;{goK z5Py{^vX!|%?{+U(9Q-*g8Tm|{#&TnSQ`mK&r0ONE;HU{r)d1|ibvTZp8o5PD0d;} zU27KWJIfm})el8jt!~_1pm~3ldYH9u#m1duAzQyc>`8*2k?{Q_)pn=aLVhw0pLQ3; zr-Y|wh7G=T$TB21mGugjbrxQ6-~~N3rytxBYcK4530x*xYSkYl9c{;|@JZ$l*9^YZ zf@?l-R!%jN7_h7bMwM8q2gLNKS(l1$trmA-Icm{lPyM$_;x>2nCajw0|Bu{d93_kT z1Ed|9MgfE{&)P|^YL6^=CPKHtSJl|kvi>pf;ETlCCm^`R1Yt()(nm@9iQLb$=_|1( znG2*6H=k<$Rhye4EVC?Ii1Tx0lJay#H(CE5w!S(ljxGB-NJ1k)g9T_j1eXxpf;$QB zP6)x>-JJw?f)m^&xVu9W+-cn1zT&-kGnx5)YxN(sSgV_=TSxZZ=iGBul_6{a-#Td9 z6Fzmkb0NDSYaq2RcOc!n!M%4R8lR{Jyc5dhJ#Fj)+5IGe0eytOdzgB3{Rs{cfFN3> z?5ZAe@yEXU!-JvkVe!ts?hpQAa;M~7ZI`zg#(>`V!Re7 zCpN`hT>v(; z7DMGr@-k8GT(oiEPf%(Tcr|CtVzi5Nq z!?k_)5NyN4Os`_WZp9NrdU9$sUeDvb!Y#Rjc$bF*?)$9RhrkQNyIpDG3MISlo@@RP zk(i{10HE13IU+9XroB3uD|6BR!GOFiMl_WM-{kog_KvXCiE)3r(_^g*eKKd=%-iJ6 zSMTQeaPT;bcoY+`P_}9Jh5W9iR8%#7e`24w$>Z0^vZUNs@LX+eui5=vuJ@PBg9(Tb zc8JMHFWr)vrke; ze&GvL4dNbRQdGQU z$p?nI-;*zfs@qjNJyb(=pnAa%v3EFkZyLv25h*$4qS268^d>4_o3Xx1QPEG0BVKV7 z4q~i+D=KHLmyOe}z~274sk9=KHSD#vgkP*FQm8pihI(PL-H63)Ks_Ntax zIR5!l0G)WE<|c+TOc@}G%XFA2BYS0dmoTr0N3c*q$e+=(LF}0jIDn7+q&!>~boSo5 z8C}d{1ovI_UE8(a^DJHeml&zEcsxx+<5ubtmI|e{QoL0wsPvtcOcZD1*zc`nPeUqB zboppL!@s8j4TOGRH_4(iXguR%8sR!$nQ4EG5FHR;h(tC=KF|$u;z&t=sm@{Om#4Z8 z9>EL4ubI_m=qlBw=fkYTjgYwQoM^6I3s?9B5W^<{&hGv%{P=Huu!e_p_u6%6ml!Gv z<=@oBJWucZ2Jik8-&oRC`a{b~JWER?&V8VLCe?}1YU9!u)VCZtF1m-hP`P` zhl(~aT9*k|B33jNUf3QI!LUMxTsI)HF@dB5u4<~l+vA_gTdJq zJl2M7%oK^T{(MySJuY8*U|+Jmj8dAYkn6+s9IOW4>We}|ktamWN^{)jsuzqWFK|?A&Dit#HmZeHtNl zkefVJ;X&QA8hz3QZ?zwTWN&j%GiqD;7nA!lZ9Os{nNARgDWLqp2k}syFzH}8No8Yl zu(dlwB6!My<(i1=eKG;<6qV7TQG&7i9cctYWhD$6E7kHk zBU+Unm(iBHjzCrKd*J(HoOM4xQaBH#L5-OupXO6>eE{UfRIi*OI6na!Pdt)TC3caF zND#CUNwIu!+YbxxeZgFv< z7;AFAJrd#U3)XqWPU8w6lI+BNr_bj8Zfv z9zrf5wO~;d_Cjr-gX^_SH0<3_)rgAk+4GLCLhf49S#AyYHx099x8+SmYhi!Ihl}rm zPZfoRhtCJZ@J}jH#LnN@thy0((D~sn#r0P3QMa=NTF`!M{AkUgN71`}^{&UwwsnMS zlj#yul7ybuE7@2iNTW(zO`cbb~5lp;r^^T`aTap&GnUxfWqUea7lawc$lUz zVs!p!uKECwl?R2x)%!`9_q2a>Ffhe{>MB9q0_^kk-e{=Vzt)gU9dSs(a2fH(F5+TV zs%@NIwfN3msY*;_`gGZRkFX_C$5AJXsORzyM&??qUzC5(Z{>V0&fb^4{p^*^(EqWf ziw}QJG9Xs2S@liiz1&5h*Zrm4Mevz!jm%ECnOXRUsh62}ddvwYSBqx*!k=pvz8DoG zu%NigICuUYL%$E%*Dz_u$xfST?jldTFpp+L%sLJKS1?xB?uGti!~fB!TyGE>L?^{o ztJG5=o})R^)WKX*?(W4?u~2s?&185)G?Xs5S(p%&7OD_N7Hrc|!`+baI7$p3D9oBI zth3tjTtAwcbZwHKZ9HU%jNo}stjh%Ty@4N6@&R@pj;Mi}S|wLlF<#R~ls3WysOzfpi zzlx{G^s1pW?f#=>@LL3&WOOmJUpFp) zxm-!(>_dgQeGhLf|D@P`pO9<&kHN57jv>|=T#u?qZva5x8=3qH-G=~-;VBSDB4_+9 z6#<2%Cy@yIFv#U${aR;asVU2o>BfNc9)TBR=>cg;2+1oEc?==<{r!%X3(W-sjRC3# zRpn^TfLm=8bUtMZwx=L}Yji%?-QCIgLhMz)d}w5azW;ZYi#CDq@aYO0dt1C(L{0#^z|(jOzr9U$YOyC*=P&Ms##dd>2W8{<y+h)i52DWPF(t8)q{#r`$GiHZ zp52*};@~af{hr3pQ8E`x)5TaBNE2TA z24XI0fW$&1&q{3uqTOD#_P~LLDWN{GO0jw~K`VNyQ%uMz{{1!+7_>B55B}P{ia()3 zRo>t(;QU@`VndoQ)HHcr>~Wm}VTJi`(TsB8;=}^u#>+Ar-W0vJahhDyC!)8<*wobj z;o;{l(%4k@gCCITM4p<8J|)By=wK~tlRe3|gfPPdoP~A~i8gi!bF5Zl){G|3zc0-VzW8^$%e$3CvEnwew0B z`U0xljDp2@JS&v0EStF|J@hGLZSB%lN6tP4uX8)_3^`vr{IGB4vb)>9I$i6EB-h!! zo4DTU5p6aN1U4+K&iPMY?~I;{L5TUa?>J7XpIrZ{{M+H|iit<#)!$#eSF3~&4_k{$ zXqcWsnQVj&RE_r%^3jG9x!DI3d8xwi*{As=RpVtyv{Xu;R2WBIvGw z&a*_fv4LI#@tp9Y@tH5gJd@R7*(MEC=SOpu7yd4wEQN|qC(@L|x?t?xNI)gfhE)rd zTQn325#Xnax<4uw<7!xMl0R*yD_=>I8ltW2+!5+E1 zS$5Hz%VbeB6kb#NRMfEDz;NBIsJ za7_)%2HaZVfhhzjK-iL2IrAx0{Lcq2?ODScd83B)xWhTRLAU+$GN-Xs^zQiCUYZM1 zCLLG}uuZ+J>gS0^RyNk8=HSZU@HqWp>Y?29OqEqn`SAqkPiWG^2Y8bb%go(|%COpW zxyPKR&PO1NCQ%f+^GWWHz<7I4Vw{E&bn}MU6=AUNU2~}P5LXbsN9E9L~Ayasz{Q| zN=XBj3dyo?rJ$r*e39ibrGA4CvKUfHK2=N)ITI;XI4W57>X2910RF-X40G zE#9sbnY9r37;jHgTqv`AwB2o`d)0n9#pmOTtc)!=?o{+1Hluvwsh>)EeLy6MmSO9w zBBC85{=*^u)``47NIgqMcek0qCkPY?#hvZhp0d_SPEMqGYyHL~0+o_Y9~d2(Sqi++ zA+{kjdF5}=bZGp!awKoVJE(By+M zK+zr(LL@Ib-EK((ju$rF5(Weyzyn`8(KG~r>}<~va;2P)r#j!+yxjLr!uAGJwjR&# zn|L)iYo9|=3t0ZR4{sQW)^K+_zSl5As#~HwOQfs!1Mk>T^v{Ie0(F&mQX)N8Z1y{6 zLT9acYkxPl_v|L)*$M0CE__c^|33!(*YyiV7&`&GZj)V^>M^#$HM@$O95yX9E@Npa z(JKm_0-4K>hA~3LgqyrhLglCimt@%9>4&lB=k?(J*>h=#XOoQGw5HbdKv&3L!puwW zBBMN+?_|QdR+vuqIHwt=6tQjByQo7=t4^DBaerD|P;1hgWuTW}S+B7}HBcAY5wwMD z?Po2k*EZ&7-hX8O8hKSG_Y>N7XLNcsL?i)2$;#)r#^5hK?SJ103;evA;d<}NW>Lks zofw}R(?SKsn8+H4Hdo{3j6e9nWMaBT8ctDJ8Eh{Pd9S5o@BS(Zn$mn#0|(Xk28oKY$V4J(s#S@2eUA z6J?o3K@=}I58rolhS}roXj;+fkuJV;&;F$l68YWdLnM>4TC^+&{lTc%zV6o` zVE?7~4JlZFAMk}C>qYwQP3P(2n*Z80pxcVMyvyqNMlYNh6;5}yZflr&k3y73?x}qS z?}q70@9MO4jEB*boeXmmnSIB~mqeB(8`zZdjqd;B+L`d9v|{0e*soukyQobl5vZTZ z5j;`=@~|jP-(0(}<&Z8*U@TNsKFN*MdpJ15vf)93Yp!G|6Y_oYrW7L5_;-d`aLfAb zu^|b>DPi3{`Gr?E6Nf*V&ro5AwwgMWs{ag5uih-{MC+AF5v+lt129Iy9oJV(SsjH* zQ_Bd>d$(lYE@nbT*f!L9M|?hvhWi0U;U5(hmn&BKEW4wA4Z?{*62vr(YTo;78nP^R)KK)+QQ-=&4 zvi}QC?@Q%vE8=zja)%KRlmnvoXKo&az+?Jqvt%N5bHMu&uA)+cKZk#av^!~liL{y> z72`4iRIX6#D5o%gI)*exqAipEo(TSz$)M1~mdLTqO!9|4o1K|Khsoe(WBXmjzu74W zo=}%LlunVvG-taO@EL@r(>=;l~Z!qVu>$2PKFkgPr9}uOrmCS2w=s~QFDX?w0h0V4HW0h&t znJX)|4kPj;yB-T^&f+dhetf)}cgIi>CqDb$u-SSi>c3*v-%nr;3yt!I_~aI@CdjKN zg{^Pj7zCSB4ZjI{mIN(FH)V03I4uj0Mw*yt=ycIw(+o6{;gbV0nHJ*(R~1ld5eFI4 zbCZ$5`lbj7-IFYR*iQrD0mi|F@@GW2NfMYXfcFJ=b4E&)N*E9zU=zyBUy0#$5FuOR zUC&2t%~>3seo}GccGN-c+S;6``Qt(V<(kV>AN3WU#U_zUMspUD5nj0vf6?i#MYI+KHFQTy`kA~*cpEdz_CX_CqiE3V6r)qp7AZ<>Gs&%S6?+3C{o z4PsvPn-pYBGl)dXr(%mlW zBT_hzNn2Tbi7%_8c$-y__2}F&+r$R;pGD!nV>+HXyyli!el4{pjZ6=#dsTVYF+65i zrcYWTG@TF*9xbSu>;*G^%7E3!F1K$0(wFPTuqCXSx_6^!TJSSZg zGyFkk0;GojK>*%AWS(h_z3TqxQz@aS799`1v)8Juen{lV&hR9ICYE?+7B);E5vzYp zGhgN1bDlt@nLOOk&-tsRFa!v5>MNt7Efg8JoA)QipYr~EJn&SlSU%zMN&mR#V&g9J^Tqa znSU+cf3n5jG2ml@7yf*bLRNxqeg{b)>2SDpCu!&H>UNPe-|_ovrcI-;keYB(X683< zbeb{VprJCvknf#;Y5{)u|0Fvs0e0b1Lu>bM@8@J>*vKTM+=PUhWUhP{6FHJu*{N2s=Y=atND zPIzjm*f%NN(3}B=m?Yr5D`O7q_X4($_MdEi@MB!2_Ld8W^kG{ zz&x+uR?$$w1Ya3b(R@<=KhJ>xKmRPy8&xkHBceJoV>N*Hu$DS+)v4xz=#jkRaKnQ8ti`lQbPG9V6NLCOZxwU5x{XM&(;XL*`_U= z3?7+!N%7Xv!yHV6z^HGeS2~iM!ko9c=HEhJ@Sc#aA2+zk@a%sQn@#k;Y9pgnE&`P{ zo=7@v=ftlvn3s3q=$#I+qh*PP?^J8?T(3uWn3gu-ypc{oFKKzW(KZ#sF2#q%)ppXm zg0wtfkBo62)REhI*pv|24l?Ua7pWcN{n|`2W!bVW=WRNl*67%X*8vZtIxafvExBLP z*W{nPWP;_jZbT{5Qg-~e@4P^Vu~V|^@9uW7Wi6<%XL*j^V5k;a(hs5qrg6yo7zA&Z zzLfdVmKHq5IN?&f+qB1bJn5a0^*x{t47A%thVH8+w*4&aCYmC~fWkhNykU|;f&^3$ zt+If=1)YY9pPZ9Z7tIshF1u`j1<{r6sx^%ijVCS+zZeCH7sCmhK^m$Cz>yj4n6|3l z{wM9C(7{@SooX9obl{2ci1N1MtIm}|&YbP57oL9A%t?oXWkc962LpY;dRN}Yu+-9pH{|1{+Z$h=u zjQuV8oA41iy~tF-8LQWesY81094BmneORYk`?7nv1aW@l)3`cpWo!e3-nmppJL{We z8=pxTc4fb6oif?>wn=muNy;|#JaugS7p`kT)J-tx!$z^jTjt^27ZxN8;AWrI8x?W` zI#bu}dt&SeI_t?%WM3`Ha*gPMmh2{Eyg$h-dfe`#l%9FC1!Ks`a;*4S-R{@sMZd65 zSld48Ktl@zyL{nT3w!tCytyPeblQ1H*GJ*7_ z!?e~ly;b@106zB{HMRtGefF}8)DMH--kH@{g9v0sHWyqfH_P0NMr0!2**I0oyqk1c zs;8Dqe%)U5yLjzaWp(pZ?KITTQ!E^`vT&`oW*;8@y3)|Z7LR>8Z0zF4+OFj{#^l9R z2PNhI&V3nZh|7xKzoM=Y1h4~I%i8!0u8M0my_03LRq`zKz_Ae`<=$OUp3;%sOBS{l7?CN`N2>KutBX8Q#%<%Qi*?cqrF0#d-SU9o1gr z=`emCwx$0!)yIedGL&b4AE| zUNjf{ET7DD%$}Ovl2;eztC~8L=>SR~kpgsXH5`ENMPleu#GLg~6LA(~6Uc5Et$!z5PinHsa>;>fL+-GtIz<9CBsJKRYndy*;E_Q7k^Y zSAP0dsS~8O{B5)__q;fHy3zLZG-d!E9c)_8HciA!Yat3FG7=A&A9vrizFgd{qBCa<*V#vYT7~C&cP1T#8RTp(9m|_&JJH* zGnWbo1Vc&!?}J9D0;s zUOj3_9HsWI|jSv-dw5CC4c_ zUldZ+2OD0LS2NC*r1anj$#D-}gw^W6L6%}Ri9gTfp;0-e>(}j{ls} z?tNwK8LF-4y-_7Cs==)p9Of1wf#0{#cu8ss$w||5_+5_fFqiYi(&P7C(f-f(Yyr-> z1#iO2Cu`KztDXrtgOY3f%5EM6okpkMFvEK}oNQyz2@3pciM-I!VFfe%1f=ELmgDf? zsDj8kQ#n?CCcM7e z;!lrKbW`O)WhINU1r8}r%kG=6x9!-~dAu=fighnj1~IkVOqIf>(GT-K-W|1}c`z|o zDNj>2Eyj@DxL>UV0<)DYi7#eNOUn#{sfFl~woINBSD@t8S3l!^xqx-Zfag{TvNhI5 zNUS;YiG2L%^CA*>QcZqj9J-^-0Ku~QwFqv^FjS6Z zud)G#>dX8Mm$@nvg>n8hW`>hq@<_jpf%w22srUfkpFr%?Y#Eb$t85mJYHTkT9I3z` zNr1^%OCAb5*^0@TYlEC;=3c7rO!MU8UlOpz9Ob2@+w!YShBBWxSohl7KHgs<+^pWM z;Rn$NewFxjbjitX>)r)n;@GR1v*_C@oPPa!$a4LrXz#YX2aL?VT{`R9!IQ;9m3O)wxNhkCRv%orsm5%K@ zWnJJer7hK2#SAL1hLsSHWQXvf)MuJ)w|ED5VqW>3D)gu?^+h|T-Iq?KLv!pto<+3 zXIevN^6^ny#v~^+eC~&CKp4OY2<8{!(T9PMHJEII1JFW-7%x@I=wdL{q?o9vD6AoN zXU}PKlZE_@zh}I*i^&r8#A)(E95>?pu0t&)Y+^a(Kv6Ja=rh1WO8H99EVF&%4;fAFm=G6QVlxVbN>@ ztbEzCaa*psVx@XhEH-b>hB+;b)7>3RlHZINb5}Sv?P{%XjyOjc%OEA2sO-B0b8D6B zi(IYZwg9t34;nbQNl#ONo;^fs)FSjCXQwEe|LaLGJU_z{9b=BI?fSf#RGDl-?q9x) zZA$fe*0O|P#!UimNi%8hKBZG(O2%?P$5G0KvBgqUY zfhUc62dgne+lLJaI9iAMiKPsTo%ZA26VHi?Vg5UGb+Q?AYd27V=8_Kp_?%&Ww~w^%s&T8wS=$+GHwm1~LAw#l4>-1xLwk9&!|d zzcB*yC{lJR%Wb2Vl@j8LU?sYCr+1{T|2qNb=8}2^e7kc?V`|oOvV|k+=EP;6c7AOD zUbRPLUdC`q;i?LK>4}HLjMN~8-H#zS>zZKbutE%`a(YXQ43>R;egabtV@VYSdo*r6 zCW5QvK6lIzm#qSabByDT-_yP)>~FEhS6aBP_?bHv_!ZrwQ|#PjSl zV6g4_6k*hwbL;5wVd+uBUOVQ4zzPhTACe_8f%95351&>&G57iP8R9- z%`rc4Vu0R8f9wjf&Q&`_g#^#=lUp6F5kGRM8PCJmLz9csXSxeM`Pvn3z5I>@pDDTW z?kqa}j$$4F_4cJwI$43S_liom@5qfoq zKd!xLkB#K*AtoRk>(K&R^-x37io*&?AUeu6pmJ=n*C3sDM%$e4^SO+04GXJS;)@dYuGUj?#5sIc-8Tc`Lm3 z&D^LQ*(#m3;i9@|$jX6IO~h1}Rna#K92qA~?Mo+6{39t*)}p5e1_j)bK%^&7Z|NCW5g(esxx+j#kXwmDub1Lw*g1PEEm5gkHKxrk0arqWAm9_4$hM0{QkB9D0MT)O<@ zWOr!b8QQPk@)U($6Zpm{pU8aoOtmEwCRPH8)68r;;yyrhJl$6@;8~DQdy++PR#tf2 z4Zb|T#BG9#1Uur?;MVW_ENu6@hj>!Xo!y=CKibaNj_`Karr*xX*H*Ow+1hyKVa<8O zRhwfo!Qi|32PZuDE^HNwt=E=RX3yax2!V*n9)0K7xJD%52@pj&j{CETXby<5a$BWu zv|_?(`u*>8|2)3)f?x!+UdjW~=Wb6#DYlm-_I_<2CX(GLhGQo`>-)YE$)g)EI$dtl z8K9_vk9Q-FD5Xwav^2@n(zPy&BO6g^%{6a|t|7;}L7khCya#|5366!9!qR3gfp#l$-qVgsG|0t!h-UN|fSnu> z%APzt-U%+G)+hLO1nW_>gz-SZje$rk$VhYTDFI-~u|~W*2ku>ta)#Z8@yo_dXJJ&d zqQj!|R%apFWi$fViA2+RBNoxyWFU?nu??vrWJw{(95+3(pJUODB$GqJ-xWRmoIH|; zrM~4@O|N81Tq)N5+wiHI%C3&{zwM!QPpH+t$51MLJgej^kznreV+4aqOG-zS`RzLk z;aC_~V*SCzeuoii?Z8pbjuY;=bF>qTGcriz9VN1y!ohiv6o3%KG0;DWsQ93N!Gaa) zaI24PzW)A+%}l%xeJa3B-=KQl?ZkoQd%vz>rSC@{fe7nNr0x3)YQN;LpjDqhta#>I zo96YO6;xQgRCzoE9V+Su>Ado#q*1(>alOJoCzV8+qayjdb3qd?{)+w7x&O13o-dS$ z$A)cp6~?$VTLqNyTIL#v=F$+yCAhAmJFNcq@p#AZnf-*7O}X#KD`aZAYDTQD>D%T% z2bPWTl$vSsU*E;LCJ`2jC}T(%vB*jy{u?R+%QDCS&jju2W?L=zhQ>?kemXe7Jj*HZ z{8dW!syn)kE=qP9nZA0Uj@&<7_HkYEngkpUXd-n#_$J*7zUDe=7%;J4X$7=$4N7>eqN3TRSa3 zbPzw3y&)w}<3DXvKmk*tH&Whhr$3k!AZ3GY@=)#hulwWzqGh?LndjxVfvCO&XZXsG z-l6&7ycD5ETrh&~25PA7M5?Dj1RqJsvu=D)G*^n&&lBlHesY@r$TOJC&RAbULdf%Y zJ;L~&ADZFYK9P1&)wu@0$V;MJrxGup6AbE18*$rwhuGIWkgz7pz5nWAh4_KAuVMYW z)N8Vz0NlSqal2b1mg9Se@({q@NZPnTZ+TomdAi=%vKS;sz$WZ^6! !VB5vxC=L) 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 A^Z)<= literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/maui.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/maui.png new file mode 100644 index 0000000000000000000000000000000000000000..4205001d801ae4a621c2191c225ade7f4fd213f9 GIT binary patch literal 85107 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 literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/move-tenants.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/move-tenants.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6b8364fbd217719f3174302a8dd72dbafadd6a GIT binary patch literal 55942 zcmb@ucT`hN+dhh-f)v3*Zz3X6q$AQqkt$7kuc24zoe0vT3P^8CHT2#IQbR|2PmmB0 zLJc(}z%TebzVG+PIcuG7o!?%IGMl|;?#$eC&pp?54WHhr$dMA!65-+Dkt)bbtK;F} zPvhZTS0KEFyQ5lO@fr8ynwz?u6khoV{RXaZ!}_)IYdpNFIAW~XOrZ^QoJzzhE`m~*#o#$Lz^P~)KTPSHoVf#ds za;{PS82U&<^5_KW1#DO1Z3_sv7bP1obNHUX;5wk+YDLNCw(rTq;sn+0@K{xJr!JDgICuqFnsC&uABusC&$F}GucEr7c=k| zO3G8_`=d6J4WR^gDW*L1*NtHi7D-{bfwz&v_euYljQci`lf2fu$}&w2f(GoRYR(8L zcsPD+_1J5q7x7S;*K|;&tRsza-J50K;AdGoFMPRPY}fjOT}k>BWS!8Cbn}HydFI*|X%0BnQuLdHc@*5wj&Nqt|@bajJ0vaNxeL={NuN*}LB^&50o4{-uz zl!94c`RclrqP;;2W6eE1P2(pbb9(wS#scX^S|-l1w%W4IAZsI*8{XlQHf;v;qDqF7 z_sL$^A?XUFkkD_KFnADlR8t$%*`|`NuRnZoXcI`mQA(F?FjNsG-h9*`UWAwu6ijWl zw6u!$2L2thkcl!{kDn1j(nkgavBl(3QFg>POtp;K?$#x~_S6o$J0Qf7ZJ_zp%Gz=u z!3R;uXkB8bsadS6ITna=NYb=#^Y!&Z{M;9K!rjd#>%?5iCxkhjBeJ!z)8<>?EE>^D zJI{33`|xY|(}e6Y!1sJ(fL4Pl0#=h$=ZeaVwA4B%8lCFf7of1>5S86lwWF6eBSh6` z)mcfZ>P+^1yKfzRTH)*vj}KAJyK(ToLx2ws_1H_j3$@+sb?L;v_18V%G8TIgLQw0M zo`v^(g}$s!d!`8&%|`nd4%o<*GUs2DEkM#`6x6l7;TPZ^`t9KBtK{ldJrv;{b@oPy zat-m;%BuOn>iSz>{pMQGQ@J@G+6qw9)T(e%C2%>Huy<&;=rW|=<6cO5sV<X<^$X zWL+RfZPizrSZ`VV^t)pZ#RR${T)TVluT4_j(&+YE-o2DfquH>co2acyJyB^;R0=(c zlsU-%2AYcA1LXTxThZZ+t;Hu*_<0o`Ca%?+t!FWZb59Ioh7T+@f}3Qwl%J3%)g39z zl1S07uUpXJn?ksd-w+dv?_oBLi{9Fl?H(tum z%)qRn5|B3$LW5NOt<~lNqQ)?B??_4JkfFDWBLpP4h{m62DkcmfVK3#gY}D=HEMzQV zy$ig5v(V&C$n^I{sMq0_EeTgCJ550zt=EyhzYY%cQhjfD7Y?jnw2 z#9n`m6(28N{3n^g*lbbG^Jpwh%cT_setT>TzB&e#{T9S?D)(wSj| zgF^fv%_=>}3qa9P>Pgy3nsB+XRiQGIgvW@#2JNHw6X_IIL~g~VH#`JkRlUV?)S z2B{a(pi%EQT8|&r?fUu)S{6}y--+`&cy${|f<=oT@!#jPDJr0;x-GeSbL;T<7c?s@ z;%1(YB>mw=V4f18otPsXr1~4EhtRH-^G?LFV*#z+^lWmeLWzrj_t;+nNjU$r;C;PKebmwT6H5E2lr6Z52zk&W zO=ORA$i(hc>7%`q%iGS>>z$WIqM=wdp(V<2QZl=i>N59p~`*?SZn<#ol zi)P@;jqfYyE(pweJL(kkiwE7#m=bFFTKNPw8Ui$Ga?DWXs;mdNhb%l(MysC(>TM1<<&IdHStL8XYo^mlsLb?*FQQKPeN!9-M#wQczaDt zP88F_&$iX|G}z=+GLs|-;uQVliei2_C;m8oFa1uJ4FAeZB^LDuQ#a8~u81C_<-t5f zFD@j747u~Vwypnk@$p$O82>rBf>Ae&qmtDH?&N^^e|6HTDiy+?;%$Ve264myXYCfn?$MNYgP}$1+PTyrRnp-TTl0aBD z@zrQqNYS{~ibB~N-Ql!N8=Fxg>R0`$Jw6X*=5btLC+vGX*GHd z+N&!)&3;cOzmeBux>VNzT7(-ZDJzzyIlXEtw0W9_y3L{u3qeDMAdArH;HcwWT;9{+ zJ9o75c7PG*$fXeKfJ*PX5(3B&mXr>mmNZ*9O1q!hdaB=2nG-j&&>l z)_kvHGx784QnJMF#F}jhzPGZ~cf!I-KE^Tp`Fs;pfhLJpcIwVf7lshoi>FnF zUA^+>Jr-tO^X*87e|mVs?o}$&)%{xy@%33G2Sqf{_Z)w!yLy`c$|WHSN|i4 zy!NM^KlNFV{MRV8*3ibjzHfgfRaXRId!qubnrM>xEWpSAk&xnF`Sw5N^iltrf&UbG z@&06{{IX{lOaR<3#1yWi6?~MjdBhs>c|%^+x#IBn2wnbdV|!a*zyI*h$0wv=A&ATV zqSMgM$~KaD6mSn@Z<8Plo#(08p54YMNvPzM@E_UR+NT`Hs>}r}N6?G-$clM>6!Rco zblhebpIU-rlo;NbOy*>%;nwC=^bGXNGqK~ha@Hxk_wRI?%r|Qo&!P%<-xP}evAK^L z-Ew)_+0s93QDxmNVL?tV67yJ9Rh%2^s_YH2Qh07catUAcl zwSwK+YwPPU;7_%+^~iINxXI^&{RuY_V4k$ie|j9=T~o20a2_6q=8kJVd*XAP#GnqF z-NN7^x?KPu5tq@vb+gYnJo3qK(` z@M7XU(e5^=bBJe>Dip1v+i64+gR`#O`@azT7Vw?Jvlf&NwBXlMLKsrHB@@L{x_+#K&{1il3zWpNthDKvWI3XI7o;I*X;OQ!H_0e#^_~as&eKJq7ji6mO>Y!qq z*8@98T+yE_e3A~Y^_??!BROVx$qhUEbzi+87u!!&KL8(f9OI9(k%-E#ZG2}ue^%&^ z=zy&L2Dy#rLg;b><~n_zz?f`(Bz;$K%LgOpqy&qEGUafNJqkA``){0ZE?Vys-I)&y z#)|ikALEnV@!A$EUTM~PUSYt_naq8t5iMCXsx|lvZtbs=neQbH(R6tr9*3m@DPiU0lFB%c_l+zgBiZQ7_Dgi^mYBQJxYnw~!2lhK z>hes>2Qc$;;+Jp0x-l9?5NIx&*YRn>I>u(nZSOmcZJ@f$(fZ}aAT6-sZZCNqu)>@k z9nxlkJ)ml^J8jVXz%+T5KX}}5rw?`k5f*F*;Ikk=9|HR1<7oT@?F^Vu> zqT0#&y5b}NoxHB+JSUP*O|WZZ!}9#HDNH^n8FbO*d3NhruhZRUDC^NSyJPh562Y+i zi|$j{#k%ln-F6GB7^mVL`j^bWJdf@#ZqaXt<;`ffSPlavdHi6*thzC@ZeL0uEDh6{dc6bJv&U-O2mmfK@ncXDa zXB^dMesURjZavR+t%y`29OUGgdpeg!gJR;~WoEp*5NNj_2ciJ&k3(dQvt&YCj=R`G0o@)8*ZqEz?MjiQxzv-N zrsMG#R5$U$P~R~HmE)I_Hu#hN(c$EiMc=Z;fc2QQZ(a3Sn4vEy81_dCLZkiYHM&Ig zJbCdTmX1}JZDACbnLbI;<>I*7rqyv$X87&LE`<;MJ_?%}9P*pWR2De@XHDzkPemtk~7Z>^m@BMVxl4#Zkh2GE}8W)#K((N6nlT9j#5M z6=ciM@9hQWR(;+d=c`c*LztiBKMG`SR@)8}fk4im0Y#ko6%9Js-WOWvfs??}g_$9- zeq01eJIVOyVA!C}J=ZAfxg+-U@+c-8Ato89Uo6N7U8n0Onx|F{{}4_-GCYzTj5Vwg zJq-dB703?4zO9@g$%j+h@Ddh^jON$3geDhWko zO!rsaw_a6*T?F~>8%Xl+X6sB(qCqlofO12yPg|)zSXbK)t8AZ=aZF@^vvG%?Hxq1o(d2d=9-V$Pr6Kt}smRK|ar@2y&N|F`0HkEU3rP9WXA@3F8 zCuJlSNC|1srW+KrSHN0f{s&rAgV|kdS95Z;>^vM{PSHDKL~#ji%GGPkSzEvGpk$ZbazM3<(+0_}SaK)%?h{DSj`N zPhTi0(&9;#Xs{>k7qxts$2vL5my_E$0V^{WN2s1Bs#KHK7mMoXeVvO6>Twuu%BN^p<`*={`9em8?B(Z^I z$D#-d20XAuqb|=&{joYbG)L}^CqW&VE053!KPWp{;J&jZGS4Lb1R5CQ;N#X#v&|Or z`QWv+PD3l$K4)@TIE|n(buJ{l61PDgLUJBQ-Lg32b?T(uwbq)M${5upu`ISj=C|c_ zsR~KFf{Qb%9$xL3{0Fp7!SKQoL?4KVBE82IvF5QRVUp5h$?A#}qUu+y*iB%%*wQ=j zDZV`4i9;+`X`prt$`gkU-35fmStgq}beVitSoK=J8gkE94zzj^U??(X`tnAd;=>sO z2K?>pk+DmzGms12i{BL&Q>#=rI)#;QiWQ~-HjnP}I0?c08A+)vM+Zj|BnVVfcV+To zT6e}{(!FvPFMs5@)^}pCGdbAp_Q3_{Nega0UkV&pHNC;K>&W69-7Rc$Rw0Q^^_l%F zdKVY2ggC$M&IbIX562IW8^i>jxVfGIh*A~ zGex!e#&v-MtKrC=YL{)-DWy8p0Ma>4l_z1NtMN86x!!ZGX}8ixlo8bLMaZPd9cVCM0$%PHxp(^^81UJ{uU>2ufG&$ALQkplZZ#TzSCtN(*O^4 z&3b5HF=}l%K66Vc(M08rY-ZGupkwQYMVqj1_M`de(%Twy)bk4o5Eag!)*y(~*(lp|TD1xqS3h zY}LLkdLOasLpab=suxL%hZnF!N9XO7gh!JsGu@EdT@l}*Jw00DO%rW(8y+AU0txM-1i}N_6zR3FGyWbLMgdg0PqL?mTT`*}!eFXiU>j1{XYO)Y^Q` z2VTQK#tp6@^dx2XQHk@`ui8CZ=~XCZhbiToZtJecic)Cgs0zII{(fY!XpNDebGhfe z@o34y{^1-kh|cmIL3_@K7>w05O!uDf%pk2Ky7R2jG z{g(41rp$E2E19AOW-mLc?dHt&N*K7QxWtdglNr_o)O$Ey36~kL;({v)Mc2}jgjMK% z9-C?ge=?8pLl4pz{`S_Pd=dA<5PAt0+47bZ^G|kp4Sk z+Pg!%X)jo4{F~3Vgu5o3K`3XT8M{Jkarp~wHCC_qydtG0X{vg6nNP35H;pUZ#A!1q zX(o0B786QsV9N z#=3_ZHU=h@8fQN(HmV%yHg3CoHidx~WXzm_;gFJrldFt+-^itPnkAot)K*76^LTn~ z|NivrhqWe)%@d{Xy%s!D6xCjXneG+I$#~iOh1=@x11t-R(x$}tD6W5X>2~K92X#yY zwA!0eI&5qUO!S~!U5BP`W|4CdP0TGhZrL=By|A__M1ESyB6nm+x0XxsS&7+Oo7UbK z6X%n;v+L>;1@cz?^6tWI-nOGDXTEafa~9-rF9(Pub7;FbH>5Y)j04agrjSA-VqfK?tL2BlD(OcwYMP>_$yG_$`OM2NP|EkW)^W zhT&B@!Q8qJVN22GHd=1Meb&$Y)+!3|=tt5V%SoBzD^*tCO1zRxKu<-1P5);&iw=l8o29s5MKj}JjlujUe{c~eBT_*!Avl(5jC3&k<{ zink;&tl7cIQAh1gyrCl_$ufg*=Fe1hf{$u${^1Xz240miiTLP;9_g`s98y5tBzaGl=c1sCsxnbWpv?L+~TbL14=2RCCUA`^wV-;KB?Ce zH@r>ePPZ=1$P4sVC6S^bCVcfG&)=Wh@@Twgje$GbT=;pzTYcZ5ZoP(km~WQFZ9^uG zU;g4bL)PO{Ovy12b580{y^~>&C_t&YA41h1Mjjlv4Mp&;G%mMfS@!f;r9ThZ?nLnm zyp4&sZ1wv#N(x9Vd(yCh@4!HI_+WgIrJn+++mKL32`%Qwvj0)Y>AO2D0nmvDc&d+J1tHem~ zONtf=*$05hvrtDd#5zyA)6jtd^h;PTC5s(%gb^<(ojK()k928)$z>YFJ0aE58`IEd3s;Ak;JH~aL_%a<%GV1k&F=6$_8!@a8_4`k3#F*5R*aMjFss(LWH zYFn+cCzJT2GDikk|G#)$8d|CO%uUALNu@Ay;yMn#d|^sCl)*y0oX@d*27DNeWc@3-Jl0DNs$H=2H~feng2BxNh`%xK7E?5e!+<%?!#Qbp~6j)$g-u z?G3-<3cS@H2v4FK+@3LEPjQBtf`>n`ZbR_JA5<=jrM?F+l~4M@Jdhr)$hs5-TQzXn zT3})IyprD)^7{uMtVwe>i#bUqM!5|aRg7p&rK)QG%Cd@n0dL!!fi7Ngt_g+7-Cm{P zc`YpvF8}1LBr{YmW-|49EVim|RyRV1Wldr`dHVUmu%kayOLMt#eOsN5r=8J0gM*R_ z1OxL{T?qF6A3l$eF>TFgt@Mw@Es@Y5C~&orUffr`etVuXN$7~f*zYlmL|0rEtxuE4 z8fHd!15<`CH*`{ULNChUN5({^M9U;%$tttfw)+O6I{31TQx;OS*>EyfNi-L*_Z{u| zymQZ%hwFoOE+#b@H^_*;4Ht6Xe^OfYlv=iMpTUNUXe}WziIp>jJ0VGtQr=fT9Zh)z za?`pOBW=0S>9clUkJ{t8OHGXuBh=h7Te`Pp%o{>;;loiFeO{yrt}74=%B3lYG}L%@ymr!XLIZC@5*PytL#Kx_S6v} zl9J?Wk_nhi)U@oOq~VgsET@cr(b~^xa#yK>7nGh+l2?dUqh&wa#pQL--Oks%=PgYI zQ-oR(h@l}87CV9QbBcDp^X4+6c`>nJwyJ7=0ikTFkXmYyk;z8tvicG~fc|r^PK+y` zYi5NM70cjvRb$V3v?1lon5pS8vjG<>g)Vm#E(B{(eOaGwGJ?N(1^88mT{L7lt*RD5 zNu_fuMQ(20^OO4_EvG$rcY&XVq|4j=6Bj+tE&qYh+gh6gD#R}qDPa_l zM1AJ6-_(==*`&1%&s8(8AY`d0^nYMxi|&6GB6@Asza#Q5RQ!(<-uhpn)PJFK!BCT^ z$G940A@U3F>YKXwZiWa2KK=(7kEi8T2VPb0{n(yUZbcQIrf`4SEYtvp(EekClF1WY zT@CU7Oz%0R&y|H=udMzvF~m~w%#>gMRb5yd^Tu|j=S}`K---$TxRm|-Uu=CyrT4Y2 zh9<7Av|G~HXICxsy$I%({ge8AkZeehE)TRv=hppYy;{RBBOP0N~tM|H~ z05JbQ3X`;F(F^PKyst?AOArh_k!3FJk}GKo9r*9y3~~2*bpQ7)$LM#uY&2!h!v_A| z>)Qe>%Kn#enERhfmH+)9o8IUY#cCM*?eji|us^Wlp8@=T;vN1s&Lq9lwtMlQJugXI zUs{=qGRfva{imXKSP8Kto-B@cqMjfOsk>op@PGt|H7UCe)}@?rFhrGf#KjaoV9UWK`u1?h;Upxlpi6 z=)Q{B5saekM*B%xJnusA>Z+N2>`1&PJd|_g#*7~q z-r>Q%w)0JzyrJbqgbEb`0bgimNACSQ1<3ieQc<0>x%1JQf1LNv?X+MeTQf)P%dme+ zcs~b!Z*3;;>@bdgRHAKb3mBh<{%W~3F*Q}tuAH*_DC9Fp`5%>zGm{XtVsGSfs-I-` z*Qzd#<#aws3C{2G<-Mb-+|8Ow4V!=9_AZy$Bmx9d@-%JHk0XE(>$V{uJM8 zZEEGF8!M$m`)I8R5c$D>cdW<~kq}x97-ja^n$xlDNw}Gim9zob`~7<>p?8f^K{1MS zzNkOHuFPnYHk}p61fI~C#O8={0xw~(_~Lorxk@|G-8qjKedAaiMr`}>9(=7-|3$^n zDJwqy^{F~i)W@8*hnK#WU8tmR#>6tQ69pB|Laub-nZu-cQPG0jW))wIFRK7cz#>LP zPBlBp?-I?4+5?RC8#NfMV`5`eFOGl%UPqaFHRe@ck{+PJdGMmq)?5!i?egZ;>pocY zGt{ohWst}Y4p>z;fZ4>l`TC}R!fdo-a>d&%*Bi^%U^6pp%D%>M?8tzU`1WXnZf)SZLz+#!mW*MhBniwgIj)KZ6G5iuEae${~6jTl|^gaFQk;bj%WJ zeguDfay|sPvK_V}2m$W7`@#(t*(ZJpGKo(@S&yOVLr#J8Vw_ z?BUG!pHZ@TsI8I(#OTGoqSa#x9~R{TqF>YXcL2MZufxts@~R7sFECaw5kYK!(d7kj)tcjxi-YlOvqs?l3HagVQJEZ0=VG}`{YW)JVt1BxdLh|1F5rDm z6^}fUA(30evswKPgCsKi38UX+NAf54K033f_dQR0;&>L%U9aRHFI`kb1p}!2?zCs1 z9kZGZwnTygI=a%`e8nfs`I@}D?9c^Xi%$;*-sV>qt6Z!}wzKm577B6g;AulX@yWS( zPC40=48OQl58mqn&mORo&>vI;T;4_x;KyY&9vi-4d;xKgz)36emA3ENx6Swni^pDV z(iD>RC;^Y;N^^WSJU}yd{2Yz)7Jau1?nU{Gmc`|if6i$?49nCsb3N*z>YJyCQl9M> zNJ5PxTP$Y4Eb3*pICa!xHcpND?L{^ZQf2;z+S%HY-@ly$+$xA-RM^=$K5MKOuToHK ziXAiZZxEqeal)vu`1anM-dOD&EYqnguw zmKig)3@a?1)FRl8nhMYhF~|AirUDuD&pGze{U!Pr$qblU?j$S0mWMnugkKz6jum63 zZ%biu{Fq_@AS!ZNs$X7JICs6TzlLM_q_6y3F2A_^HBsFTHLJ5)#~E%(Q)Z-Ami+4R zCM^{0BupPLj3X4&;dz1-LgA z7rq`8=O`=NUh|%h*CLKZzKN6MK{tt@Kyhs*fyj@$30%rE^JCx4%jC3q44z8*Zdy`+ ztcQm}TNk<5b2Q8YVGJ!~{UyHsp7s~Y!;T3>>o*2MFa`wKkds-z_7!u~nsEJ?yejw_7>+ z8y)3#y`7?ySM+lJxUE_lXpkBHlz5>5=ABeq?5crc?@ang~lC|mQJ^?e=YM4@G+r0zR zX!ct#zd;a6GBNJozxpC@Q_kYTkm7p}{yF&}!@CAHlf@@U9d4nOO%w20fX`ObGt@{% zMM89~dl~GYS}|^7&4V+BVTqKmQ~2=YMP56BtQwU)I1R_s9da%pzIaM)+eo5}sw}`m zGcTNA1i^Q&GX_`HK858QwYkSHx(>7YM$Z&SI3yDUqDtp@A}$?BA%a*)wx9CF5mNH= zz^1R8A@FRAaw+_!UJ2wpKBxVWN#JskE6P38VW|#AI9p`w+Z8c}<6|}h89!rofb!?C z1Qw3j{k^a1H`z~rOL!F%N^o4B7VP#9a>%P9`MSWFKi!reNl>ZSWCJgpVZ7^uo)k-@ z%4KU_xOzwX+ z&1WNKY0V4Lm3gmsSYan&GJojndxqF9#2#^`q{0x1zylf33_L2}hs%%MM%N9gE2+`SwFpmfiy!#6 z4BsdoW_CU}$F0;G9>;GETE5Ppt9S4jbC*xyh8M-z&J5dGYZpO!gdsyWo|ZyVK$3q1 z)@e^lr&Uf^>9o^8gVdlBXPbn8aMkZ$bJz~nlFzDIy_ERUF_8A7Yv?=^V2=N(L__+C zxfiJK!>j}-E31Z_J>Z;!H%{R(txzyM%M^7Mwv4RR;3b+4N0y?O{Z>Cw84I&iyx!aS zE#}-j@MXWs#J8w*8x@1fkK_~E_IN=#!kLI;H)A4`dr*qIt#hsTQO&Kb0S(xZa3~A# z`_aW|IE;mc#@6brW!Q77S_b9Ujx|OP?fT0*HJaCmAEA(I>^`!x&4zw+Ps)VHmn;j7 zoR^w_rUTDp11s9x6R{f*Nv?KukXIV$2YEFWXj!WHrkmnw!^=~rL|_3CWAt}0a;*e$ ziTN#o;@oXpiUv3P-C}N&m+|JJ-XH`RQ`rrp+e)rO|ZQ_23;~ zA1i{|kHZF+nzRj_=1KbeI!i*y`7TP9K^{P?a|+2+{Cb}vap*;Pu!x4tvH%LG^>anS zzV*%rH8pW+?-U}xN}p{apOa@Z@-DBl=Pnn@+a{xV+vU!A1Av(9E_F2x>y_)#cyPm} z^Jc~2HyJq+?OL?78HgzczhM!#?E@HEm?p?w0THiKaa zD<)pifYVc3iYhilDv{MB-TIA@ljS!L-{nJ=*X+6Z$Wq=bK?~Ni=_;z4ro{8pH4L8u zPwjUF+B^K5+f`)HZdRT*UttHIm&K3zW8e7F@9?jS%BC;b9-NYvPrL29Qfzux?m@+% zRs+3n9*WDq2De|9ob<`1qL{l5MVmOH6$p=G)23zC8J-Ae(>jUdJ96BUhX zEQzVEm{rA!!S;Y{3~F00TYF3&08Qy}2Yl!$d+1slq6g=o|uLFf0dCK#};8vV|I2kqmh$Re+S_X`dPd_;rd`s|* zC|pfdi7mWw-tBiPmx(5~j!`R=?%IrKPDybhv2ZC0Kt@{V`R35fj(3Y1oCbc-Hc=(F*a$F#G&!riCxAY{Qi&Q({))Xp@rWE^ZnRKh+YMHgu<&(he z;eaQLttpF)z#{bg;Pdo&XTrBXXUDB>uoY?p-X7GYIB8z<{QoT zagX|e?hZj5*qf3X&f)FM*e+4H1sA0yidF|OeP)WKi=|;ySr+Zar@=yn4SnK8B)b@i zaNEVuKY#%Z+jN<}RR}DR!*|%P`KC{`zDy!U>V7SCp|!z7O0%yndn(%t<%?XSj&o+R zWn_$!&zxIUr0$dLMoWFDFld^Mm_8~=8DP3RCYaiZDc0wWJe@r-7}A^*ry#;<4D`9x z1+*VN+P~NqrQmrA#L<+lCt1z{ED-W;JQiQi+6NO|%*ziaA6hZ_Y_cBA&lc8kMt3}| zzp3z$>skmYiL}Wp9lE`}Yk9fUGSc*f4obtllg3mLi=hZht7dF+7Di}Eyy*F)%KTc5p$0M*F0kjCf3d`65cb6&8(He5K|;g53jFta#mDjP?}{cJI< z@AP5{kPW=RMZf@uXp40W=hv1NGPO83iHj321k(FMB;TVm$ekk$5C@O7UDB%au=15) zd~qY_>99K794PmN#{Yw96@n+#K=i%wa#DC)z_QU=&^_6qwimxP3QUo!}g zXxVVuI4YJg`kFblV_wj7_L0H+_kdu90Qp;Ts&Wz@QY zoKA{iqh|s8ualh5?)Z#LVEbpil*G?gyyVS5Pt;y zB!NaWUmK>ElP4h#+v#X^CRFGJaN(s=s*uf6)zQpQQ*I@W1tGlSFc?+vQ=AmY>E{Xn z?>aH@hZs%GU*2ZFny!>Hvg5$x6>XOEDm;3|$X9{@Wn=?G zqtB`hkw^S8<0t-R)T2II8I+|S!e}#Ok+xWIC3sGML7mTnm4(_?UvRn zVFQEIQ440xLeO2vp~vbcul$9~csD9>yi@~q8%ELPZ=n)A`(W|%o2#K-E2_UQetCCZ zob9{`+>{pQqvOk4dST3+dW-C%%ocAaN#$31%>#Adtyjf1>{ebb#_&_q;*-UMM?Q!n ziOm`NO`q~&ZCp0<@#Kte8!WY?JY4o*{=f0}HsMedk1ir++K!1nDzqtY0&nFu{~8ns zHUXawGYzD)pJ)gW5s!UTd!e+@cDzEoI>mrlO}6KL{)m8Oj+~o3`SKK}R!ae60O&=@ z^9q`z`n(KELfYtu;M(nH=-!hY-W=XDoDvZ84fN3qXrT4(eAJ6cs3gS%?2~0!+im4-4gbW>4_me5@ z`$Qrn4|Y%oF)Tq40Q(j6)UeGz-Y{U})`2l!;7t2C;1WCCa46jW8HWDZGW@`&)HHTu z&YO&8qG%suPK4SQ&_ZE=`@5*ii<8#}JH8yR9+*p3o}IZFcnz3b&NK{nIv*SPMweC? zRY}`v?E&?AE?}1@Uc;MP{jbis$Kh^O>22YvznhM~VoyOj2@x*NVVx3Q;9;eLi-pUx zWdCiPB(LW3)UxJ>zKV9T-V3MKXnORhv&5sT#C0IYmRkE28GZ$^>Dx1WoGuoO=^MTO zGDcfn_o1+%M?AfRkL<<9AX#5~z>%2*IIf=u=8^G$3W2Fo$0sAB{F0KMMtmZ9nCc@( zM`m-(D8UT8>~ZebVLbhWJvb-p*FS$&@e>dwM6xH^!y*ZsD;345^!rnjN`k#MmD@l~ zbN<@+`C=L~Pw==u{g`~A}yALwS z+`4r`tKn10eA~w-fe5FAJ0-;90DUL5z*riJo|fG9GjPM8f7!y#l9Y_*NM4X!APyl5xx~solvoE!ed0hZlfAEv~m8+r?JDN=D5^g zQsH#xXe+0m{LBt1+)opmo1d_AK1=Xga;+=X1JB})!7=XHvbT0co_&q!{=E~~b1;ml zCC{a*Fku~@w}Ll18Mde+U&83|yW24%$l+jsuCgd0bgCBvN%f6Am+>RJ+l)J@r~p{F za8QmKegErxCpXx?=^b3yPV(B3@jGKH?JDE2lW#}Dc=GkHkinoeC%QX9{{1)YSF2;} zhx}#-4>Mb~&jwe$B(cP6=ayf>0da15wY;jy+#EB2X5;cEi;oYeR)0HdJ!vm}lL^#a{CR{v;WM*jD?u&pvV&81A&5CJN}N z2m<|ndAdr`{o+i}JC4aEa61KR3uS=pH@*VSU^5+9-d5QxZO<541H`r}R zv3Sqe8f~+cy$=NJibh3nm!rc0_W2P$r?fW`6A9eT5gE~aSJ1MR zScMbJ9&CQMd%}>p>}lxHXB=-dS`Jz+b97YKFmWzqD>JHlJ6)m2f^ZwmFKbiYq-z@$ zdUd!W@hsZT%hMyRD3|;6mU+qczz+1S>4uC^46{!ykuk zcw@#3?|2|WFIOHazu%|$w{2#P3_Vudk;j^vnu2ohYYtA%g8K3i!i`|8fB(n;Kg+5}hD>N65j*bZ_DVznYtm8`)5)Z?M``oRIYU}IMun#Bg zk(&ioRSGCqH|0QyB?;HFt+}A2cky=uWkRoX?#xqlb>q;EP`*EG368lCWXSf0|e2NX##5j))96Q`q8hfEi7oiWfYjx!K6#=ZFoCHIRz941OuE@%Jl*s zlsHN$E$oV!SCJC#pb?0|(zR*I{^8+xAGh_lP3fTrYYHxA@t=r4Lo&zjr5R{Hal;)H z7K2hF>L&*O5>HA2R!ieyA|ly8jRb*UF8#_M(N6$hn!iQnTf6Bh_s4gI+a6ekymF`u4oSnJKmBIp>EVCjiRBa0_keE;mfz=#Xe_qZsX1;T~*&# zYmpqId!lG>Uy>>6H;scE4{3;#WODBwlqp6yM%y&h)}`$#0rWk!lw)urNAJ!C*!@23 zhz2ju$657RxC01Hb0XuV=8QR~okex;xKVVwqY3|3O(+7yIcZi-3eUm7;Bc@R`6SzD zW;~8uui-zX#i7u=8+{-=9zXK`e%h)GqKg3{HohxholeOl$rtDfq5 z@yLE+fpbXn4LE>RmvF~5U3y!Fxd|Z;oK6c13Rpwn3^w^aotDQ&wsf)XWz+wby76#VQD zwhUTHUbPmMn5w9b5>iy}b=fU%*aiP0pCIfCwjgxtN<@VEkK&W7e`PyzpZcONPj?cS$(kam;htomsDOulEw4a!BVZz9nL9lJuTjcz;dQg7N zMY3u7xAA7r4~`rgrR}V#R^MyO8B8r_g>as=c-qlu=0rueLpvi$5}kO&9zI;Af3gthb@sfN)>QVak8ZRWKXxo}L3^}^kmQ4gGGKj5D;3jT{D(F>s4 zp6|nudyf^x3`I@hred1LKmz`nM75#>S5KjYfdmy~JI; zG~7bES7gz!Hz z^K8l5w7gDd)%Ed*Bni^F;kje=X7vQP1^}i1Lqo&KoWDd1skVN!T{f&?p!=~r+n8b&?)T{GP3Dlu>B&$bQQ`7E8G}S6 zLco_!bKJ0XE|qO-`&r}utAT^DbtiC1wl=04AJ9^l^lu$9cRXSTa!UqSq8o z@&czpc?#fmdq_E0YwM_#Of%|umh#E(L$hvSkflD=&(>R8`!DeCoWn!!XcV>|p-#qs zoQj~&*v;!VY}NWlS*SVu5%YRd3eVtmo< z;2BmvMx)g0z>Diw`ht0@l}N7pQw6k1E*mgpI2(zbblp1eE{coq3#*yxQfYXk;gK^5 zC-#zHOUvZ+tT{PS!AHs{n7-d+R3 z-Q0S!zAjKhJ@qVXG}6?CpFv;K5=6$S_n@z_$UpMV*6}A`wQFo;tmFQ|_LU+MEY>F1 zTq+f_VmM1bxvPskILH`t?B>%H`(lkWK_6b5WXD|S<^9F{33Vc$(`U)IE)?8Akd^VRP= z7k@{3VQi>|1x&8YvU>&8A}TVTv?9o9z>!^b+K0$CcVsbE1Fr)oJADi-{-0p3_Av9L z(NVd*-Ce?@ZDiIT%Lma$Ie61az3D$ML}#XL_?S=7xKrPM#o!jQomw3JmG>IuGN*DF z+sbn--#FP0`%ua-`8@(elYc0}Ur%^3f@vxg7*HM;TJ*ZEl|%zcT#3-s*jUEhy)iV* zR$j~FRa3bzmHFRFRQqbcJtgTajQB z*8f;wjkgAdpzMX7Fw?mg3?*PNIIp&LCIY+LfNj|z*Y}7Vz97c>23HCSE>A8m8{#tz zjSg^a@G<`tG}L&HH}^4+H=oQNOp06PokLc;a=WeLcG_dz$`GY0D$TI}TNY_*c9AhB zL-^U12f)xAC0gNNP$^2>jtP-_u(7aUC(DRHFPRRL&#H)fwpZBfRzf$m(EODeXDyiv z1}`G%u)NYC*$mYRu|0sk5@skHnEoewFKNFN?Bt`GjkF%eoSL66%;xJtv3LgW0_}G* z>d9(<(94OPk}i?39ACCJuklFvf8jTwI9}uq|Ksx?A#E6S9Jx|-q35F7c`i}`p;;A< zt@ZEWjf{c4D#zDHXeub^OZ_-QU>0{cd-Zx2qf6nS=szok7jZj8Fch&_Na$i@#W<^_$Ln&Z=~U2IRYp%OGE1P zoh=_;KM*~)c&UP_0gGypqLTY*{N06zVwbhY=G%AR&3n;jKAq7l_F+I~&f9HMJ}z%$ zB%9}VP{9_-3LZLqLM*Iv*6OU|ty8T8t~G`2z5gliAzx?rD#+eiYT+E+c0HeHa9?T= z8lFejeSUKk1;$htCb&kVz>YinUw=B+3U0-ml(e3yjR4Zc(WJ}XjN_v^!AEX&%}pUn znjM1wFr0X0+FP)Q-H7gIXVZE#6_Mq6J|FBeyx~M_$hZ6sd+XcBuQ_nFw zq|TE8+KdxYsIQeAaxS0}f-dHVw>$T~qSH)L?ke%gUH< z2IR@(gDJe{18PB_p$>oKywcK{`e;&Ks@3~#o~^@$>Njm<@Sf4y-c?y+05TdfZfsb- z{fLQD>?lC`M>`-ZLqS7jFL!_t$*_(}7nYQ8ZUCPiAN;!=Oic?8S6cc)B&ww&yGVe| z?~yS{PvFgIEpR^@0rmF~=pNnygg#4}j{b?=-?uPq+fK3E>Lmek>Jxr_+U99{kB1lE z+oHEF+Hf|?pIcM&n@k3N1f*TLoG({!wU)0Cv|qkl*}0896Z`*3aM!#!6Wu`n=gh-S z@JXE+%&(!!6XrQ}gW@c{6ctvh>5nsARwg$vI?BCHoz>K&N$$3Z!*T05@G)^PTO$1J z;6rU-9wg-Bz5$J}VFBQ}Qwj3b9s8^$M3qV1}L1G_I){U5_JWb8G9ksw#Hs zfcHYtWc)N^!cWbi$ZegSoxaU$SBKSOgX>+vA2>J^!@|QOeIz6To9|DDG#)YWuC>`+ zj6<${So>IOpVRqWMyKuiqR37r+W}HYI3Aykc-mw3AHhJ0|1w%@Vd>q^n6X} zLOD&3baZi1cqUsVn+Jd-RMeWR@eoLsRKzufLzJ5We+Hb8Mpk$qlxm-zbYTrNIvs3X zf`L3#V;}MKTih=!s7EQ>ci(dupo!e)P&|C^F=}AcZUi_(SD3C=?%X(Twbj)>3P0T_ zN?tSTG>fNu9IM|H_}tPuB@!t-LMVi(7*tAF7027o^PXZMebF+isvys+rd0(T4a%WJ zmPDY>9oPi*G6;htLhmu-=?2KLA7!86x?w80v|`(Zv8~^wd*4H#^c@<%y=}74;84(f zIyhv%9!Nl>aA?2LZ8x&xV>Fg7_(N5dRv12KYP`dZ*E<6x*B;M=S4{()jp7tEX%JSkiDpA`#5z zpcFI=^H+N+f4XIH+b=2@7JCzNLGgGJyuJQ13K{+&V0^axbeURn1!EWro>Y{iI`Fgf6<~Cn%F96xUk7G|azu)jX?N5Jcc_A(!&VjkJBXs2! zH%8{NM297C@-sAAVgCqdl{n^e>_9&aZ_VvQGz}>O3Xm}3o6p*7ir-aL4X2M+Prr`m z;`2#SJP(JW$bczVUGVVmko9^xmlrlf;3DVDBu%m`Z;=x^OCB?u&luQB)YT_PfUl)W zFG?e!|((D90e<78!!x2Yq^^jVQDjF97Bq=X@RrI50eJPK{|Eo88VL#_wxZ&3ldSAWFV@sPTO?^8 zb|0=2oI!ksX_M?L`Ql0eY}0-$RN-g`i9JL6?^vad#Ya;{2r!{QjmWfFeGF39vV3~< zGFgN*I$6R!NIWzr%{Q@&;NwFr^xlza_ly3Zqht`z1C{|R9PZ4EaPGIHqPIRhK!=3y zyH@Wq()Pzu?_Lh_ufXIuex$|6=lNaUnHUjKFI&!)#jW18$P=Q-MZWkJKcg5yGiOHtuCMLqhce!leMF_2sA zGz-gXyhJB57EUB44=Ax(=cQ{|U93fC}`pAO6 z(fMv?^?qcP9V$fd&K=5=bKK<8X5775{;*h{y0@a{i4GNoc$s_B5;OeldO96q;mNqS z@8BOo!)IiL(&eD%dfdY@K9X^LMIxtX)TmKAOJU(zc8qJjYJqZLy=M)}NK2zGRw-w{ z==i%g?*cFscG|DW;KOkw^>B9|5kp3?PmE_!O^UUhCZL{h^&y>_to)*GV^c-}_gBiN z$xoXQc0N!?!nG=Z`x7O5{?iZyPdI;PXJ_Anhar#A**4lpjZuV>uJgi{SQOP4HN$Db zPH0vz`EQ`tf#zu>&{M4Sev2h_43Kxaz|hU>xSQ#@!@tUn7A`WbS;4xf+UDLC7KA zRdw6~dCOL>d*_@e+RP;{D(eX)tLDlzSq|oaF?Z0m)x#%_F#&1}j0^Z>F{^P)O-;8z z^Uv|ClYNH{L=yOoweHjHob01oH@fgvys8dwcc%mCIvk@g9ct6fB%oYv#;zm|bhj&a zz|-Hutes%0Ci>4`Jn-I)+XfQ>{Cfu%utU0hKf4CI?M;4^{JqfvS#S3klu2NmsDfMU z#m&kN4=%c_dV#)1H*TD%65jOga<{*;V%)BE-1~8%YcQ#YKmer?Gc$b25y1`dGR~D~ z#fGWsdPUwG5(v#GYw$_&@$)M!T_#`s0=C|mM8;X;^K>=MUz6fXj)#YbMP4u0m{-$b zy?XGcxQ}sz5*Po02%13WGt-l|)2!~8KeyKv7Iv2yMD48+!g~G8T$X&5C(mSCDu{W- zx!XO)3A8tl#N6B(atlm%Vd_?rEwGbU-YbuZL-#jm06~>9EpwsLTJHxw!6>!yk|ELz zO`8Vw*)na*jhra>JY&m1cwMQM;x{_D{Cly zn%ea5;0CLT7$wFNaHbMba5J7NLWQ?A(GAx zla^;EMNXfpwp08~tA)09Dbd2?!|Id2La4=0fw&pm3$fOsLw>&0fsGD|n-5?XIPxLi z6|@NfXSE<}D9DZq{{zT)y8&u?F3b9^cAkBVuQSRUZxS>&U$>pVJUiOGYQ3`IaDP6j zc#81j0xbplzS}R}AF9W$e%42*4RR2jEnq z9sVpL5IMPE+r8#4ud)~FbZtD0ANp?sq5lD~)&S=ZHU8^h#$8)2hdr8xJquvGb@Nzw zRESsKyccMZIG|$^E%i>s`K_q58(BJXGSc(!3hYufE?kYmj0#EmkiF-D;JHn%FDS_q5z=aX1T3$y z$4;7-(98Rc+PaBh&g$^ zA?aE>H5x*9fk;9*#0=(9A-KvIiHgXkt$lF{MVi5AvwWAWSDD$eH$_uih*Y<%i-`8?(e*FnWgXU3W>)hdb{v=~?@_|jhXZDKlHcT$;n;NA z4LNQm-4z-3zCQ1Pt<~l;QL&`;|IRobNi18@+upx?#9FHpsn7&jBA2E8(H*CeMdND} zr{5R2OWyCG#lDp#%(H<`*^_luT&~ zyc(&@kz_?&Ir_`w*O4{+zd0i*SnKoG=RNhb>`*y=VxUVVeKH(EP1u7-Iy46(_H~mc ze(|R4X83Ic`|*`uXN@zh>|v)!393{cJMOyAyHqxRhJm!qGKawtq8DI&YLf&U`i57#F`tbXp$cCf5P_% zXiajjc8O#?sOW>`-E!Jg)Y8i$2p!ZA_w`5acK2L`q%~I&V8k=_Irh@BwZa+^6()E! zAwFNu1aoh)M^)BDOUQ+H;@$cwjODl|UskM2+)x>Re0WX6KhBGJaXH@vNDzh+q3Pd5_97sjn2jLdz8jkT z<8uGdm#Hf&ld`j8uumxb#nxbraa$f*hvjRX+7r89)K`N&i|vi=W-LKpvU5SCuTi`) z@gt}6d|rJlE%E4$smpY2mc-PY2QB-sxz9f5Ps-rkk&$B_>UKhm;5CF#XZ73R0`^?G zn}*^|vjq(!xT%C+$HqGN-QY9Zjk^1UzswIGD!gOf`ruA2s>Lw){#@Q%$d!jUFMA#%IpRYLppHTnn#hgjq>)+HKL3*_ROO-#klg1oiI#-C#j zZi)3eNPhRakcFukpf!G0MeE zIG3k>8)FI>xZ>8^Z(WP(H)D(|i|V%E}&H1R3}=`Ow2QICe1@+%M@>saxzQoRDxeWUx#? z%8z2^QM!?oDP*ic5#Y4zjlbz$jWEk}cKWA=9PZT%V5L4N{IGIwt9qpoG2#20wf<^n zU$F55?Zi7vFvqVYYwxUU-+6HCVP*KpQ+6O#B1>dbA2e9A-}QTh4xPZP*BBR>NdQc^9Mv$)$t9Y{m{>8+V>)VLRmF#xQ(VtC zOemsm<4Q4Szv?&H}lfb2w$eX#T0=^WQ;T5z^xyTKwif}N_1 z_&3xRyk@o$e%&6+pnQ2Ga!ke_c17Uq9u(}XU(5rAw|^WZ|A*w z?5gKJNH*Fnu^K$xwiXgC^x2*G!9DlyDma@@iIR*24NLg*LyPnXf zc@HYVQ`g$`_$1Z?^3AW_zllf!nY)32CuBQBhyHtxw9D)IQBo)a8_^%4D}Qp&*L86u z7u7{)&H1}yD$6=N-t@i*$1^u<4;y&H=1sH{KF)Vz(%kOF+wq5XU4XPpFiB$B!~O1q z6e5xel8c1HcRl~g8e^mTXQi%UBO3-Ue~vDn^6xq)@d%V76%p;JHK`x&WNhf}75jR|Dx=*%~nwwK5HS0@}0y2l1s&RTm9< z#u-{!P8w>nJSU+npsX&j0H>i_qqBW)I+kM|#XYRFkRSnlYBXfR9~7rrz2f=@*;l(dY82DCNHIuvr~gi+tY3FH z#{z*cvK?RFM$Afo?oVHBKfyZQNPOW$29A1)rM#Y7r-B*r^dL>w4 z1J|sgZrnF|ILr|*fZr#Y%;RZMDw$Z0Ii^zC_^BAGbuISqMwEcx6~bc=ukj+FI)=m? zE7WDGv6!%kQFO^Bwh`i~Y_bkr z_9QtBk?4BtSrlPSh-}C4UWbr7^m{aIJ+~eDA(u)n8EAzZm?B-d2qSmaR#f6^L|)ya zOoyfOtw{8R+@A&}l`&8Lz1aCEgOZ$%-a7Zvvw-+Y;%dMrW?;AEkL5eJhk*VB!&U`; z@juN`nt-?s zMzM7+izfQe;~zMWQ5aMdvjQtVp#;uzCb7kd;hyIfvGObV$7n5=I3+(iysspvpc9|l zeB%038mJC-EIkg}E(5BL)mTnFG-mtCa2vjKeaG*gsJOCxh}kLErLIz$ibA}9m2YSx ziz0^b(YTP4dc=|u-R^e8EPvDcV1QexcDP|zU9cocCKe%!7w^i4aH&!LT!?VpY6O5i zD)v)*Z|^9+Os8a&G*+M`)CBHs(`5-RSYIs4>Kxc)%?spW{t%&J2xEj3vVP;!2+A7S z(23i11Ip8N7lGoNBzFc?#x6?EWIyb}=@z|(K95nBynh>BF>+cazUhBeenlFZ0u_Ps zz2ksNg3sP+UXccpk&(GFC4p&g+^G05GqpT*!KwMa6Gp#lzx43I8KLx_TgAMxspwsI z0|aK7kK+FF#S*xP8y}DZs-sdG1D5}+8Si7iMWQ@yu?2o>j10oDX-^<>h7Wl!B={orKoS;KQ|q_ni?Ab zz3V}u9rMre`Wx8qo^`=lz&<;}dbp!!dKb^|ZhfLJ{F8bLf)^qJd zzcj(T#$QtWzKp=tsrl?xWcm8?;sVnw_m0167^5m%6!J=&TT4GzF_$c;{}(S6RFN&Z z=5rM_d*j#uA9R-gtL={<8IH;OUO({VFWAeSNSW~?_D=x8pj+OzoScj&(l0&8Qyr4g zUxAihLeO?asBQ%|R15_o(H4_SA{>v}Ol3rD@-2{BVs9(0Qr}snYIQEMv)^>v)I-Wx zt}hk*@5GffJ;4e@EUX(OGYPFV*owuFNUS>SBErxhY36B6k;;@B&JfdBu0@4*6s8rN z-lnk^op{tegr&WHM%*lnR3LU}*-a+OjTgDn zf7ct>h(+H^G3zLQh|8-(UG??hr24S@q>e5XI|zmN*ZO26_v(b-W!j%M2&=STp;Xmh zN*mF85psVbS4vL5hch7mP9W@&tb(PV-7)bHR=q7?M;@Lqr(O?+1%gm>$SRhJ4a zHSnGsekfdia}a_ah_`?{FrX1@s!S%>N)%RitXZQ(sI~X?gn~y+$ryS8LF;ZN0ip-Z8yd$lS zdlB$?WBx)|KNzpW287|XnC~WB)kX4N_xomxV#{cTa}=lYhz?oQj2Ri{@%zY~1mGE< zCn5+Qgdd@?eyjb&>};P465j9Dwfj&4nDlpEc6wP8%CoMqCB0-LONa#y*XFtDEQ+84XCZBzCMeJPsgknBNaalB;Fyj1=jzBMYYeWGPi;G}Pecw@Y*wbV2 z%`@k6{pYoWFsfn;JY*zT+3=dGr8Zql``77NUY{k6s25q#7c zS?!D!3<+*I>xA0Dw!LhFa}S@DcbIlV6^>rxQPECE9+NMzesUni(tgDa%{tBKKh?Gs zD0#2wkFbyxRgr;Y2N19%Iw1t??$-47I1zCUoKpH%1~VkX)pnvuyz&9ch`o0l0`UA? zpo1C-_oQIGXmGR4mv+>g{=nOUE`2x^ij3~* zOXpvUbbqb*`vwBpd3nk%VWU&9Wu~smc(qa~q|Q=R{$n#wjEbk^;yy4kUj2C~nIT{7 z8W?h_)Y68Mo4DkVK_ZtS?n8_!9Gk{DK(ooP`XZ_s2)L zcL(cj^Fa-05=19+*15|y`07Fz;1f%JTqJM=VV~0GMzVOT!QngNYh0c7BJ5Xe$y~ej^s1u(FjTr6FtlaNWtfObB zmw-_R|2ezf=jp!A+Gp_jrE5F<&H_O7x%0a( zdO(dO^ziU^LV^k%6BE~7dqcjX+lF2lY4MqAHNa1II@d7OFamz9sgsHy(!4_z3k6=S z#PzyVuqk`wW-@LP)s^?-uIOJ7%8!~tA)Z%UeHxE9d{WxIKZ5lpD@u^=r{6l)W7}+? ztG#8@dH+VXMQj84P2?}pMmnsh0R(7YNEL;?_UMkh?OYIdgH7I3w-TJ91=sLl*=pO7 zy;~?FLy$O^4!D@*xf+aPu{ndAc}~BVqV4fCWw0(C`GX2qWf?i+%;HqGN6CeU<83gT zPk4Wo$%^(ZDNP1Y8pVaGDs6=w2C^OGYxztTm@!^-%@5M6DH1yQv%uiYAQ@`yNu{@+ZhhOOX zia-oYJJvFJGmK2peY$F?c;`(PxaoE&9ODLppQXC}B~c|w0qt0133^h9YHi}aX@o4QfftBdX+P5EEb~RNMnCfQucVy4!3-y| zzFgMN3{xBcAi~??+&YA;n1$Ic=n~8qjYC+%zLCoLI^lCKk+hx-wXZAln~qsFanChL zk`Ur^(&De8YSXcVi4`ZT93d6btU_W4vY+*hqi5Fsgh||Or5LBNw`C#=VbTQYXu@zT zY81-^OPF5U2-thC^FP-f$Y=453X-ybs%frUNg-6!B0*KaE~Q;7l}Olm1tjd7r49=} z7T(5<>HuRaCiE;eRZ;*QZ>W1TX_e_N)Jp|tZYVU3R{c5WNz&eu86_;xU*QCGGAix{MPy`0a7ta; zNmT8fcdb|XVy*ugelC60P1MD;pGyhdvk@9V7w)6>^1h_fV6hepf0hZJ>`SVFx4+-@ zmlceCzBCgP+^FUZR_#yLu=L4frl22#0wvZQlF0Xh$%NR@f6*L4^Z0HR zyhwYu8=z;bOh7Vsl-WHMEgTscd0JcUr7U#af%W(1r{}I1#c$!8IN{h*P0;nTUMT`k zzMdv!UHr@pWr!Bf@X2p|kpk?kt_OnARJBlb{cGH;@0gj0lHq}~xRvS0T^1>IhtngVj|`l;_K})evF8H+=E~>ErKqedVQES0 zrsJxO<>_vVo9O}} zrec-SUwsrl0OrQ&Q@Da0fs!=EnUq^=JP3_}6sYL%j>sHnMBRh{+lj2@pK z*lHZT&ukK)E*enDkWkt(28=05^>g3npQ_1o>vt570xJhlOmm$cgoAlBY{h*00e&7^C_%9B6*SnX3RNhh@3h3 z2ssY*f%I6R1Ks~9pelZHDB_k$wm}(3xvq8*PMx0^QW;3NtyoR=CXK&J*xT7vGHTWV zbl{9WUeD_oC1vFSTzLWg{d$X;Z^HQS@6aw0M<-5P@9g`g_L##4kr0dPM+0_m?lH0P zD&xej=m@vJXRbK%GwJo{uZsXM{~NuJWvkL`xw${c^L^UxmZ1sf=Z-hgPuEyC z2W^iGZtH$DXfAsT(HX6el|K5+uPinSjjw7yyfyZXD4w~XRV7z$fJtNK2 zWlQ1xW?+(|vzvk2_te}sej^fUa3G&CkKwX(fw(GUaRQdi@%#awXh!tdv-lT78;D!a z+{e`;ryqLb?<n%UcngApp@4rfjdjwwc^I-`NNxCHO; z@sqEgIXRIeEHRqE7G+Q>oEzU204EG6wSQ|_|FG)%wG%ejx50z>rk!CpBEB(5$ITGf z_NQ<-CZ)HKlsAngzLu@QQLHUD&#nA*mRE)5TCF~;ZumBDFgeTuUYM~2?v%+HjI$|7 z0zW2hggmQ87QPq+w>t|RdJNk1A*k6|Cl@{U)r7b=!BJ*y7oKjK6X%{UT1R zDdFA9L?!IbH&TP)56f2X$iW+e-12~7?;a4wE@CN z1aacIT-5V?E<>CVeOTYjE`=q?@hZggF0}AZSqMnX?q%9%GSc;Tb2}7u{qP;c1n+Y1 z(UuG+pb1_zOxoVBlQm-Cmv?nXEifK?ywLbc@+lVxU9OOa!CY_9@u<5?x?GFlAxF< zJM|uv?|H}mw`k_Bz-$q@>(tsK$Ozz(fGZ+p+E!C6!VjtAeAxeMeoppsgQG0Q52`MY z_`lUgYvOQmndzq>et0rwxb|)YeCr}&8Lv^AxsZ|dAFK+|z5o-)u6&t_o0nWKXXz*N zvG@KTErIZ!b5&>^ME2Ij@+gTpO1S~Ns1cd^-}@~N+>PdZh0OQbY4IkG3q|fA#JWbB zOWcG0IWvm?%AZx^gA5Ih>bhRNR>1HFs$HF*7uMTw*gbE+Y*`xh4GpT^kM_Zb^BMV( z^7*TnH%D)|TXlj!)`^`RuS{Cw|M2{4zpIsL_t9_k9aD_DxAhsF(NH}#FZ=4%@v z$_X+RxGJUkHA&yd&_)m9z*O%PhVpjU%z`~^>*iOy@#>q)&i01CAp$L2^ab=S9(MQT zpo>8io0o_6K8+A>8#Pw4iglsOZdPGeHDVXEX>z+k&J|e2HQR|5xsIy<4|w~UEjABo z>UpAjz_m78<$h-{IT246SxPiHm65e>ZXuw5L?&Mv4b@@S-L%x*<>EsVLBaB#c;#yD zC537Qw|*43+2DqIFAsHsa}Xqd-7w~s)+YaVlHlw;V#3nn=MDX$w(2>Om-2xewTY`8 zZ;*A?`k{o(fCR}ob#$a}u@u~M!I4(_lSECJgggRSt4)tDQE!oz$M(!mkPxfhyTg&W zqekCmZ5z>pmE88hZ%@n5ylbg_1np8!VC@!hssUjtsKGat;IPBB{Q@oD;Y~h+V;z=OEZNk{iekjf10}qSI5^PlrUgIpp z^Q^M)kUwh!i=3t(O}=}K<2|~!4pBN6W17J!89jPJg{=|l602eih-)_M6ywcV9C0|1 zrxKuLsYKsZxJP8vQKJc3<+@8Pp!7=8>@!)>LXIQETb9rPg$T74*8E?JdrB z^fe`8+Q$;Wwfa*J7zo_ zs(;i-h8=eexyI^7e19zRiks0oNgG5>&%vlIJ^y8qwaG?Gfkv_z=phxlx!HT}@-st9 zSGSE+kSrc}|AEFMx@&brD!T1)N>}B`PI!DZ`i?cg$Tiu2>SgNeT`5FA^b*E`d*xc2 z%&y(+NUT>f@5-hJL#VYQ;%8)Ic_m)^82;C%jhJQi+8O2<3w$(=u7s!sA25xGKvF-@ ziNZ}$zNp=`F~Wu9>{GBNG&v~}1b(SmYtU|USJaq|I>>Sj7a%4~DD(5^MnlWy)k8PHkPiMQRv6O~F3To~2 zgJF}D=|v^(Zgy21hQBgM;%nyD*zM#fOLAH1^8#_`hQpIqEgg;jF0)K+0@0(2K*HM; z8%gKp#B*|Imy?&NrMh)CEv!%VnVt?2l!s0S4K>StKFvqOOHpp%pFGJ%pADXQb+>O9 z!@mR@v8w7;DZoqNc=Ykj)A{lbBS@83%5sZhbRO;k)P+U+yWh4=|I&8ADJt9lo$*jF zd3j{c;iVS-m47XE%{Jr?{QY`!Q+&&B#La%DR)XEdI|v3WfyS!pTE&o+^L*7zb-{WG zQ8xKwv?o5elQ%>L{X;GBk?8cqg?@7>dDM>XY?9%0E6OE41;;W6Ys5a*|QUz4KIN; zc-nJT3n7@)|2`hHP;nv`4swdTsLs(ZTPEwN^d=m614e@68~l(RV()@r8LOFOCr24K z+WDJx#;SM&*3eIJ=(QPq3v{(yEkBh0Fdy)2 z$;hjU%aKE;`4z?4*$sZ_#@GM=2a{7dSJ-&U(yB_ovz(MYBvXP4ihxSD?y-Xm41e_z ziTm=8IDiH7jpFciNp@&Brlch4{L)nv^c?~m=i4O6A4*Rvom|?K^}#&u(lhMpgfMFT z`Di)2Wv;Fv&mp)FB#~RmO9Ld2`0Dh!JKN=OWVe>WrW^9JZ729h&xglaAdT<5jex>< zj4o_Yn@4hU)KcP{o5lKwZNWt=+8Q`KZF%EY=y{r`>`5TL*$&5p#gP`xg<4Ko{jE7{ zMI}%b$rPu{}b~X|hN_k3nu!E~|&NvIFM{BSX(m?@v)-0yXW} zE!?;ut{?@*h^UJ}lvRN#oOzP>UkzC<6ks?$%O{>rVr%7!mT$8PaA|!*DU2_{uIa$J ztE+Cd{;{JXlZf7WeD#8aUYnKCEa)4_xywV)Hv)7txCH>xgLYfiBx08z+yOwuXAW5C z_yNHUiqJ8oZ3ZD8p$PGI8323g3z;wlrvEeevfZ9OUyHz3GwMNCc zd4}X{;afD!NNO=x_2r-rGsFQIiFgK3~jZV^N@07IRbdjoIvr1Gw zf6u{wGPj{Yo?XePTpMn!e09uIS|PbC)tXVJUN0S3d#q`KA5~22DaeE!?~XUikJ+93 z4Q|>FC@v@}UZ7$TZpHaCODGb`+I{hGUz4;LNw zJH8M$xBGZb>U1_QzWf_&HS&0n?i@=KR^MhgR>8m&*kE!Y(1|PiM^5&wk+RY(OZZ^g zocLz1j0AUiR3XaTY91Ypst$H6f0?gY*kF+b-g09bv{7!e3IoU73?_bxk!bO!SgC32TMTcbPvbT>;A{I^)(54dH}j0qb${2m(j=tI@_Z@+39L5X5EfvI{f@4#L%1 z!|vOYmnaA1Gi>fmVAkpj@o0iMaEj0Dao@yuT~4>`%PNNOi0?i(4M^rzCn~mOd~?R) zu)R2K`WO%6WyB;QZIb|J7f^qGIBEpS%7tXOP4x&pcQV&wPI|FBX9RT0Yk}>_a(JfxcPlE{G;?GsoC@;Q};NQ!W4Z0H|o@_yWGyp z`2`YNqIiwiV}yc2r5pG;-Pnf`H#j#vnv{Pf>>aYJplSeeS9W;enls777J=+-uYF6F zw*!L_g`wYcMcN8@TAt2C3|4^1aQK?EaM70Tm~- zG_d1M>-vo3^u@iQud}Iy;6L=LHevnCpiDv7VB^hS?_|w)@oC7)%~$ge5x~eKZofsB zRL4=+xDV3x-KFUAn1@XiNd3{|#Q_k4+!ZJCA8LT8k`S;ie;7FAd(I9F>i0M`D{eS_ z*TUUKHsp^LBXYddZgSG}cz&>LdP%iSy^*Pm-t_u#rv`z!db_wD`H#c5AH#Qud2Fh# zivrZ!j9^-jURiwMc-DhN#&pZ2`hkstwCIrV#`&Jx`!*D^Z@O?bw)q>FGM zE<_!2o9x)gMJ0KpGOl-yYtTE7)A!~~QX8^9ixsZik)D=D<94$*xj0##W(j@NlccIm zZ8@4TS%A5R*Kl5u;M^}MVw`SpL{_<|riN{MC$~{*;xi4f!78!Ul#QbW9;HjIyzbAB_ZuYP&w|Y!TWZja&ye5n#s_dQ8|L{*SHPwLz)6=X|bh`m! zEOaB&x2}CiPGm#gGyxc-mX;fR3%^Y_-lthMJ7zu3+K8J9FtYIf%~tC<;-aGPZ0hGP zkNhU-J{&>nvl~^|47m+a|84aIOA@#?YCIH5G0Fc4KEK9@Qq3K}%J@3hY9DArI+n7GUd8B_ zKH+w^m#ioJaYbVHi89G26xd|%n(EP>VWV;-8IIM2^TO3%rW2RQi!;8=P;jQ8*;~G| zsEnrCOCuOuNh;Bxzi0J_6?8z6z`g7Ipf9Om!fG>a{h$Rp!0LjVb{tSRY6=4_yO8^w zj#wqdMbAHP^rDbjN)aqvD1vD5AvT9-OV}paNKnZfbe6Orb0VT-^It_sPzaUPK$TX* zcF@~~$L${jidhkjYiZ^To(Gm5oAa@9yk6N;5hY>(YBI?Xwyir^yuAW>r-6g=+J1Q@ zy$pegybS@FDy1dEZ@03b#DT53cggYXXUd0(zs=katI2Vv`wmly%cCqLD>BO3Tu6^# zfO|o`LyNiV;G-|z?tcJ6Clsv2bJ56&kDM^CaO%@X@ZFX> zUaz#jOMZFFXR52h)jR@MXs4K#Do^ib%yvep=;NX+PJ@A=_*wYCqoMh)a`Wv3@w|Fg zdXNs&DH`Z#|N9)@A)p?L@W-TUskZ>{&%dh5<#v(NdS-DjV@zx%U4pManlQVRk>VXhj(s_nS_ z3Q=V-^mbIS$|Y`=;rKQ4oBk>3fYrm?u}E8d{d@oa{I_*-LE41}rVnZ59_WMVJ#7D6 z;1yIkSIP+k6groUhYP|pTu1;c>6dv`ZQ5iUBgtRi zkq-ImsH!$ycNV4$R`}X|FV)YnTIyZ`nYICM=|BmWV0!UR0ViQ=5mzXgY*TU&GNAS` z3$B-3E+Jf<^pBArx1yw@e=^agrKavkRBo1K-c>Dm`bMEt>6aWSBd+&JtyEiZv58m< zsa9cs@jIQScBO?5c>ZMM$I8>=Uka)^><^P|O_d?gEeO~vTk zqt1Hd5G~kD)I&2aCu&fe{!N0R!h2059w(m!2TQ#n%Mr{oilm6pe=9cix}rD0QYrm| zrL0Bwr$~cV9v1orjSrnPU*JBI8^7UDOR5H>kL(AS{-w_j!sR%LsL_sjskK)Vnd+qz z%=^OD{HP0NbF{%m38Y^zbXNolSV!r)_B)If3GbhjiYqF#2~zem<>Mq+rb0^lZ0Zjr z$_1>B6W$K3eGjO3Wc$e$7>6}z-99WrSGbe8g+ya!mZ>0BJ!Cy%$=OxT24ZzatWrE< zCgNa>^#=bLshv81k0IXmLj&TN^-F+I2XZ;bF%;7WjJACM)sUel_ddWIWth`XaM&We zGp5)1P%Jc&=p|tW3w`Knj)RJ1HiX!5hE_nMMU4jbbwVV~1$?zN0C9NnrKJ3M^78e~ z?_W;Nbx{#vJ(Xsjwn{lIXYUd+MVIU)-&>ri9dqY46wwa`#T$E0kwfF@q15he9{cs6^|FR5SnG5A_Cqeo+Q)y5DsfX|C2b#p-VOo$Y)D zs#0qqO_yl;i@VUxO&q%l_7Sf10#hwm=TBO$%neh1PAq_WNPez!Zwr z-m`~y(&KLcbY#LloiEJwfJE&61N&mdolwFV?`y60PAV$ItHyy`2)B33esRaC3#9=r z$Zq(@L9E0fyOSF{MwOgKG3JhS90s|3&}|@Pt7B;<4wletlL^!1^S20(pk#~;n5AlN ze;*=-ve0pkwf?l>aID(=6p@l``#I!l{=?x{_Qq|Q;|-biwwGFEqY1m8=)6u=sj8cV zpGR#}p^ zirZr@ix+2>DKroQqYL*hM&VBAo`Xs6NRtf`DD9;x(#X0H-N7dSilDH&OIpJCA zHr8*-X}BGE2qxaw#>nCJzv9Ua%1@KI>+q$!ztimH@{R60(AU zCcMVSO40q)`WXPDrP|;i@5YhsBVhH*lC<6Q;VxUNc)|~L?!`W5`_H#qT!V>mXGS6( zd5gYAY^*{rfQ9dC4^>T%);TjRR(hC!a7j5wqUWN7!qE|rs5qfURDY-Wi$MCgfl=o4 z{v~v*{piolT5f2yY1cPS)F@##d%FlM(-5C4IX32ZkXf$6k1+~ndc*@`J91B>se1~qyZKRL*P0Vv1 zRfCx(mf)MQX_wlih?F70A__47_D|-cZt~oT;&!hVH(Q)O&B+QeLBg5dhxK~NqvRJe z#t`>XhABT7LrdVsY81fW1xHU7)!XukI#vW~h6eLRVodYsbGB|Z_IhkV-UA(LX0C%5`W#+MAK~qb~@@)5{ z^pxb0(`jI(yrvWm!6~=MQ;_%Ur5DH@r-1f=BGEZhT6&kK$|Agw+CEMDXGZ{1!Zo%( zz6iU{S^YZ5oakar#ztOe9sK7lvEV!T3=hTRCkVFXoZSU&CO6QzhUfqN5ncDNIZuBcs^^LjI;X~+aVrEznc zKNSI2fSp8cfQtBXY?%N{Ib5_G&v9&-f|y{{D3xsIg7R88{8*i(r3`XRt(4}}ZM#A} z%d!w{wU@1N>34^^Qe!l;-&|Jzl+m6$dmW#bbckQo&d>a2SUvpr^0`+0+xYJfwL+9R z&wf&3oht!6ENN{RViEgf4Ibn$0v`Mox>1I5@Bnf_Cf~K29Vkk+bT=;+up$0+SYmn* zgPm{uN%+&=>L=&Lpp!l4fOYP}Ywp>yD(96WxRW<@3et19U?e^UX=(-WZzm2TcPp{~lw{Lw5=|CFAVJPzz2B0hZOSGu8y%J%>d;ZM{TRv|v3lVYA$pi==a|$X>w@xkFWI{t zUe3P!=4gju+h1c999kP@b&t(~4z1wlf(uNeiR>s~j*A@*_ScmS3_Ep)fv28}WI|bZ z1ijU!4hDp75KzZuvqN;oXgJpT9JdfBc9Xrh$&F$CZxyTVkVCsvYI2N4LAuJ@a>!ai z^=cyB8t>aBl5pOrI~85NnfQXbdT!PcY|RbOU@wqz z8gIh))yVZ*eDpVNw!WtXWZS&II|&?g{OTV@kUE=G9s+qq#7C%Dty32g6D;-8lS%Dg zuunGGi$t0as$&jnDjV>^(@ae5tE`d)?)&vg4@}$}5!R(s+KwZdS>6u6)|Z0SnRc84 z)O<=-i^-L4Qh0{%lP4|Ru{ZsZVnAM^nF5oMyF@=^w z9w(2URy$B*8r+%8SGvvEKUCVj)UC%uFAw0h*Aa!)h3327ltRK$!BVM$>{;&mT@#J| zGxptqFhs#L#jRjwkTs_8!Z~9JBU_zvk0(52=+RVXg*nq?)i8?iQd5=lo}(%J*&}M% z;0n^jnK4jTEMC_N{EB*fw=bl9V8#>T){C>+w)idixpqN257al};c+SYnI^>>0IHSx z#FVxtQ?Z-keh#*4E_PC0g`jCd(CIN|50Bxw!etuEjQ?b_8~yn|AIJ_`q=Kbb15?C$ z=LP(-S!)uLbOr*|Dmw@8IYOe zO?X2n@h0-4@Dd(NE-RUm|FzjqPLuxg&)I_4A`+sXZBl`kjbA3?Imdsxpp?eEe7Rq9 zDn5qAr2klRd!vNxk^S6aF!s4BWLrvU&=)K1=r51}c#kMwHyjL&L=Ut)p!}LmM5h{# zNx(wJIhq&~<3y>h_vDv#xzL1SuRJ@8%f*8>W)cL=7XLvp>R;j*n@_rr0PusnEIS9& zkhaCpuT5Q&C(Iaqwu`+qY3CHkZfdxk8ETzET28nXjkBIHV$Ak3b6fa*B&0Lv ztJZ&i;k+h!xA)KxgFj(x%@3k^H;+ni^70b9e-;Ouiv~!C8@O}CW&E@n12)dZk-gJ5 zE-+FiIj`O~^3uBB`zu zpO|F+b@A1=adY%>nhCUmQ_;Mj7}KxsSUsd34iy`gPW;p@>u7kF$cS@rV>o_LL+g@^emr9NDVj zi+BsOfuxki7T0iMW@gce8&b*2D(B?vk|^?nm4d}MFpD#!P%%oc_slZ#^mHn!R zpiW|cPM3*|>=U~_;TQ2*PtWKY&rc@@=lE!S>{9w4PMN+y%1Iixll>cayS^`JAn}iM z&|)IEsz?Hj?9Q8H` zzZW{WuDkr?U1343%y3BbAAKY{W*;sS)f!cF`{p)&zIiJ!Pb)sWCxX0ZqE3lm{fWvM zjAG8=6h65$&r8&mu6;jnzhSEJ4DXe?2W{~@Sz?i&QOk-&bK1Ckh=hEz2R$oSa4iiI z!wWch0;qGFzVfGe1Y-=Uq}vu!1clwVC7{kJ^Mj5eP57mrttD^nvKklaZLfXtYO=_Y zOChWI^7bLo^anEv1ydDuU|SGq{sOuvvkz{AJ*2XHBQbHnC@e0YVp^%nHy%UxgiZtV z!($58|J#-`sw@1JgSum|R{VDBtx_WLJi(C*MBoh2Jq=`}1+i`=QL7{HsMwY<4X`ej3iFKFE$ zic(eq5DpG=2TerY9-Y%M)CphD-V@oak79?O-iy*?R5bQ@5&`7>B!SF~Ra`lW;Ost6 z_Lyr>d}5j7eiEQ@x794(V)pe~Ysyt-qM*wgSEI9=z?+|nN9njvQ&)kp^n&?cRXvwC zBPYc_)5YRDZ^)ak-9Ds!en#;-o;Z#%f9k|Eu}joIQ%1HAP%~BrJWlsj8%N4Hv$ISx zqRe2|9xQ*i%W_DOKe|$L&X<{1911V7J*jYb98aF68Uy*ca(?))hrM_M$@Fi}03s+( zX!<6d2X*MG>SH)H{~}tv8Qqa)-Sq~Zsw{4Fn29M#1^{&vVzgjV%IN>-#y^Ozf6C(K zBgTesr4BHa+SyuCnO<4rrHRDA?(t&xrQpl@CY&B;`GQz$8EV(RXA;^aI%h4QN|k;8 z+56kVfKasH{T?tt4Fn*bSiL;&!A)tuLH17}{Z;?Kf!+ygF~x0d{sMmgM76U{kVqvi zNVoHUnDB48)f%E=&3@!Sn!IAr-QDE6Gu36eUYx(Ij(n--ZU>jWWH#0ghyP@x^YY6K zKkib+WKDMT5&X5O4&I&j7SY#b23T#|2=1e4?jSiBOcxc=e-FFDMJF#(rTiBejpI~P zS+2$zooG2)b7zY&poJVdEC>jySpXuW6Z12pIb5{l1n)CK zT~uC@k|TNZ6HxF}_VzhfoRTH{NA_c#BTkiV(PO3_C4ZqA0wm}4VfOiwkr-)|{8K;& zRf|ji2~3+S;Yj57*MzL6M3PzeNM`g7HZ?eH*1Pu_Tvzd#iRcPyuWfw_PY8T1qXD*f zKoy(s@7IA+{?i&&6+@l`I(?n#eU=~J6ub%T509#M>8?p2nPv|E3!)h|*D(x4eFWAPzy zXELitaKv`|UGNWY<$rh6Vv0gc#OO%ofOrd759`>L3i5H~PE-GZ?p!I~D|C|1MZFRO zNS^@__25cDtIEUq5~64u9J$kmj=u+4hVkDSP5tdm58l3wr#5H-{`c<%(P9G$_Jr84 zHT;7~p9RKYh!NjspUn=77586vAn;(nZ&#MteHGz<_(QI`+)jLe=9m&xkii>u!CzXW*x_F*7?Ai|h`sJg#_54it*#P9Ez|D}8dEPwzd z`rj1)2L4|}yzlW~0qu_T;Tz*jAI++YWOFN3I4&Ym7~_xvBQre?-iXi3l;vUtg!>;8742!rcSiow@vNR)8-Y2hho4fqnIT3VHmt z*2toE-P7{Hb`Gk^H6;N``VoidP;ZIt?X6VX78wMw2oVuvh3zDv-%_9wW^|Q+NWrr{h<04yqnqH#LRzYJiG$UQNSG zGykP$1n);iMtL1jq!!c^A07MAFN`(CNN3mGe#+`5#5DCCx4lvBhg;h!Rz^9ozZez26h0! zapsFgIT2JH0zt5z)^e&0h%&_Ls&dB|39AjZ?dnB+R;U8es3<$^pMX6C8)Vdl&Fm+E z?bmW8pOJ&bTofQNw=GZwTa23TXWl(Lof0Ts0AO;FD%@5Cebd^|`PvCrnR<^t#2TZI zeGy>W2o&G*XXMz8I)6rdxNwCMS3CV!E8trh!7lR&W0R)PiqNa2Ga(oA@0pP^&&9;L z8`K5Q)LL;PqnD}MANXtgETi`mBW3j+$@hpa>GI_sJnWkdUjD_v1v#&;wQcVe5iA0D z5DTCYvsc`sg>LO?A~wzJk-{<_R0T&p(Q>Zh^^&0b7dE!sV)KHid#&T zvCploKPK@d)%Mb}YMHy1*aS|V1b0M*QfmMLzS;e)TX|h!A<-m|EV%jJHkY?v2NFa=Z5fFf>PpE`my{uq# zOCGlo_dY6ZOeP}8x^#VC%fdPM(b|E>*-2u}yUQodkM^Ha(TGApUJE9@Ss=((5)*+iMOhs%03~`(nI`MK=MIuXH z_X&L4=D@I)Q^_I$x-$%I8`-!k$`={xFK}5Z+%7>h$AwiBJ05NN4S=gX+I-c~Z7*$< zl+IQD6r0Z#{;_qU_Aa*W(XE$=NP%x+gdp}N(7bPyY@2PG|A6;*b_DH7Fhu8hDiAbD zKhrU*rG#0m_0_d|sx8a|#@>U|{bZME+yjlZwc|CX!PG*xX)vu4!(34mB>o=jK6=B9 zGp;j1a9l^Z#Yf4NjkFic;m7Y2f83nKxrcb6AU^rL&A)9BIz`$@>iM(DHX7pxateFZ zDX!OC5)3ly^*J1y5F*JIu7**h+l9Czua=;LFOE$x`fAhyhGO^;tARLQzqNlU{y}Zl zq>9MhLRIvrn*4DBUUEr)+ z$GgkN89Z&{*50xAtz+!YesW_poXU{MVB>o} z_~sX)L(|~FBZC94u4@N93yVOr<{RgPvp zC-DS>aP};9bo{20&)VSN0E6m5HBLA>0r?hG;&C4a^7V#@T6~gUf8Zr2PhZ!h`m^OF zDRQ<6Wlbws^Vn2Sh#-EI{0=*6{^8!XZETW zJCwb^#ry+CFKHuL%{C#*PK|k@=D`J3pkurI{@{E#h>aTPyQO;DFm6m`xLx8E&bfIDfS2LlMvF zYaVYP*PNNk811)yNqf*kk?RbKeSmP%b6OTI>7pXQRVNTXbexHceh^DL@x4<{xM0DQ zB@Rc_0@M-V*T*lm_=bz&;TLxMw~U-W)AQ(&(=(h<$8qyOQL#^+ulZ}2$I(;ivyGikV zPsGUHD^W*zt!NwKA;oCrRz}`cM+Hsi*sdq7j-i1K`-u)TXs#5#LLKO5B2VQkJ?37A ziY*!Tj>}OBb6Scv(~;9yEoi*+dKMfJd*;7Gd)Ik|X&P%TP9d~^(1&sAhKNEjTYThk zEhw?57cm7$2%Gjkvc29(4G$#7W@Yuab4x$$dBps?p<(Y$d;_Q{#0Kx9%EQdJpvU3G zTW1A* z_NC6BsE(Vyh3%Tvp602Clbxsj4;b-G11=3>iBLL=m*&#aeigM$?cMPTbjrIDRz=DV z9X)7s)+Idcm1@6mperq$rJ%fP*0U(&TUHnfCA@jG0r%i7Zp9~E zryIG`YfrJW1|x15?xgdfky$)58Fm_Wr3qcZgY|2!&f($Dt~7osCmQ42y5oHBDpSb| zVzDYvGw)LUY=Q!R3q+lj6;o<-byJHDGjI$e%MD}tU&WwdcMmpU@_mdAtN+7FkK*Uh zTKB7(cjUw=h9)8iMrcpH8x+KKHOh-w$vugKe3<*NX5Xn$G<9<`16o$R5rT#Cnx5om zYVjx0Z)5QuUc!V}72#`=VG-*b^Mx-1(AsIcKDS?evf=$RR*96Uz8k$6cs#jW0xl+A z`(_~46x$Y~E31O^e0K0{sci`VTL||RN=PJ1d+Qa0r67-an1JeI<$-ju!v5w%67qC< z%3P&}KMZa>yCI&8CQhhd?;*(U~ZNNunQ_xsfxQaqb9L81OE$D`PuJ$9H&c|kC2+I35bG1EVFkXxovi&DnGGtzB- zGDzo-54ot|azA6j3)3>R82Qz7f>Db%yIqCw!ClgG|5UkQZ z#ZEF~F>1XqyuEL!WTh{yY&EE0m>>I#m#o^`UPpfyzSI3Xi09`|V% z*r~r@=Ig$qx>kCo_)7Ktn3&YG5!>UgR-!)CcDDUAP(CifQp6+^2o#S+`$v6;&D2?> zd7tEE_Lk}PpSj`JmU}-}3S>%I@l_QUNSuz$e>~VbuYwPTrCwrxiS8v7LieP1;#reG z6_@_CV$c(dLC$&9^9a1k#^;Fw6B@s%`ceMdr313Q}>2 zODp6?+ERhNY{ewaldO*9beCTAs1t`@J(T6#>!(f;%VuEaIKq~Lq4C7wV@<5IvMgl0 zy(^7Twt??_4tw!){P3kD2o#C`Xl)hBmknAcro@iuEUF*SI{y7kf{ed&($h`y;346j z)Y5kxPBY?1XVPM1mXCxP6ENnjB5f($;wC3r>S#^UpO4xYur(AMKq!H=^2 zspA>-USrD!=!CJY=r`}qzb^taM3nEL9ynlhRgcJ@4G>!_6S)ktF>U4;ciXE$Yp!wp zwIH@N^BziDyxH^A@1|FOp7E(vpc-iOPbQm78@75wY=tb#)v#4+GISC-3jF)2$G$Nd zsMAk%#=Ru?<}Te%g%Ha)ry4thRLM1mUtiX;Phla^_prJ~u&Wxi){&Ss(1vi-IFz$# z|GGg)j$1A@_Z7(vI*q=s3bsiAH!a;ou3G#VxjQdR9D@#HrM{{UL!PVyq z`(}x)XXH1yQ+OBOREy$E$UkFlqhCH0E+}diiMwsnA*5#>In!C2T{n%ixto4zottAC zpdEPh_R(PV1tYz9OGhgKQf>;zd#D^OJ`Dc39WFCMR{7#Q<|aI!IUka7ON_J#+ z4!9BT_S_-$X)4x1!P_GB_V0t}kuW+|gIOwd`}5&A4MN5bUEJU{2jJ8$*sP1#1CKWr z=XzRfwdr)dlfdJ{y3w|^ogMlID%HX-uR=aGIQVMhyrh)I+|GT-FM7sEfoa#u{%nk` z&qoc{CvY?z9s@!$adEyhTo8TCn^d{|>$j1{S<4y4LLC;wWMwm9b_Q$RYm*Z4QkTp? ztar>4;@#+sP3gFHqd?$e)LRkTxh?flv>uKgDP_mYy#-QHC&gr zlaH0qW7}eJbT&9hCV!)U2fD!+TgIbyYcWCdCp-7qWTT=JAMNyR=<6+@HsG>yGw4>n z@h!x$99V0$XRmwIQnOW&!tz!SyM#Crp(-1(|Qc+>tpI4D2ueCNzyI-N29=!dpnk;$XWgL9QIx@=I(*VSf@x_R}I&}AY zC0(3#jqxvD*-uB8d8G~7ijOXzaBN|PcXt0LqMMfgQb+Bscts|1chupFxs|!giE{cB zfA19S_afDxwzkL`ci9aCdu99_)r7&O)RU9TAk(~aYhcUuZ@Da)_>NumA7M7KX;NgD zM7{AO_d0!zJ^|;wPEyjf63p55ZzG= z19Cb7=a*2uqDxd_RcICtXnJ2U0GIV~Jhs5})&K zY}wyfjjca|EhQbgD_bp&pV_)&s;8r;QXS0(S5QST2!-bi4;PMPWt}m1WDuHq*qgIS zfOr#BIl;F2V$dP1v5ARY`8gKVY>6C0Woi-Mc6?`CU0tbWlN*pXBfW;v*c%j- zrI_;etE+(XzOx&R=oa0v;%blH#WHonERUk;L2rpNyB6A1z$(Q}*QB;X`2MdYt;#Sbr_gl**q3K~#R}T1I!O7CJ zCDmxBuUA>}sCDRET9Z4xC=&!KuD)qU$xO3GsVH~M-*#0J!9{HG&L=dvuI}&t+&-$; zrrH?SkrEbH^t)&jE(ilTc-dE<8aSX3oFJ3^e*0T8eG^&}9?wF8{kHmEuJrvdb(A%yAEI{3L9A-5TtwTPG#M zH*RQX=(dnUeaQ=vk?VcETdMeD3Ks&fi-vb&_MggY8e8@2mKT-=u51f_PoFMerakL> zj53NDL{jHt zHI`dlk~5ThlXbOqJW0Qi~(sMIFYe+rFUt1o&6XA_u)Wv|C2p%z5)| zFOFqjFH4msf#n>}cit)zdr3K?F|=hb-ss_@jTk)Nh9BF8U+U-Foo`l|SzlS-HvdqN za6rFkHN$|7HICMsjChgJDiOt{xU36OO@uUd{I-`83eMfOb+s)Vo{s6=?;KaB8o~;; zCXvcAWRKnNzMkzm(z7|o-*`nWp+$WmKr}kk=JNe<>8gr#GB4#S=!v%VP2<vo3*k0=|f%)t$9|PvU4sXUSyk+ zb+G;N!qt{B?CJRIvHbj`Q{NV0MO%G{#q!}i_6*O{jgr2xNiF;#qMz#+Ml_D$m{-R) zBPR!Q2J`)>qT$|sRm^AP@%D)Qf~@O#Y#33EqhUL{4tk~rQK_+nmyr{Zn-HXRys<2^ z&HJ6&-K`3TM0ON0W*JHbWP=OuQoA>!?4XsVvtb%W>(i1bbE;6!tRtkvefxV+9w3$s z5)q7iyO0p#W*19e8-LWDtsX%DVo@;5Uz-RJ->N45$Pvb zof_xDc78Tu3*GktPfQO~@i$k#qiS-F?mbFUGKY>%O}pI;$~qK*kK1IuEkTV>t9hI!b3Mn|;C9rFJlFZcnxfauqVU#+zA-;$92_U`_)Vn) zWU(ZFvv%et7Otl^h|JvvSyoN!#GR@!akrO72zA+GoD^2q)}+aRPFx61>bUN zS054Jne=@n)}S)CzUT|i(C)lt`q+a2E35VsRRu>K-0hh65mw|Wu3iiMo1kwP$JQhY z=E7axRpa z`6+MCE{eVOxtQTe?>?D5cuO@%irkoWD(~}D0xiwXb8cSm_JF)NRomoV?nho7E@TOUz#TEF44F8lDp{39I=R9!5U?>y<@mP<_@=_=bt#Y=F`3|;}-vn^mEb~N^)h> z47jb#wsff+Idu?uLu-0{Fq{4~S0?uHFITa4yY?2k=)&4FS~E$H(7W1egQDs5O^lbg zH*M~%X_CGbUpQk0hB6Uxvv<`rrFYBZrze}a-t!C2!8B&$xjGWU@;~*FIv}e29dJPHytCY=wu?{YZs$M6{%u36#;g% z)J)2Knfv9lYCd2dn%3&&BG7s&F)Lh@=>#07J&Tg56zr~_$sX4@z(_`VRbtFPad!!k zZ*t9j&nHhy<(f!6lEBuEy;3z|fIsXyR9o}ek%wNy$n`V2qa*%OYt=7MYb~M~tZ((p z+>t0IUVnKo$>&z&t1%=2wp6vMbspz6`Q0w-uJHJ0QM`F`MRwjvfMi8s){S0zx?R}^ ze}hmMHk4<|uxKlb)S}Q3MHB~DC5E8z%F`h^?DPI|mSVl5!E;yETvJ-tLa7G6q}$8t zD~r^f5Z3C=TG~G9E#NILv6k``)YrO+`#}>OBv*0xy1Yk7$P=PpyW6O0NG{WcB*1q; zX-|;!y3J_AyF;>1#}qRZC(O9r<&?vtZ8V|e)XcA>4s z>+?4b1`ZFF1Fo8~+d!IX#u8=uI;7&^fqi2-*zk6LkHp*UWqubEKxyLIp9eT7b8sc3 z-zi?dI<#g%4RL-RuZ1`cxI0x(Li-p^%tw7tC@iUCuRX@Z>5WXAj|?zz2dm&=r~b`A-3+eVXK z!cmH*xjF6O0RufFN1?B3ALY@lIKn{+7e4$FIoYG^iQmCvM`Nsf(Kfrg`M*?jr={*Z zo!xUw6W)49x)Q~P{Wg2L|LdDhrp4_;3;S@IL}twZ>J;Q)Uo4i$RG;J^^@l2kIaLP~ zSrEctw1N-!I>M~qbNC`#U+>M>wi!=t(h2(=pvda*S`=kF;e99M2Y!smG>?I3xQT+J zb1Cc52f-~luboKb2dct7a4zCocP9h=jiP< zB$Q?_XA>T;LMukB^5eM~H~Q-ttCT4|5kOp=Ty z!7q{x67RDSxUjgSYx6;c#N(oz?6F$TZqf=`S}JxnPlE0Bm!-votc!y$RxjLn6uiw{ zg<8qk+_%kpUphLbk6nE_qLcZ9b$K=TrtV8iypD+YmPeo4m)L6&CTjw`v!qjswN~cD zzU%#2M;f8E+Hn|NU(&QMO_TVN9xex&W{nYg#|24AFxdYXvfOIs;&*8ICEsjc9T0qe zzQy?4sf5@k*ndqU;Hp$iB2{wHjG@s%1J{UIhcjx~h7VqBU{EY6C+?f9}&PCGDkD%kVjVpELt(Q6CYK`tLk_8`Y z2dzpcXf?#W*Dh0~s@p#OqJw``wU**s+T1zd4hX+w!{doxSEF%V>zGJu#_PDKt**6s zcK*gp^0>NjW)Sk~bZn($Ei+QynZG7pC~losZ`}N}8`Cw?C@xnt& zG@9)0({_By7yp`dhxd7Ao^MqpvUs`+QZO_>zH8f@9KEq6kx>1|&)wGBgr z^l0w}h}pf}jwEp34h3a}*4^}qVf_=Sr(@4)K`87e=2ZrCHy?Wjj&;9$OE{)4HU6VP z742b^W0xleCOCHNI<+}H#W3%)9!*{vvV!#PLGCsK37%(1QQ0NkJDM&Pcz#w#h>DBQb#6ic4iCi_YTWZ7{|OBw+A%pqa8% z?WjBOqI>}e7Hz=sXGYG{fWIK6>3<#77wD+thjY{K)lM(xJc0zNM%+MCuT@Z~fyHk9 zpV66K2yJPGh`JD!XgSc9AhFidPEpwk0U(N&SSB6)7F^)p3&PU-c1G)@`u_?Ts~f0X zwJhFe;06O`uKK7j3*zNAu{_=gMBpU2bYXH+9zL=jfNVai2kI#^f8Npms#$yZJ=aoc zvZJBlsb)oAYxT5srpg{fO4-J|B-sOLmU9Tsys?r%h%Ud@*5<>*%j4&r9lk4oV*zoV zf5|F~jixUph<}%ER8-iDlF#2s%ho0NSu!tHl<$~5Ju#n* z0G?lYLN2I7Pm_Pbfc5HoQ&U-%Ub=p1es}j7P#Bc!fiS$866)HTR#wfNq_Al{5nUjM z9Z17jlh($?w(hjqCHt}h{QoX33Qy?!CC5>PPv2L>Mi-{-eXS95+EtdjH16(~CzcyK z6!>V2@CzDPsF6oIqWRBvcB<W<(cj6;CW%2wKa8B@BITb>O4Fq zNB8|3(cZjQP>2O2;w+`4P^{GAPaodDO#88xmpiJ=Dw}~fuDB-xlcxigRJ4~DweXRW z5w~N-$u(0SQRY-|NxSz(~1%Noh&T|-0> zqm5MW++wbb6~GX;xAeDFes@!5Z%VvXlWOPZxE$Q)y)6NMMKaj<=D6oGLe2GCHjQmT z=dG4-JTk7**M>j;d(cj-s*QKmS=ZQ9QuhTHLTGRdv>jWfH@{@>7rsw3k&E=P6V7i9 zxi;MFD=6omgu}|{c2CQ^b-jF^auU}iyxs&p6pqEEHxyhvEW}Id`O7E+g8U|Rv6ow$c0|i z)V3xJL5w(Ie#M1_%_rhFtFS(3=VV&VmmKPW2W_n6^YWasu1Y1)p@^}G`in-2auFU$ zJ@2+Vs8ky#-c>_b=k2XQ9f3<@wzA9x!$cAR#`xRpG1Qf<+5v;nES`{RLYYExtr-_X zZ8Z&GH9uk@?2zK}KunnXGiI=p=^(>cD9);j)OA*A5fx;VXDX3M`$$G>B;YIz1%bsoQ-Cb5>+%eR#UlhKuY@w7dRMLG+ba^yiHa}p-s7L9$m_@V?bO7= zX__F*%VpQu^+*0pAcZjy#xVttr_=fF@)yA8G9#)wtyH09tftoFbF61Wp@4o9Pmoi?HtK<37sm&gJJ3e0N6LYO0~lI#D~6qA26- z;`@YN#(SuWJNUYLyE^|1eT5%wp8|+nPWO}Pq-*q0ex`eubzr;qu(KlgN*}if{;~ezB*t|Qx z1eCeq9DR|ev1PuQv+UnR;~v;jLqwiPDW-63n!jF>e08pce^^yfI|6@P7f+?I>9?-) zm=(5$u^iiCpVS!VMOw-$WrchO`n*D7Lcl=Ff_?DhGFZlA4i@vBt zc3J*S3dT5gdE=<65-`QKRlv#+;ommNl!3nu;JdjJIz3U#+3r18j?-#Rf#Dxq7Y!tdXA?3%OKo*{Fz`S>U6k?rNBx8l0UnLgFAJs{C6 zTKzfXLaWIW*7O$7>e=8V;LdUL+5M=exA^+*vM=K4xnz$13l07szVa7wpBG=`pg*nj z2l>3XS-XK;RB18nk4bx(`!u(LHD8@98r(WAHhc}}Z37Q+!;@%!m}3lbNrJc*2M`yB zt@<{?^u(guH|ysICGm))?OyqCS3`-!GXnfUrxU`~rGSe8tP2WPkyAI%Bw{z`U+``* zp~-Y3*KP@jDSCde_P!j|(ef z{846^|Es<8ifUq8<2W7xK}tjx0jVlS0cl3igc9Nv=|_qLf}w*nqXY;-2oS846Cs{^ zC@LTVDk29$P`U&WNR%F0kO-j$B!nVO#Kb%JdSCAAUCXDLZ>^bc&E9M8Z_WSr-!pqV zdoR{J7LV+d*%;>g(q2A$DA8Z|)A;Ww?c(v_dC&EG!b5Ch#ejYnn2pGe z>dQD_0Xxt%qXQL1lT+{%i5Xw>7tcc0OppcLk8~p(uXkK;G7blpRvY>%UqBtF+k^V& zSNy_kIh}WRIif>rVldGpQGjoFQ&a4kVYwdOZr?^Ond{%FttctgmFI`tcy&vf9Tg|>uxD^U!!axZQn-J&NsVqV84t>7@@S7 z0pngsB2fOSm~mEP)3Z+3#9-==hG%Xq3^qaZ1a?Hq1CZdu*zm0@Qo7~6_C?7FRPO6x8tU>9)z}z@iLYHxuxT|TG-{aVcgt)sPdOP8+UzMKRBM>? zg*$z9j^Cjs+BR=96siNqal2#UZ%dtm`jPg~Oznc5pdr48RFFBVlq%wH#OGHVbZ?x3 zC|r)lYx5VEv*dIkShJ4p;iaX5fE`B~;=mfkkb#yG1WDl6?-%@@oC%Uy&#G1nfV9Dg zZ9=a#^@;C|_enX`%54bjYL!HvoLA?kg(mc&{pynhVre!l0cp5{<|M5CIpLy3FABuO zIIscuO4cUvfhQ{EQArC zJw~7~wy~lc9x~=&b<*S2ubzQBcmsn{l_oCr#;ES=LqsqsCvs^v5GlR-*cYuYGpdvk z7k0VMxTgd#V$NBJoWEUbs3??RF#k5r)gZSgPmQvu$}3}A6Ei@-xSlQV4Ll# zA3PxVW6+i2620Wxbl#NdF!LldEWu2x6ItZ}e_)C0fvtUfunx%*ZD|jG7UHtQ^2R7H+j{5i_;NB?-((K2o*YwT7In96e z#e+?KdqF>*da=M-cQ^6fWkfM*!HC=9Tr_92Q$Y6B$a1*R5(ma( zPzf7L)5j!-nYJRERU_qb<}0YwREgZayC(8!nzza&2uJ>Gjl%Id&_(K zuV6$XXjYZ9$`b3cVON()$)S~{)Id5(xofqKZulmj=xCd9!Abt5<(q{diasN4Q-ETA z)8qS!z_tul9u#ku`t{f*6wq9EJ>!PTmWIT7yB=FTG`GtX(061&^1&@sN#fN>g;gHM z#zq}>b!Ciy@m!yuk$3J%yKj1JLx?Ff8-5E=+Hc8TBS0%MIZYq`2yEqwq2!u`EUnzn zUp$14>A;PE$dyvdvQByQdD<*pReGaF=mp6qJfS=c_r*SqcTFE;@k9Zx@Yc>?@j8Gp zsxGk`t6w)f?5Dfy^ZAUx(>%}Sv)i@*KnKnyooEt7Mil|Sv$p8lhiT^Da+{G2A*;`5PNYJubPZSD1 z#EV>BG|t`S6Vse7;Qwkau>ZdUSoQOtHOB2{jft@D uPLTgu3tmT6fq$M1c2RfpxMH4X3K0mWg;2S9YA}#e#Lmj`e8oAxTmJzrR!{f< literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/page-feedback.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/page-feedback.png new file mode 100644 index 0000000000000000000000000000000000000000..dbdd9fe19951d8774c82f4be720056a8233760e4 GIT binary patch literal 49529 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 literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/settings.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..1e835661a0bb6f3741a67f692c87b7acbcd3bf49 GIT binary patch literal 39160 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 GrThcN)jg{K literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/suite-custom-code-backend.png b/docs/en/Blog-Posts/2023-08-15 v7_4_Preview/suite-custom-code-backend.png new file mode 100644 index 0000000000000000000000000000000000000000..cb14dfc0f14d18e0b3cdc4098c0b7d5e2362042a GIT binary patch literal 15607 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