From 9f1009b7cdaffb75d14c8aa2e09205eeb9992212 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 3 Feb 2021 12:01:31 +0300 Subject: [PATCH 01/23] explain how Angular module template works --- docs/en/Startup-Templates/Module.md | 104 +++++++++++++++++- .../images/angular-module-dev-app-project.png | Bin 0 -> 55096 bytes .../angular-module-folder-structure.png | Bin 0 -> 110046 bytes 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 docs/en/images/angular-module-dev-app-project.png create mode 100644 docs/en/images/angular-module-folder-structure.png diff --git a/docs/en/Startup-Templates/Module.md b/docs/en/Startup-Templates/Module.md index 2dc0896c65..84b7525944 100644 --- a/docs/en/Startup-Templates/Module.md +++ b/docs/en/Startup-Templates/Module.md @@ -1,4 +1,4 @@ -# MVC Module Startup Template +# Module Startup Template This template can be used to create a **reusable [application module](../Modules/Index.md)** based on the [module development best practices & conventions](../Best-Practices/Index.md). It is also suitable for creating **microservices** (with or without UI). @@ -20,6 +20,20 @@ abp new Acme.IssueManagement -t module - `Acme.IssueManagement` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming. +### Specify the UI Framework + +This template provides multiple UI frameworks: + +* `mvc`: ASP.NET Core MVC UI with Razor Pages (default) +* `blazor`: Blazor UI +* `angular`: Angular UI + +Use `-u` or `--ui` option to specify the UI framework: + +````bash +abp new Acme.IssueManagement -t module -u angular +```` + ### Without User Interface The template comes with an MVC UI by default. You can use `--no-ui` option to not include the UI layer. @@ -160,3 +174,91 @@ You should run the application with the given order: - First, run the `.IdentityServer` since other applications depends on it. - Then run the `.HttpApi.Host` since it is used by the `.Web.Host` application. - Finally, you can run the `.Web.Host` project and login to the application using `admin` as the username and `1q2w3E*` as the password. + +## UI + +### Angular UI + +If you choose `Angular` as the UI framework (using the `-u angular` option), the solution will have a folder called `angular` in it. This is where the client-side code is located. When you open that folder in an IDE, the folder structure will look like below: + +![Folder structure of ABP Angular module project](../images/angular-module-folder-structure.png) + +* _angular/projects/issue-management_ folder contains the Angular module project. +* _angular/projects/dev-app_ folder contains a development application that runs your module. + +The server-side is similar to the solution described above. `*.HttpApi.Host` project serves the API and the `Angular` demo application consumes it. You will not need to run the `.Web.Host` project though. + +#### How to Run the Angular Development App + +For module development, you will need the `dev-app` project up and running. So, here is how we can start the development server. + +First, we need to install dependencies: + +1. Open your terminal at the root folder, i.e. `angular`. +2. Run `yarn` or `npm install`. + +The dependencies will be installed and some of them are ABP modules published as NPM packages. To see all ABP packages, you can run the following command in the `angular` folder: + +```bash +yarn list --pattern abp +``` + +> There is no equivalent of this command in npm. + +The module you will develop depends on two of these ABP packages: _@abp/ng.core_ and _@abp/ng.theme.shared_. Rest of the ABP modules are included in _package.json_ because of the `dev-app` project. + +Once all dependencies are installed, follow the steps below to serve your development app: + +1. Make sure `.IdentityServer` and `*.HttpApi.Host` projects are up and running. +2. Open your terminal at the root folder, i.e. `angular`. +3. Run `yarn start` or `npm start`. + +![ABP Angular module dev-app project](../images/angular-module-dev-app-project.png) + +The issue management page is empty in the beginning. You may change the content in `IssueManagementComponent` at the _angular/projects/issue-management/src/lib/issue-management.component.ts_ path and observe that the view changes accordingly. + +Now, let's have a closer look at some key elements of your project. + +#### Main Module + +`IssueManagementModule` at the _angular/projects/issue-management/src/lib/issue-management.module.ts_ path is the main module of your module project. There are a few things worth mentioning in it: + +- Essential ABP modules, i.e. `CoreModule` and `ThemeSharedModule`, are imported. +- `IssueManagementRoutingModule` is imported. +- `IssueManagementComponent` is declared. +- It is prepared for configurability. The `forLazy` static method enables [a configuration to be passed to the module when it is loaded by the router](https://volosoft.com/blog/how-to-configure-angular-modules-loaded-by-the-router). + + +#### Main Routing Module + +`IssueManagementRoutingModule` at the _angular/projects/issue-management/src/lib/issue-management-routing.module.ts_ path is the main routing module of your module project. It currently does two things: + +- Loads `DynamicLayoutComponent` at base path it is given. +- Loads `IssueManagementComponent` as child to the layout, again at the given base path. + +You can rearrange this module to load more than one component at different routes, but you need to update the route provider at _angular/projects/issue-management/config/src/providers/route.provider.ts_ to match the new routing structure with the routes in the menu. Please check [Modifying the Menu](../UI/Angular/Modifying-the-Menu.md) to see how route providers work. + +#### Config Module + +There is a config module at the _angular/projects/issue-management/config/src/issue-management-config.module.ts_ path. The static `forRoot` method of this module is supposed to be called at the route level. So, you may assume the following will take place: + +```js +@NgModule({ + imports: [ + /* other imports */ + + IssueManagementConfigModule.forRoot(), + ], + + /* rest of the module meta data */ +}) +export class AppModule {} +``` + +You can use this static method to configure an application that uses your module project. An example of such configuration is already implemented and the `ISSUE_MANAGEMENT_ROUTE_PROVIDERS` token is provided here. The method can take options which enables further configuration possibilities. + +The difference between the `forRoot` method of the config module and the `forLazy` method of the main module is that, for smallest bundle size, the former should only be used when you have to configure an app before your module is even loaded. + +#### Testing Angular UI + +Please see the [testing document](../UI/Angular/Testing.md). diff --git a/docs/en/images/angular-module-dev-app-project.png b/docs/en/images/angular-module-dev-app-project.png new file mode 100644 index 0000000000000000000000000000000000000000..08e0e9fd6c73b018c44bf524f4f47f28297c44bb GIT binary patch literal 55096 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 Q69D|EJk?YvdW;D8A2&}E2LJ#7 literal 0 HcmV?d00001 From 45f778cb94e8405772d865983c386b4b727974e5 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 4 Feb 2021 11:31:08 +0800 Subject: [PATCH 02/23] Allow custom services construction --- .../Abp/AutoMapper/AbpAutoMapperModule.cs | 6 +- ...oMapper_CustomServiceConstruction_Tests.cs | 74 +++++++++++++++++++ .../AutoMapper_Dependency_Injection_Tests.cs | 23 +++++- 3 files changed, 97 insertions(+), 6 deletions(-) create mode 100644 framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs index 25707e3899..cb576ba1de 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.AutoMapper { context.Services.AddAutoMapperObjectMapper(); - context.Services.AddSingleton(provider => CreateMappings(provider)); + context.Services.AddSingleton(CreateMappings); context.Services.AddSingleton(provider => provider.GetRequiredService()); } @@ -43,6 +43,8 @@ namespace Volo.Abp.AutoMapper } } + options.Configurators.Insert(0, ctx => ctx.MapperConfiguration.ConstructServicesUsing(serviceProvider.GetService)); + void ValidateAll(IConfigurationProvider config) { foreach (var profileType in options.ValidatingProfiles) @@ -60,7 +62,7 @@ namespace Volo.Abp.AutoMapper return new MapperAccessor { - Mapper = new Mapper(mapperConfiguration, serviceProvider.GetService) + Mapper = new Mapper(mapperConfiguration) }; } } diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs new file mode 100644 index 0000000000..ab2f2309d5 --- /dev/null +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs @@ -0,0 +1,74 @@ +using System; +using AutoMapper; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.AutoMapper.SampleClasses; +using Volo.Abp.Modularity; +using Volo.Abp.Testing; +using Xunit; +using IObjectMapper = Volo.Abp.ObjectMapping.IObjectMapper; + +namespace Volo.Abp.AutoMapper +{ + public class AutoMapper_CustomServiceConstruction_Tests : AbpIntegratedTest + { + private readonly IObjectMapper _objectMapper; + + public AutoMapper_CustomServiceConstruction_Tests() + { + _objectMapper = ServiceProvider.GetRequiredService(); + } + + [Fact] + public void Should_Custom_Service_Construction() + { + var myEntity = new MyEntity + { + Number = 2 + }; + _objectMapper.Map(myEntity).Number.ShouldBe(1); + } + + [DependsOn(typeof(AbpAutoMapperModule))] + public class TestModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.AddMaps(); + options.Configurators.Add(configurationContext => + { + configurationContext.MapperConfiguration.ConstructServicesUsing(type => + type.Name.Contains(nameof(CustomMappingAction)) + ? new CustomMappingAction(1) + : Activator.CreateInstance(type)); + }); + }); + } + } + + public class MapperActionProfile : Profile + { + public MapperActionProfile() + { + CreateMap().AfterMap(); + } + } + + public class CustomMappingAction : IMappingAction + { + private readonly int _number; + + public CustomMappingAction(int number) + { + _number = number; + } + + public void Process(MyEntity source, MyEntityDto destination, ResolutionContext context) + { + destination.Number = _number; + } + } + } +} diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs index 56c5e6f061..7edf32eb23 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.AutoMapper [Fact] public void Should_Registered_AutoMapper_Service() { - GetService().ShouldNotBeNull(); + GetService().ShouldNotBeNull(); } [Fact] @@ -47,15 +47,30 @@ namespace Volo.Abp.AutoMapper { public MapperActionProfile() { - CreateMap().AfterMap(); + CreateMap().AfterMap(); } } - public class CustomMappingActionService : IMappingAction + public class CustomMappingAction : IMappingAction { + private readonly CustomMappingActionService _customMappingActionService; + + public CustomMappingAction(CustomMappingActionService customMappingActionService) + { + _customMappingActionService = customMappingActionService; + } + public void Process(SourceModel source, DestModel destination, ResolutionContext context) { - destination.Name = nameof(CustomMappingActionService); + destination.Name = _customMappingActionService.GetName(); + } + } + + public class CustomMappingActionService : ITransientDependency + { + public string GetName() + { + return nameof(CustomMappingActionService); } } } From 13c5e0eea395ae9b500205670ab979f9cf339651 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 4 Feb 2021 13:00:55 +0800 Subject: [PATCH 03/23] Update unit tests --- ...oMapper_CustomServiceConstruction_Tests.cs | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs index ab2f2309d5..c1995970b5 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs @@ -2,7 +2,6 @@ using AutoMapper; using Microsoft.Extensions.DependencyInjection; using Shouldly; -using Volo.Abp.AutoMapper.SampleClasses; using Volo.Abp.Modularity; using Volo.Abp.Testing; using Xunit; @@ -22,11 +21,11 @@ namespace Volo.Abp.AutoMapper [Fact] public void Should_Custom_Service_Construction() { - var myEntity = new MyEntity + var source = new SourceModel { - Number = 2 + Name = nameof(SourceModel) }; - _objectMapper.Map(myEntity).Number.ShouldBe(1); + _objectMapper.Map(source).Name.ShouldBe(nameof(CustomMappingAction)); } [DependsOn(typeof(AbpAutoMapperModule))] @@ -41,33 +40,43 @@ namespace Volo.Abp.AutoMapper { configurationContext.MapperConfiguration.ConstructServicesUsing(type => type.Name.Contains(nameof(CustomMappingAction)) - ? new CustomMappingAction(1) + ? new CustomMappingAction(nameof(CustomMappingAction)) : Activator.CreateInstance(type)); }); }); } } + public class SourceModel + { + public string Name { get; set; } + } + + public class DestModel + { + public string Name { get; set; } + } + public class MapperActionProfile : Profile { public MapperActionProfile() { - CreateMap().AfterMap(); + CreateMap().AfterMap(); } } - public class CustomMappingAction : IMappingAction + public class CustomMappingAction : IMappingAction { - private readonly int _number; + private readonly string _name; - public CustomMappingAction(int number) + public CustomMappingAction(string name) { - _number = number; + _name = name; } - public void Process(MyEntity source, MyEntityDto destination, ResolutionContext context) + public void Process(SourceModel source, DestModel destination, ResolutionContext context) { - destination.Number = _number; + destination.Name = _name; } } } From d367ea057f44ca19a8f8f85e8b1104b0a8594e13 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 4 Feb 2021 10:59:11 +0300 Subject: [PATCH 04/23] Cli source-code download remote error log --- .../Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs index 0462920fbb..4d4a8726a8 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs @@ -199,11 +199,12 @@ namespace Volo.Abp.Cli.ProjectBuilding { var url = $"{CliUrls.WwwAbpIo}api/download/{input.Type}/"; + HttpResponseMessage responseMessage = null; + try { using (var client = new CliHttpClient(TimeSpan.FromMinutes(10))) { - HttpResponseMessage responseMessage; if (input.TemplateSource.IsNullOrWhiteSpace()) { @@ -225,7 +226,8 @@ namespace Volo.Abp.Cli.ProjectBuilding } catch (Exception ex) { - Console.WriteLine("Error occured while downloading source-code from {0} : {1}", url, ex.Message); + Console.WriteLine("Error occured while downloading source-code from {0} : {1}{2}{3}", + url, responseMessage?.ToString(), Environment.NewLine, ex.Message); throw; } } From b9aaffd7db08a95614e25aa80a997f5629a5fac7 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 4 Feb 2021 14:50:53 +0300 Subject: [PATCH 05/23] Cli solution rename: handle company name kebab-case resolves https://github.com/abpframework/abp/issues/7586 --- .../Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs index 611d4d5266..ce2c8c3b2a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs @@ -55,11 +55,13 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps { RenameHelper.RenameAll(_entries, _companyNamePlaceHolder, _companyName); RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToCamelCase(), _companyName.ToCamelCase()); + RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToKebabCase(), _companyName.ToKebabCase()); } else { RenameHelper.RenameAll(_entries, _companyNamePlaceHolder + "." + _projectNamePlaceHolder, _projectNamePlaceHolder); RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToCamelCase() + "." + _projectNamePlaceHolder.ToCamelCase(), _projectNamePlaceHolder.ToCamelCase()); + RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToKebabCase() + "/" + _projectNamePlaceHolder.ToKebabCase(), _projectNamePlaceHolder.ToKebabCase()); } } From 12d602dffe7fcd3203ea37b678a58a05b72e1794 Mon Sep 17 00:00:00 2001 From: cuibty Date: Fri, 5 Feb 2021 14:30:40 +0800 Subject: [PATCH 06/23] Update Domain-Driven-Design-Implementation-Guide.md --- docs/zh-Hans/Domain-Driven-Design-Implementation-Guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Domain-Driven-Design-Implementation-Guide.md b/docs/zh-Hans/Domain-Driven-Design-Implementation-Guide.md index db434ab365..e59f96ce56 100644 --- a/docs/zh-Hans/Domain-Driven-Design-Implementation-Guide.md +++ b/docs/zh-Hans/Domain-Driven-Design-Implementation-Guide.md @@ -1315,7 +1315,7 @@ namespace IssueTracking.Users #### 输出DTO最佳实践 -* 保持**数量较少**的输出DTO,尽可能**重用输入DTO**(例外:不要将输入DTO作为输出DTO). +* 保持**数量较少**的输出DTO,尽可能**重用输出DTO**(例外:不要将输入DTO作为输出DTO). * 输出DTO可以包含比用例需要的属性**更多**的属性. * 针对 **Create** 和 **Update** 方法,返回实体的DTO. @@ -1976,4 +1976,4 @@ public class IssueAppService * "*Domain Driven Design*" by Eric Evans * "*Implementing Domain Driven Design*" by Vaughn Vernon -* "*Clean Architecture*" by Robert C. Martin \ No newline at end of file +* "*Clean Architecture*" by Robert C. Martin From 3dbdecfa5f48ccd4880468b65dd3a762da968cdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 5 Feb 2021 15:17:56 +0300 Subject: [PATCH 07/23] Resolved #7611: Distributed event bus should send NACK to RabbitMQ server on event handling failures. --- .../Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs index b94663d886..0c180a4ac7 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs @@ -191,6 +191,7 @@ namespace Volo.Abp.RabbitMQ } catch (Exception ex) { + Channel.BasicNack(basicDeliverEventArgs.DeliveryTag, multiple: false, requeue: true); Logger.LogException(ex); await ExceptionNotifier.NotifyAsync(ex); } From 43491dd2138c8d7f05a9e91994efd70ff8bed78e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 5 Feb 2021 17:54:35 +0300 Subject: [PATCH 08/23] Resolved #7613: Should use the tenant's default connection string if available when requested a specific connection but not defined for the tenant. --- .../MultiTenantConnectionStringResolver.cs | 191 +++++++++++------- 1 file changed, 116 insertions(+), 75 deletions(-) diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs index 0d82419013..959c910901 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs @@ -26,105 +26,146 @@ namespace Volo.Abp.MultiTenancy public override async Task ResolveAsync(string connectionStringName = null) { - //No current tenant, fallback to default logic if (_currentTenant.Id == null) { + //No current tenant, fallback to default logic return await base.ResolveAsync(connectionStringName); } - using (var serviceScope = _serviceProvider.CreateScope()) + var tenant = await FindTenantConfigurationAsync(_currentTenant.Id.Value); + + if (tenant == null || tenant.ConnectionStrings.IsNullOrEmpty()) { - var tenantStore = serviceScope - .ServiceProvider - .GetRequiredService(); + //Tenant has not defined any connection string, fallback to default logic + return await base.ResolveAsync(connectionStringName); + } + + var tenantDefaultConnectionString = tenant.ConnectionStrings.Default; + + //Requesting default connection string... + if (connectionStringName == null || + connectionStringName == ConnectionStrings.DefaultConnectionStringName) + { + //Return tenant's default or global default + return !tenantDefaultConnectionString.IsNullOrWhiteSpace() + ? tenantDefaultConnectionString + : Options.ConnectionStrings.Default; + } + + //Requesting specific connection string... + var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName); + if (!connString.IsNullOrWhiteSpace()) + { + //Found for the tenant + return connString; + } - var tenant = await tenantStore.FindAsync(_currentTenant.Id.Value); - - if (tenant?.ConnectionStrings == null) - { - return await base.ResolveAsync(connectionStringName); - } - - //Requesting default connection string - if (connectionStringName == null) - { - return tenant.ConnectionStrings.Default ?? - Options.ConnectionStrings.Default; - } - - //Requesting specific connection string - var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName); - if (connString != null) - { - return connString; - } - - /* Requested a specific connection string, but it's not specified for the tenant. - * - If it's specified in options, use it. - * - If not, use tenant's default conn string. - */ - - var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName); - if (connStringInOptions != null) - { - return connStringInOptions; - } - - return tenant.ConnectionStrings.Default ?? - Options.ConnectionStrings.Default; + //Fallback to tenant's default connection string if available + if (!tenantDefaultConnectionString.IsNullOrWhiteSpace()) + { + return tenantDefaultConnectionString; + } + + //Try to find the specific connection string for given name + var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName); + if (!connStringInOptions.IsNullOrWhiteSpace()) + { + return connStringInOptions; + } + + //Fallback to the global default connection string + var defaultConnectionString = Options.ConnectionStrings.Default; + if (!defaultConnectionString.IsNullOrWhiteSpace()) + { + return defaultConnectionString; } + + throw new AbpException("No connection string defined!"); } [Obsolete("Use ResolveAsync method.")] public override string Resolve(string connectionStringName = null) { - //No current tenant, fallback to default logic if (_currentTenant.Id == null) { + //No current tenant, fallback to default logic return base.Resolve(connectionStringName); } + var tenant = FindTenantConfiguration(_currentTenant.Id.Value); + + if (tenant == null || tenant.ConnectionStrings.IsNullOrEmpty()) + { + //Tenant has not defined any connection string, fallback to default logic + return base.Resolve(connectionStringName); + } + + var tenantDefaultConnectionString = tenant.ConnectionStrings.Default; + + //Requesting default connection string... + if (connectionStringName == null || + connectionStringName == ConnectionStrings.DefaultConnectionStringName) + { + //Return tenant's default or global default + return !tenantDefaultConnectionString.IsNullOrWhiteSpace() + ? tenantDefaultConnectionString + : Options.ConnectionStrings.Default; + } + + //Requesting specific connection string... + var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName); + if (!connString.IsNullOrWhiteSpace()) + { + //Found for the tenant + return connString; + } + + //Fallback to tenant's default connection string if available + if (!tenantDefaultConnectionString.IsNullOrWhiteSpace()) + { + return tenantDefaultConnectionString; + } + + //Try to find the specific connection string for given name + var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName); + if (!connStringInOptions.IsNullOrWhiteSpace()) + { + return connStringInOptions; + } + + //Fallback to the global default connection string + var defaultConnectionString = Options.ConnectionStrings.Default; + if (!defaultConnectionString.IsNullOrWhiteSpace()) + { + return defaultConnectionString; + } + + throw new AbpException("No connection string defined!"); + } + + protected virtual async Task FindTenantConfigurationAsync(Guid tenantId) + { + using (var serviceScope = _serviceProvider.CreateScope()) + { + var tenantStore = serviceScope + .ServiceProvider + .GetRequiredService(); + + return await tenantStore.FindAsync(tenantId); + } + } + + [Obsolete("Use FindTenantConfigurationAsync method.")] + protected virtual TenantConfiguration FindTenantConfiguration(Guid tenantId) + { using (var serviceScope = _serviceProvider.CreateScope()) { var tenantStore = serviceScope .ServiceProvider .GetRequiredService(); - var tenant = tenantStore.Find(_currentTenant.Id.Value); - - if (tenant?.ConnectionStrings == null) - { - return base.Resolve(connectionStringName); - } - - //Requesting default connection string - if (connectionStringName == null) - { - return tenant.ConnectionStrings.Default ?? - Options.ConnectionStrings.Default; - } - - //Requesting specific connection string - var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName); - if (connString != null) - { - return connString; - } - - /* Requested a specific connection string, but it's not specified for the tenant. - * - If it's specified in options, use it. - * - If not, use tenant's default conn string. - */ - - var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName); - if (connStringInOptions != null) - { - return connStringInOptions; - } - - return tenant.ConnectionStrings.Default ?? - Options.ConnectionStrings.Default; + return tenantStore.Find(tenantId); } } } -} +} \ No newline at end of file From 341183b2dd7e6cbee7400149058e991371043cdf Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 5 Feb 2021 18:05:08 +0300 Subject: [PATCH 09/23] Update ModuleInfo.cs --- .../Volo/Abp/Cli/ProjectBuilding/Building/ModuleInfo.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ModuleInfo.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ModuleInfo.cs index 260fbb745f..1d8da0e3b1 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ModuleInfo.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ModuleInfo.cs @@ -23,5 +23,7 @@ public bool MvcUi { get; set; } public bool BlazorUi { get; set; } + + public bool IsFreeToActiveLicenseOwners { get; set; } } } From 25ae8b12d8ad40baae3a579f419cfc1e7f77e547 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 5 Feb 2021 20:31:50 +0300 Subject: [PATCH 10/23] Make CliHttpClient singleton #7618 --- .../Volo/Abp/Cli/Commands/LoginCommand.cs | 25 +++++----- .../Volo/Abp/Cli/Http/CliHttpClient.cs | 8 +-- .../Volo/Abp/Cli/Http/CliHttpClientFactory.cs | 47 ++++++++++++++++++ .../Abp/Cli/Licensing/AbpIoApiKeyService.cs | 24 ++++----- .../Volo/Abp/Cli/NuGet/NuGetService.cs | 29 +++++------ .../Analyticses/CliAnalyticsCollect.cs | 40 ++++++++------- .../Cli/ProjectBuilding/ModuleInfoProvider.cs | 25 +++++----- .../ProjectBuilding/TemplateInfoProvider.cs | 24 ++++----- .../ProjectNugetPackageAdder.cs | 21 ++++---- .../SolutionModuleAdder.cs | 49 ++++++++++--------- 10 files changed, 179 insertions(+), 113 deletions(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs index 12810aebb9..f03c101c88 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs @@ -22,13 +22,17 @@ namespace Volo.Abp.Cli.Commands public ICancellationTokenProvider CancellationTokenProvider { get; } public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } + private readonly CliHttpClientFactory _cliHttpClientFactory; + public LoginCommand(AuthService authService, ICancellationTokenProvider cancellationTokenProvider, - IRemoteServiceExceptionHandler remoteServiceExceptionHandler) + IRemoteServiceExceptionHandler remoteServiceExceptionHandler, + CliHttpClientFactory cliHttpClientFactory) { AuthService = authService; CancellationTokenProvider = cancellationTokenProvider; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -79,20 +83,19 @@ namespace Volo.Abp.Cli.Commands { var url = $"{CliUrls.WwwAbpIo}api/license/check-multiple-organizations?username={username}"; - using (var client = new CliHttpClient()) + var client = _cliHttpClientFactory.CreateClient(); + + using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger)) { - using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger)) + if (!response.IsSuccessStatusCode) { - if (!response.IsSuccessStatusCode) - { - throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); - } + throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); + } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); - var responseContent = await response.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(responseContent); - } + var responseContent = await response.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize(responseContent); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs index d853067abf..1122648ff2 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Cli.Http { Timeout = timeout ?? DefaultTimeout; - AddAuthentication(this); + AddAuthentication(); } public CliHttpClient(bool setBearerToken) : base(new CliHttpClientHandler()) @@ -31,11 +31,11 @@ namespace Volo.Abp.Cli.Http if (setBearerToken) { - AddAuthentication(this); + AddAuthentication(); } } - private static void AddAuthentication(HttpClient client) + public void AddAuthentication() { if (!AuthService.IsLoggedIn()) { @@ -45,7 +45,7 @@ namespace Volo.Abp.Cli.Http var accessToken = File.ReadAllText(CliPaths.AccessToken, Encoding.UTF8); if (!accessToken.IsNullOrEmpty()) { - client.SetBearerToken(accessToken); + this.SetBearerToken(accessToken); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs new file mode 100644 index 0000000000..3748e8e64a --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs @@ -0,0 +1,47 @@ +using System; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Cli.Http +{ + public class CliHttpClientFactory : ISingletonDependency, IDisposable + { + private static CliHttpClient _authenticatedHttpClient; + private static CliHttpClient _unauthenticatedHttpClient; + + public CliHttpClient CreateClient(bool needsAuthentication = true) + { + if (needsAuthentication) + { + return CreateAuthenticatedHttpClient(); + } + + return CreateUnAuthenticatedHttpClient(); + } + + private static CliHttpClient CreateAuthenticatedHttpClient() + { + if (_authenticatedHttpClient == null) + { + _authenticatedHttpClient = new CliHttpClient(setBearerToken: true); + } + + return _authenticatedHttpClient; + } + + private static CliHttpClient CreateUnAuthenticatedHttpClient() + { + if (_unauthenticatedHttpClient == null) + { + _unauthenticatedHttpClient = new CliHttpClient(setBearerToken: false); + } + + return _unauthenticatedHttpClient; + } + + public void Dispose() + { + _authenticatedHttpClient?.Dispose(); + _unauthenticatedHttpClient?.Dispose(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs index 2aeb8ed90a..5ff4d39d4f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs @@ -25,16 +25,19 @@ namespace Volo.Abp.Cli.Licensing private readonly ILogger _logger; private DeveloperApiKeyResult _apiKeyResult = null; + private readonly CliHttpClientFactory _cliHttpClientFactory; public AbpIoApiKeyService( IJsonSerializer jsonSerializer, ICancellationTokenProvider cancellationTokenProvider, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, - ILogger logger) + ILogger logger, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; _logger = logger; + _cliHttpClientFactory = cliHttpClientFactory; CancellationTokenProvider = cancellationTokenProvider; } @@ -56,22 +59,21 @@ namespace Volo.Abp.Cli.Licensing } var url = $"{CliUrls.WwwAbpIo}api/license/api-key"; + var client = _cliHttpClientFactory.CreateClient(); - using (var client = new CliHttpClient()) + using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, _logger)) { - using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, _logger)) + if (!response.IsSuccessStatusCode) { - if (!response.IsSuccessStatusCode) - { - throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); - } + throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); + } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); - var responseContent = await response.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(responseContent); - } + var responseContent = await response.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize(responseContent); } + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs index 057ffcc02d..7907baaa2d 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs @@ -23,6 +23,7 @@ namespace Volo.Abp.Cli.NuGet protected ICancellationTokenProvider CancellationTokenProvider { get; } protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } private readonly IApiKeyService _apiKeyService; + private readonly CliHttpClientFactory _cliHttpClientFactory; private List _proPackageList; private DeveloperApiKeyResult _apiKeyResult; @@ -30,12 +31,14 @@ namespace Volo.Abp.Cli.NuGet IJsonSerializer jsonSerializer, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, ICancellationTokenProvider cancellationTokenProvider, - IApiKeyService apiKeyService) + IApiKeyService apiKeyService, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; CancellationTokenProvider = cancellationTokenProvider; _apiKeyService = apiKeyService; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -93,18 +96,17 @@ namespace Volo.Abp.Cli.NuGet url = $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json"; } - using (var client = new CliHttpClient(setBearerToken: false)) + var client = _cliHttpClientFactory.CreateClient(needsAuthentication: false); + + using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync( + url, + cancellationToken: CancellationTokenProvider.Token, + logger: Logger + )) { - using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync( - url, - cancellationToken: CancellationTokenProvider.Token, - logger: Logger - )) - { - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); - var responseContent = await responseMessage.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(responseContent).Versions; - } + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + var responseContent = await responseMessage.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize(responseContent).Versions; } } @@ -120,9 +122,8 @@ namespace Volo.Abp.Cli.NuGet private async Task> GetProPackageListAsync() { - using var client = new CliHttpClient(); - var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/proPackageNames"; + var client = _cliHttpClientFactory.CreateClient(needsAuthentication: true); using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync( url: url, 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 621631af2a..e97d7443d4 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 @@ -18,15 +18,18 @@ namespace Volo.Abp.Cli.ProjectBuilding.Analyticses private readonly IJsonSerializer _jsonSerializer; private readonly ILogger _logger; private readonly IRemoteServiceExceptionHandler _remoteServiceExceptionHandler; + private readonly CliHttpClientFactory _cliHttpClientFactory; public CliAnalyticsCollect( ICancellationTokenProvider cancellationTokenProvider, IJsonSerializer jsonSerializer, - IRemoteServiceExceptionHandler remoteServiceExceptionHandler) + IRemoteServiceExceptionHandler remoteServiceExceptionHandler, + CliHttpClientFactory cliHttpClientFactory) { _cancellationTokenProvider = cancellationTokenProvider; _jsonSerializer = jsonSerializer; _remoteServiceExceptionHandler = remoteServiceExceptionHandler; + _cliHttpClientFactory = cliHttpClientFactory; _logger = NullLogger.Instance; } @@ -34,32 +37,31 @@ namespace Volo.Abp.Cli.ProjectBuilding.Analyticses { var postData = _jsonSerializer.Serialize(input); var url = $"{CliUrls.WwwAbpIo}api/clianalytics/collect"; - + try { - using (var client = new CliHttpClient()) - { - var responseMessage = await client.PostAsync( - url, - new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json), - _cancellationTokenProvider.Token - ); + var client = _cliHttpClientFactory.CreateClient(); - if (!responseMessage.IsSuccessStatusCode) - { - var exceptionMessage = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. "; - var remoteServiceErrorMessage = await _remoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage); + var responseMessage = await client.PostAsync( + url, + new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json), + _cancellationTokenProvider.Token + ); - if (remoteServiceErrorMessage != null) - { - exceptionMessage += remoteServiceErrorMessage; - } + if (!responseMessage.IsSuccessStatusCode) + { + var exceptionMessage = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. "; + var remoteServiceErrorMessage = await _remoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage); - _logger.LogInformation(exceptionMessage); + if (remoteServiceErrorMessage != null) + { + exceptionMessage += remoteServiceErrorMessage; } + + _logger.LogInformation(exceptionMessage); } } - catch (Exception ex) + catch (Exception) { // ignored } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs index 81bc704151..92bbe728c0 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs @@ -16,14 +16,18 @@ namespace Volo.Abp.Cli.ProjectBuilding public ICancellationTokenProvider CancellationTokenProvider { get; } public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } + private readonly CliHttpClientFactory _cliHttpClientFactory; + public ModuleInfoProvider( IJsonSerializer jsonSerializer, ICancellationTokenProvider cancellationTokenProvider, - IRemoteServiceExceptionHandler remoteServiceExceptionHandler) + IRemoteServiceExceptionHandler remoteServiceExceptionHandler, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; CancellationTokenProvider = cancellationTokenProvider; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; + _cliHttpClientFactory = cliHttpClientFactory; } public async Task GetAsync(string name) @@ -47,17 +51,16 @@ namespace Volo.Abp.Cli.ProjectBuilding private async Task> GetModuleListInternalAsync() { - using (var client = new CliHttpClient()) + var client = _cliHttpClientFactory.CreateClient(); + + using (var responseMessage = await client.GetAsync( + $"{CliUrls.WwwAbpIo}api/download/modules/", + CancellationTokenProvider.Token + )) { - using (var responseMessage = await client.GetAsync( - $"{CliUrls.WwwAbpIo}api/download/modules/", - CancellationTokenProvider.Token - )) - { - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); - var result = await responseMessage.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize>(result); - } + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + var result = await responseMessage.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize>(result); } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs index b9308dd707..1a4bf3c05a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs @@ -24,13 +24,17 @@ namespace Volo.Abp.Cli.ProjectBuilding public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } public AuthService AuthService { get; } + private readonly CliHttpClientFactory _cliHttpClientFactory; + public TemplateInfoProvider(ICancellationTokenProvider cancellationTokenProvider, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, - AuthService authService) + AuthService authService, + CliHttpClientFactory cliHttpClientFactory) { CancellationTokenProvider = cancellationTokenProvider; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; AuthService = authService; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -76,21 +80,19 @@ namespace Volo.Abp.Cli.ProjectBuilding try { var url = $"{CliUrls.WwwAbpIo}api/license/check-user"; + var client = _cliHttpClientFactory.CreateClient(); - using (var client = new CliHttpClient()) + using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger)) { - using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger)) + if (!response.IsSuccessStatusCode) { - if (!response.IsSuccessStatusCode) - { - throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); - } + throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); + } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); - var responseContent = await response.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(responseContent); - } + var responseContent = await response.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize(responseContent); } } catch (Exception) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs index ee736f3aa0..5e039f7f3f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs @@ -21,13 +21,15 @@ namespace Volo.Abp.Cli.ProjectModification public class ProjectNugetPackageAdder : ITransientDependency { public ILogger Logger { get; set; } + public BundleCommand BundleCommand { get; } protected IJsonSerializer JsonSerializer { get; } protected ProjectNpmPackageAdder NpmPackageAdder { get; } protected DerivedClassFinder ModuleClassFinder { get; } protected ModuleClassDependcyAdder ModuleClassDependcyAdder { get; } protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } - public BundleCommand BundleCommand { get; } + + private readonly CliHttpClientFactory _cliHttpClientFactory; public ProjectNugetPackageAdder( IJsonSerializer jsonSerializer, @@ -35,7 +37,8 @@ namespace Volo.Abp.Cli.ProjectModification DerivedClassFinder moduleClassFinder, ModuleClassDependcyAdder moduleClassDependcyAdder, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, - BundleCommand bundleCommand) + BundleCommand bundleCommand, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; NpmPackageAdder = npmPackageAdder; @@ -43,6 +46,7 @@ namespace Volo.Abp.Cli.ProjectModification ModuleClassDependcyAdder = moduleClassDependcyAdder; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; BundleCommand = bundleCommand; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -121,7 +125,7 @@ namespace Volo.Abp.Cli.ProjectModification private Task AddToCsprojManuallyAsync(string projectFile, NugetPackageInfo package, string version = null) { var projectFileContent = File.ReadAllText(projectFile); - var doc = new XmlDocument() {PreserveWhitespace = true}; + var doc = new XmlDocument() { PreserveWhitespace = true }; doc.Load(StreamHelper.GenerateStreamFromString(projectFileContent)); var itemGroupNodes = doc.SelectNodes("/Project/ItemGroup"); @@ -162,7 +166,7 @@ namespace Volo.Abp.Cli.ProjectModification private string GetAbpVersionOrNull(string projectFileContent) { - var doc = new XmlDocument() {PreserveWhitespace = true}; + var doc = new XmlDocument() { PreserveWhitespace = true }; doc.Load(StreamHelper.GenerateStreamFromString(projectFileContent)); @@ -173,12 +177,11 @@ namespace Volo.Abp.Cli.ProjectModification protected virtual async Task FindNugetPackageInfoAsync(string packageName) { - using (var client = new CliHttpClient()) - { - var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/byName/?name=" + packageName; - - var response = await client.GetAsync(url); + var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/byName/?name=" + packageName; + var client = _cliHttpClientFactory.CreateClient(); + using (var response = await client.GetAsync(url)) + { if (!response.IsSuccessStatusCode) { if (response.StatusCode == HttpStatusCode.NotFound) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 90f4ff5d8f..683e279a78 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -7,7 +7,6 @@ using System.Linq; using System.Net; using System.Threading.Tasks; using Volo.Abp.Cli.Args; -using Volo.Abp.Cli.Bundling; using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.Http; @@ -22,6 +21,12 @@ namespace Volo.Abp.Cli.ProjectModification public class SolutionModuleAdder : ITransientDependency { public ILogger Logger { get; set; } + public SourceCodeDownloadService SourceCodeDownloadService { get; } + public SolutionFileModifier SolutionFileModifier { get; } + public NugetPackageToLocalReferenceConverter NugetPackageToLocalReferenceConverter { get; } + public AngularModuleSourceCodeAdder AngularModuleSourceCodeAdder { get; } + public NewCommand NewCommand { get; } + public BundleCommand BundleCommand { get; } protected IJsonSerializer JsonSerializer { get; } protected ProjectNugetPackageAdder ProjectNugetPackageAdder { get; } @@ -31,12 +36,9 @@ namespace Volo.Abp.Cli.ProjectModification protected ProjectNpmPackageAdder ProjectNpmPackageAdder { get; } protected NpmGlobalPackagesChecker NpmGlobalPackagesChecker { get; } protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } - public SourceCodeDownloadService SourceCodeDownloadService { get; } - public SolutionFileModifier SolutionFileModifier { get; } - public NugetPackageToLocalReferenceConverter NugetPackageToLocalReferenceConverter { get; } - public AngularModuleSourceCodeAdder AngularModuleSourceCodeAdder { get; } - public NewCommand NewCommand { get; } - public BundleCommand BundleCommand { get; } + + private readonly CliHttpClientFactory _cliHttpClientFactory; + public SolutionModuleAdder( IJsonSerializer jsonSerializer, @@ -52,7 +54,8 @@ namespace Volo.Abp.Cli.ProjectModification NugetPackageToLocalReferenceConverter nugetPackageToLocalReferenceConverter, AngularModuleSourceCodeAdder angularModuleSourceCodeAdder, NewCommand newCommand, - BundleCommand bundleCommand) + BundleCommand bundleCommand, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; ProjectNugetPackageAdder = projectNugetPackageAdder; @@ -68,6 +71,7 @@ namespace Volo.Abp.Cli.ProjectModification AngularModuleSourceCodeAdder = angularModuleSourceCodeAdder; NewCommand = newCommand; BundleCommand = bundleCommand; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -131,7 +135,7 @@ namespace Volo.Abp.Cli.ProjectModification { var blazorProject = projectFiles.FirstOrDefault(f => f.EndsWith(".Blazor.csproj")); - if (blazorProject == null || !module.NugetPackages.Any(np=> np.Target == NuGetPackageTarget.Blazor)) + if (blazorProject == null || !module.NugetPackages.Any(np => np.Target == NuGetPackageTarget.Blazor)) { return; } @@ -211,7 +215,7 @@ namespace Volo.Abp.Cli.ProjectModification return; } - var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d=> d.EndsWith(postFix)); + var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d => d.EndsWith(postFix)); if (projectFolderPath == null) { @@ -235,7 +239,7 @@ namespace Volo.Abp.Cli.ProjectModification return; } - var projectFolderPath = Directory.GetDirectories(testPath).FirstOrDefault(d=> d.EndsWith("Domain.Tests")); + var projectFolderPath = Directory.GetDirectories(testPath).FirstOrDefault(d => d.EndsWith("Domain.Tests")); if (projectFolderPath == null) { @@ -250,10 +254,10 @@ namespace Volo.Abp.Cli.ProjectModification return; } - File.WriteAllText(csprojFile, File.ReadAllText(csprojFile).Replace("EntityFrameworkCore","MongoDB")); + File.WriteAllText(csprojFile, File.ReadAllText(csprojFile).Replace("EntityFrameworkCore", "MongoDB")); File.WriteAllText(moduleFile, File.ReadAllText(moduleFile) - .Replace(".EntityFrameworkCore;",".MongoDB;") - .Replace("EntityFrameworkCoreTestModule","MongoDbTestModule")); + .Replace(".EntityFrameworkCore;", ".MongoDB;") + .Replace("EntityFrameworkCoreTestModule", "MongoDbTestModule")); } private async Task AddAngularPackages(string solutionFilePath, ModuleWithMastersInfo module) @@ -355,9 +359,9 @@ namespace Volo.Abp.Cli.ProjectModification ); } - await DeleteRedundantHostProjects(targetModuleFolder,"app"); - await DeleteRedundantHostProjects(targetModuleFolder,"demo"); - await DeleteRedundantHostProjects(targetModuleFolder,"host"); + await DeleteRedundantHostProjects(targetModuleFolder, "app"); + await DeleteRedundantHostProjects(targetModuleFolder, "demo"); + await DeleteRedundantHostProjects(targetModuleFolder, "host"); if (module.MasterModuleInfos == null) { @@ -519,12 +523,11 @@ namespace Volo.Abp.Cli.ProjectModification return await GetEmptyModuleProjectInfoAsync(moduleName, newProTemplate); } - using (var client = new CliHttpClient()) - { - var url = $"{CliUrls.WwwAbpIo}api/app/module/byNameWithDetails/?name=" + moduleName; - - var response = await client.GetAsync(url); + var url = $"{CliUrls.WwwAbpIo}api/app/module/byNameWithDetails/?name=" + moduleName; + var client = _cliHttpClientFactory.CreateClient(); + using (var response = await client.GetAsync(url)) + { if (!response.IsSuccessStatusCode) { if (response.StatusCode == HttpStatusCode.NotFound) @@ -625,7 +628,7 @@ namespace Volo.Abp.Cli.ProjectModification protected virtual async Task IsProjectTiered(string[] projectFiles) { return projectFiles.Select(ProjectFileNameHelper.GetAssemblyNameFromProjectPath) - .Any(p =>p.EndsWith(".HttpApi.Host")) + .Any(p => p.EndsWith(".HttpApi.Host")) && projectFiles.Select(ProjectFileNameHelper.GetAssemblyNameFromProjectPath) .Any(p => p.EndsWith(".IdentityServer")); } From fa477b9e47856b36fb4571f483544c42e6d3919d Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 5 Feb 2021 21:29:21 +0300 Subject: [PATCH 11/23] implement timeout for singleton HttpClient #7618 --- .../Volo/Abp/Cli/Http/CliHttpClient.cs | 8 +- .../Volo/Abp/Cli/Http/CliHttpClientFactory.cs | 51 +++++++-- .../ProjectBuilding/AbpIoSourceCodeStore.cs | 101 ++++++++---------- .../MyGetPackageListFinder.cs | 28 +++-- .../ProjectModification/NpmPackagesUpdater.cs | 23 ++-- 5 files changed, 125 insertions(+), 86 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs index 1122648ff2..5aaf2ae2d3 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs @@ -67,7 +67,12 @@ namespace Volo.Abp.Cli.Http }; } - cancellationToken ??= CancellationToken.None; + if (cancellationToken == null) + { + var cancellationTokenSource = new CancellationTokenSource(); + cancellationTokenSource.CancelAfter(DefaultTimeout); + cancellationToken = cancellationTokenSource.Token; + } return await HttpPolicyExtensions .HandleTransientHttpError() @@ -95,5 +100,6 @@ namespace Volo.Abp.Cli.Http .ExecuteAsync(async () => await this.GetAsync(url, cancellationToken.Value)); } + } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs index 3748e8e64a..b509a1614d 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs @@ -1,5 +1,7 @@ using System; +using System.Threading; using Volo.Abp.DependencyInjection; +using Volo.Abp.Threading; namespace Volo.Abp.Cli.Http { @@ -7,32 +9,67 @@ namespace Volo.Abp.Cli.Http { private static CliHttpClient _authenticatedHttpClient; private static CliHttpClient _unauthenticatedHttpClient; + private readonly ICancellationTokenProvider _cancellationTokenProvider; - public CliHttpClient CreateClient(bool needsAuthentication = true) + public CliHttpClientFactory(ICancellationTokenProvider cancellationTokenProvider) + { + _cancellationTokenProvider = cancellationTokenProvider; + } + + public CliHttpClient CreateClient(bool needsAuthentication = true, TimeSpan? timeout = null) { if (needsAuthentication) { - return CreateAuthenticatedHttpClient(); + return CreateAuthenticatedHttpClient(timeout); } - return CreateUnAuthenticatedHttpClient(); + return CreateUnAuthenticatedHttpClient(timeout); + } + + public CancellationToken GetCancellationToken(TimeSpan? timeout = null) + { + if (timeout == null) + { + if (_cancellationTokenProvider == null) + { + var cancellationTokenSource = new CancellationTokenSource(); + cancellationTokenSource.CancelAfter(CliHttpClient.DefaultTimeout); + return cancellationTokenSource.Token; + } + else + { + return _cancellationTokenProvider.Token; + } + } + else + { + var cancellationTokenSource = new CancellationTokenSource(); + cancellationTokenSource.CancelAfter(Convert.ToInt32(timeout.Value.TotalMilliseconds)); + return cancellationTokenSource.Token; + } } - private static CliHttpClient CreateAuthenticatedHttpClient() + private static CliHttpClient CreateAuthenticatedHttpClient(TimeSpan? timeout = null) { if (_authenticatedHttpClient == null) { - _authenticatedHttpClient = new CliHttpClient(setBearerToken: true); + _authenticatedHttpClient = new CliHttpClient(setBearerToken: true) + { + Timeout = System.Threading.Timeout.InfiniteTimeSpan + }; } return _authenticatedHttpClient; } - private static CliHttpClient CreateUnAuthenticatedHttpClient() + private static CliHttpClient CreateUnAuthenticatedHttpClient(TimeSpan? timeout = null) { if (_unauthenticatedHttpClient == null) { - _unauthenticatedHttpClient = new CliHttpClient(setBearerToken: false); + _unauthenticatedHttpClient = new CliHttpClient(setBearerToken: false) + { + Timeout = System.Threading.Timeout.InfiniteTimeSpan + }; } return _unauthenticatedHttpClient; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs index 4d4a8726a8..bebe44542d 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs @@ -9,6 +9,7 @@ using System.Net.Http; using System.Reflection; using System.Text; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Cli.Http; using Volo.Abp.Cli.ProjectBuilding.Templates.App; @@ -28,22 +29,23 @@ namespace Volo.Abp.Cli.ProjectBuilding public ILogger Logger { get; set; } protected AbpCliOptions Options { get; } - protected IJsonSerializer JsonSerializer { get; } - protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } - protected ICancellationTokenProvider CancellationTokenProvider { get; } + private readonly CliHttpClientFactory _cliHttpClientFactory; + public AbpIoSourceCodeStore( IOptions options, IJsonSerializer jsonSerializer, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, - ICancellationTokenProvider cancellationTokenProvider) + ICancellationTokenProvider cancellationTokenProvider, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; CancellationTokenProvider = cancellationTokenProvider; + _cliHttpClientFactory = cliHttpClientFactory; Options = options.Value; Logger = NullLogger.Instance; @@ -134,24 +136,17 @@ namespace Volo.Abp.Cli.ProjectBuilding try { - using (var client = new CliHttpClient(TimeSpan.FromMinutes(10))) + var client = _cliHttpClientFactory.CreateClient(); + var stringContent = new StringContent( + JsonSerializer.Serialize(new GetLatestSourceCodeVersionDto { Name = name, IncludePreReleases = includePreReleases }), + Encoding.UTF8, + MimeTypes.Application.Json + ); + + using (var response = await client.PostAsync(url, stringContent, _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10)))) { - var response = await client.PostAsync( - url, - new StringContent( - JsonSerializer.Serialize( - new GetLatestSourceCodeVersionDto { Name = name, IncludePreReleases = includePreReleases } - ), - Encoding.UTF8, - MimeTypes.Application.Json - ), - CancellationTokenProvider.Token - ); - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); - var result = await response.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(result).Version; } } @@ -164,32 +159,25 @@ namespace Volo.Abp.Cli.ProjectBuilding private async Task GetTemplateNugetVersionAsync(string name, string type, string version) { - var url = $"{CliUrls.WwwAbpIo}api/download/{type}/get-nuget-version/"; - try { - using (var client = new CliHttpClient(TimeSpan.FromMinutes(10))) - { - var response = await client.PostAsync( - url, - new StringContent( - JsonSerializer.Serialize( - new GetTemplateNugetVersionDto { Name = name, Version = version} - ), - Encoding.UTF8, - MimeTypes.Application.Json - ), - CancellationTokenProvider.Token - ); + var url = $"{CliUrls.WwwAbpIo}api/download/{type}/get-nuget-version/"; + var client = _cliHttpClientFactory.CreateClient(); - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); + var stringContent = new StringContent( + JsonSerializer.Serialize(new GetTemplateNugetVersionDto { Name = name, Version = version }), + Encoding.UTF8, + MimeTypes.Application.Json + ); + using (var response = await client.PostAsync(url, stringContent, _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10)))) + { + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); var result = await response.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(result).Version; } } - catch (Exception ex) + catch (Exception) { return null; } @@ -203,36 +191,35 @@ namespace Volo.Abp.Cli.ProjectBuilding try { - using (var client = new CliHttpClient(TimeSpan.FromMinutes(10))) - { + var client = _cliHttpClientFactory.CreateClient(); - if (input.TemplateSource.IsNullOrWhiteSpace()) - { - responseMessage = await client.PostAsync( - url, - new StringContent(JsonSerializer.Serialize(input), Encoding.UTF8, MimeTypes.Application.Json), - CancellationTokenProvider.Token - ); - } - else - { - responseMessage = await client.GetAsync(input.TemplateSource, CancellationTokenProvider.Token); - } + if (input.TemplateSource.IsNullOrWhiteSpace()) + { + responseMessage = await client.PostAsync( + url, + new StringContent(JsonSerializer.Serialize(input), Encoding.UTF8, MimeTypes.Application.Json), + _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10)) + ); + } + else + { + responseMessage = await client.GetAsync(input.TemplateSource, _cliHttpClientFactory.GetCancellationToken()); + } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + var resultAsBytes = await responseMessage.Content.ReadAsByteArrayAsync(); + responseMessage.Dispose(); - return await responseMessage.Content.ReadAsByteArrayAsync(); - } + return resultAsBytes; } catch (Exception ex) { - Console.WriteLine("Error occured while downloading source-code from {0} : {1}{2}{3}", - url, responseMessage?.ToString(), Environment.NewLine, ex.Message); + Console.WriteLine("Error occured while downloading source-code from {0} : {1}{2}{3}", url, responseMessage?.ToString(), Environment.NewLine, ex.Message); throw; } } - private bool IsNetworkSource(string source) + private static bool IsNetworkSource(string source) { return source.ToLower().StartsWith("http"); } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs index 75e9156ce0..5434ede83f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs @@ -6,17 +6,23 @@ using Microsoft.Extensions.Logging.Abstractions; using Newtonsoft.Json; using Volo.Abp.Cli.Http; using Volo.Abp.DependencyInjection; +using Volo.Abp.Threading; namespace Volo.Abp.Cli.ProjectModification { public class MyGetPackageListFinder : ISingletonDependency { - private MyGetApiResponse _response; - public ILogger Logger { get; set; } - public MyGetPackageListFinder() + private MyGetApiResponse _response; + private readonly CliHttpClientFactory _cliHttpClientFactory; + protected ICancellationTokenProvider CancellationTokenProvider { get; } + + public MyGetPackageListFinder(CliHttpClientFactory cliHttpClientFactory, + ICancellationTokenProvider cancellationTokenProvider) { + _cliHttpClientFactory = cliHttpClientFactory; + CancellationTokenProvider = cancellationTokenProvider; Logger = NullLogger.Instance; } @@ -29,18 +35,20 @@ namespace Volo.Abp.Cli.ProjectModification try { - using (var client = new CliHttpClient(TimeSpan.FromMinutes(10))) + var client = _cliHttpClientFactory.CreateClient(); + + using (var responseMessage = await client.GetAsync( + $"{CliUrls.WwwAbpIo}api/myget/packages/", + _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10)))) { - var responseMessage = await client.GetAsync( - $"{CliUrls.WwwAbpIo}api/myget/packages/" + _response = JsonConvert.DeserializeObject( + Encoding.Default.GetString(await responseMessage.Content.ReadAsByteArrayAsync()) ); - - _response = JsonConvert.DeserializeObject(Encoding.Default.GetString(await responseMessage.Content.ReadAsByteArrayAsync())); } } - catch (Exception) + catch (Exception ex) { - Logger.LogError("Unable to get latest preview version."); + Logger.LogError("Unable to get latest preview version. Error: " + ex.Message); throw; } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs index 8fc800c146..bf23bc3786 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs @@ -27,15 +27,18 @@ namespace Volo.Abp.Cli.ProjectModification private readonly PackageJsonFileFinder _packageJsonFileFinder; private readonly NpmGlobalPackagesChecker _npmGlobalPackagesChecker; private readonly Dictionary _fileVersionStorage = new Dictionary(); + private readonly CliHttpClientFactory _cliHttpClientFactory; public NpmPackagesUpdater( PackageJsonFileFinder packageJsonFileFinder, NpmGlobalPackagesChecker npmGlobalPackagesChecker, - ICancellationTokenProvider cancellationTokenProvider) + ICancellationTokenProvider cancellationTokenProvider, + CliHttpClientFactory cliHttpClientFactory) { _packageJsonFileFinder = packageJsonFileFinder; _npmGlobalPackagesChecker = npmGlobalPackagesChecker; CancellationTokenProvider = cancellationTokenProvider; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -151,16 +154,14 @@ namespace Volo.Abp.Cli.ProjectModification { try { - using (var client = new CliHttpClient(TimeSpan.FromMinutes(1))) + var client = _cliHttpClientFactory.CreateClient(); + using (var response = await client.GetHttpResponseMessageWithRetryAsync( + url: $"{CliUrls.WwwAbpIo}api/myget/apikey/", + cancellationToken: CancellationTokenProvider.Token, + logger: Logger + )) { - using (var response = await client.GetHttpResponseMessageWithRetryAsync( - url: $"{CliUrls.WwwAbpIo}api/myget/apikey/", - cancellationToken: CancellationTokenProvider.Token, - logger: Logger - )) - { - return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync()); - } + return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync()); } } catch (Exception) @@ -356,7 +357,7 @@ namespace Volo.Abp.Cli.ProjectModification protected virtual string ExtractVersions(string output) { var arrayStart = output.IndexOf('['); - return output.Substring(arrayStart, output.IndexOf(']') - arrayStart + 1); + return output.Substring(arrayStart, output.IndexOf(']') - arrayStart + 1); } protected virtual bool SpecifiedVersionExists(string version, JProperty package) From 90decc7606924cc7b0c110eb73efc99991b28846 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 5 Feb 2021 21:34:35 +0300 Subject: [PATCH 12/23] add cancellation token --- .../Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs index 5e039f7f3f..6ebcad2c08 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs @@ -180,7 +180,7 @@ namespace Volo.Abp.Cli.ProjectModification var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/byName/?name=" + packageName; var client = _cliHttpClientFactory.CreateClient(); - using (var response = await client.GetAsync(url)) + using (var response = await client.GetAsync(url, _cliHttpClientFactory.GetCancellationToken())) { if (!response.IsSuccessStatusCode) { From f69f8c9fd661e13fbfd131b67e5557e8b75ac76e Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 5 Feb 2021 21:35:33 +0300 Subject: [PATCH 13/23] remove unncessary async usage #7618 --- .../ProjectModification/SolutionModuleAdder.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 683e279a78..c84713ffcb 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -36,7 +36,7 @@ namespace Volo.Abp.Cli.ProjectModification protected ProjectNpmPackageAdder ProjectNpmPackageAdder { get; } protected NpmGlobalPackagesChecker NpmGlobalPackagesChecker { get; } protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } - + private readonly CliHttpClientFactory _cliHttpClientFactory; @@ -54,7 +54,7 @@ namespace Volo.Abp.Cli.ProjectModification NugetPackageToLocalReferenceConverter nugetPackageToLocalReferenceConverter, AngularModuleSourceCodeAdder angularModuleSourceCodeAdder, NewCommand newCommand, - BundleCommand bundleCommand, + BundleCommand bundleCommand, CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; @@ -175,7 +175,7 @@ namespace Volo.Abp.Cli.ProjectModification { await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered); await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".EntityFrameworkCore.Tests"); - await ChangeDomainTestReferenceToMongoDB(module, moduleSolutionFile); + ChangeDomainTestReferenceToMongoDB(module, moduleSolutionFile); } } @@ -230,7 +230,7 @@ namespace Volo.Abp.Cli.ProjectModification } } - private async Task ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile) + private void ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile) { var testPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "test"); @@ -505,7 +505,7 @@ namespace Volo.Abp.Cli.ProjectModification } } - protected virtual async Task RunMigrator(string[] projectFiles) + protected virtual void RunMigrator(string[] projectFiles) { var dbMigratorProject = projectFiles.FirstOrDefault(p => p.EndsWith(".DbMigrator.csproj")); @@ -520,13 +520,13 @@ namespace Volo.Abp.Cli.ProjectModification { if (newTemplate || newProTemplate) { - return await GetEmptyModuleProjectInfoAsync(moduleName, newProTemplate); + return GetEmptyModuleProjectInfo(moduleName, newProTemplate); } var url = $"{CliUrls.WwwAbpIo}api/app/module/byNameWithDetails/?name=" + moduleName; var client = _cliHttpClientFactory.CreateClient(); - using (var response = await client.GetAsync(url)) + using (var response = await client.GetAsync(url, _cliHttpClientFactory.GetCancellationToken())) { if (!response.IsSuccessStatusCode) { @@ -543,7 +543,7 @@ namespace Volo.Abp.Cli.ProjectModification } } - private async Task GetEmptyModuleProjectInfoAsync(string moduleName, + private ModuleWithMastersInfo GetEmptyModuleProjectInfo(string moduleName, bool newProTemplate = false) { var module = new ModuleWithMastersInfo From 002b539c45ea37ce77cb5a22e21b0d6b952ba34f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sun, 7 Feb 2021 22:32:11 +0800 Subject: [PATCH 14/23] Add re-queue feature to kafka --- .../Volo/Abp/Kafka/AbpKafkaOptions.cs | 4 ++- .../Volo/Abp/Kafka/KafkaMessageConsumer.cs | 26 ++++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) 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 1769d8a076..26d15ce818 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs @@ -9,11 +9,13 @@ namespace Volo.Abp.Kafka public KafkaConnections Connections { get; } public Action ConfigureProducer { get; set; } - + public Action ConfigureConsumer { get; set; } public Action ConfigureTopic { get; set; } + public bool ReQueue { get; set; } = true; + public AbpKafkaOptions() { Connections = new KafkaConnections(); 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 8ae81a2a26..a1c3fefd74 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Concurrent; -using System.Linq; using System.Threading.Tasks; using Confluent.Kafka; using Confluent.Kafka.Admin; @@ -20,6 +19,8 @@ namespace Volo.Abp.Kafka protected IConsumerPool ConsumerPool { get; } + protected IProducerPool ProducerPool { get; } + protected IExceptionNotifier ExceptionNotifier { get; } protected AbpKafkaOptions Options { get; } @@ -37,10 +38,12 @@ namespace Volo.Abp.Kafka public KafkaMessageConsumer( IConsumerPool consumerPool, IExceptionNotifier exceptionNotifier, - IOptions options) + IOptions options, + IProducerPool producerPool) { ConsumerPool = consumerPool; ExceptionNotifier = exceptionNotifier; + ProducerPool = producerPool; Options = options.Value; Logger = NullLogger.Instance; @@ -132,14 +135,29 @@ namespace Volo.Abp.Kafka { await callback(consumeResult.Message); } - - Consumer.Commit(consumeResult); } catch (Exception ex) { + await RequeueAsync(consumeResult); + Logger.LogException(ex); await ExceptionNotifier.NotifyAsync(ex); } + finally + { + Consumer.Commit(consumeResult); + } + } + + protected virtual async Task RequeueAsync(ConsumeResult consumeResult) + { + if (!Options.ReQueue) + { + return; + } + + var producer = ProducerPool.Get(ConnectionName); + await producer.ProduceAsync(consumeResult.Topic, consumeResult.Message); } public virtual void Dispose() From 3ab79685b4ed2ecd329d05515799f1cc7451d05c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 7 Feb 2021 18:00:11 +0300 Subject: [PATCH 15/23] Ignore errors on RabbitMQ Nack message. --- .../Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs index 0c180a4ac7..f757efab64 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs @@ -191,7 +191,16 @@ namespace Volo.Abp.RabbitMQ } catch (Exception ex) { - Channel.BasicNack(basicDeliverEventArgs.DeliveryTag, multiple: false, requeue: true); + try + { + Channel.BasicNack( + basicDeliverEventArgs.DeliveryTag, + multiple: false, + requeue: true + ); + } + catch { } + Logger.LogException(ex); await ExceptionNotifier.NotifyAsync(ex); } From e4c193513fd1378bb07499753d4f9e9d3b28bc30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 7 Feb 2021 18:58:52 +0300 Subject: [PATCH 16/23] Update jmeter tests. --- test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx | 6 +++--- test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx b/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx index 0c08c60f20..5c1c5dbced 100644 --- a/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx +++ b/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx @@ -1,5 +1,5 @@ - + @@ -16,10 +16,10 @@ continue false - 20 + 40 2000 - 10 + 20 false diff --git a/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx b/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx index c7d6b3292c..5ceb318e6b 100644 --- a/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx +++ b/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx @@ -1,5 +1,5 @@ - + @@ -16,10 +16,10 @@ continue false - 20 + 40 - 500 - 10 + 2000 + 20 false From 11f84dfd135ea31417bc2e86ca4474ef5a8340d4 Mon Sep 17 00:00:00 2001 From: cx Date: Mon, 8 Feb 2021 08:52:21 +0800 Subject: [PATCH 17/23] add zh-Hans doc PlugIn-Modules.md --- docs/zh-Hans/PlugIn-Modules.md | 233 +++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 docs/zh-Hans/PlugIn-Modules.md diff --git a/docs/zh-Hans/PlugIn-Modules.md b/docs/zh-Hans/PlugIn-Modules.md new file mode 100644 index 0000000000..3380e7372d --- /dev/null +++ b/docs/zh-Hans/PlugIn-Modules.md @@ -0,0 +1,233 @@ +# 模块化插件 + +可以将[模块](Module-Development-Basics.md)加载为插件。这意味着您可能不需要在解决方案中引用模块的程序集,就可以像其他模块一样在启动应用时加载该模块。 + +## 基本用法 + +`IServiceCollection.AddApplication()` 扩展方法可以获取配置插件源的选项。 + +**例如: 从文件夹加载插件** + +````csharp +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity.PlugIns; + +namespace MyPlugInDemo.Web +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddApplication(options => + { + options.PlugInSources.AddFolder(@"D:\Temp\MyPlugIns"); + }); + } + + public void Configure(IApplicationBuilder app) + { + app.InitializeApplication(); + } + } +} +```` + +* 这是典型的ASP.NET Core应用程序的`Startup`类. +* `PlugInSources.AddFolder`从指定的目录中加载程序集(通常为dll)。 + +就这样。ABP将在这个目录中发现这些模块,像其他普通模版一样配置和初始化他们。 + +### 插件源 + +`options.PlugInSources`类实际上是`IPlugInSource`接口的一系列实现并且 `AddFolder`方法仅仅是以下表达式的便捷方法: + +````csharp +options.PlugInSources.Add(new FolderPlugInSource(@"D:\Temp\MyPlugIns")); +```` + +> `AddFolder()`方法仅在给定目录下查找程序集文件,而不在子目录中查找。您可以传递一个`SearchOption.AllDirectories`参数作为第二个参数,来递归地查找它的子目录。 + +这里有两个内置插件源的示例: + +* `PlugInSources.AddFiles()`方法获取程序集(通常是dll)文件列表。这是使用`FilePlugInSource`类的快捷方式。 +* `PlugInSources.AddTypes()`方法获取模块类类型的列表。如果实用化此方法,则需要自己加载模块的程序集,但是在需要时它提供了灵活性。这是使用`TypePlugInSource`类的快捷方式。 + +如果需要,您可以创建自己的`IPlugInSource`的接口实现,并像其他方法一样添加到`options.PlugInSources`中。 + +## 例如:创建一个简单的插件 + +在一个解决方案中创建一个简单的**类库项目** + +![简单插件库](images/simple-plugin-library.png) + +您可以在模块中添加需要使用的ABP框架包。至少,您应该为这个项目添加包`Volo.Abp.Core`: + +```` +Install-Package Volo.Abp.Core +```` + +每个[模块](Module-Development-Basics.md)必须声明为一个继承自`AbpModule`的类。这里是一个简单的模块类,用于解析一个服务并在应用启动时对其初始化: + +````csharp +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.Modularity; + +namespace MyPlugIn +{ + public class MyPlungInModule : AbpModule + { + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var myService = context.ServiceProvider + .GetRequiredService(); + + myService.Initialize(); + } + } +} +```` + +`MyService`可以是注册在[依赖注入](Dependency-Injection.md)系统中的任意类,如下所示: + +````csharp +using Microsoft.Extensions.Logging; +using Volo.Abp.DependencyInjection; + +namespace MyPlugIn +{ + public class MyService : ITransientDependency + { + private readonly ILogger _logger; + + public MyService(ILogger logger) + { + _logger = logger; + } + + public void Initialize() + { + _logger.LogInformation("MyService has been initialized"); + } + } +} +```` + +编译这个项目,打开build目录,找到`MyPlugIn.dll`: + +![简单dll插件](images/simple-plug-in-dll-file.png) + +将`MyPlugIn.dll`复制到到插件目录中(此实例为`D:\Temp\MyPlugIns`). + +如果您已经按照上述方式配置了主应用程序(参见“基础用法”部分),那么在应用程序启动时,您可以看到“MyService has been initialized(MyService已经初始化)的日志。 + +## 例如:创建一个Razor Pages插件 + +创建内部带视图的插件需要更多的注意。 + +> 这个示例假设您已经使用应用程序启动模板和MVC / Razor Pages UI[创建了一个新的Web应用程序](https://abp.io/get-started)。 + +在解决方案中创建一个新的**类库**项目: + +![简单razor插件](images/simple-razor-plugin.png) + +编辑这个`.csproj`文件内容: + +````xml + + + + net5.0 + Library + true + + + + + + + +```` + +* 将`Sdk`修改为`Microsoft.NET.Sdk.Web`。 +* 添加了`OutputType`和`IsPackable`属性. +* 添加了`Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared`NuGet包. + +> 不需要[Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared) 包。您可以引用更基础的程序包,例如[Volo.Abp.AspNetCore.Mvc](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc/). 但是,如果需要构建一个UI视图/组件,建议参考[Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared)程序包,因为它是最高级的程序包,不依赖于特定[theme](UI/AspNetCore/Theming.md)。如果依赖特定主题没有问题,则可以直接引用该主题的程序包,以便能够使用插件中特定于主题的功能。 + +接下来在插件中创建模块类: + +````csharp +using System.IO; +using System.Reflection; +using Microsoft.AspNetCore.Mvc.ApplicationParts; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.Modularity; + +namespace MyMvcUIPlugIn +{ + [DependsOn(typeof(AbpAspNetCoreMvcUiThemeSharedModule))] + public class MyMvcUIPlugInModule : AbpModule + { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(mvcBuilder => + { + // 添加插件程序集 + mvcBuilder.PartManager.ApplicationParts.Add(new AssemblyPart(typeof(MyMvcUIPlugInModule).Assembly)); + + // 添加视图程序集 + var viewDllPath = Path.Combine(Path.GetDirectoryName(typeof(MyMvcUIPlugInModule).Assembly.Location), "MyMvcUIPlugIn.Views.dll"); + var viewAssembly = new CompiledRazorAssemblyPart(Assembly.LoadFrom(viewDllPath)); + mvcBuilder.PartManager.ApplicationParts.Add(viewAssembly); + }); + } + } +} +```` + +* 由于我们添加了相关的NuGet包,因此取决于`AbpAspNetCoreMvcUiThemeSharedModule`。 +* 添加插件程序集到ASP.NET Core MVC的`PartManager`中。这是ASP.NET Core所必需的。否则,您插件中的控制器将无法正常工作。 +* 添加插件的视图程序集到ASP.NET Core MVC的`PartManager`中。这是ASP.NET Core所必需的。否则,您在插件中的视图将不起作用。 + +现在,您可以在`Pages`目录下添加一个razor页面,例如`MyPlugInPage.cshtml`: + +````html +@page +@model MyMvcUIPlugIn.Pages.MyPlugInPage +

Welcome to my plug-in page

+

This page is located inside a plug-in module! :)

+```` + +现在,您可以构建插件项目。它将产生以下输出: + +![simple-razor-plug-in-dll-file](images/simple-razor-plug-in-dll-file.png) + +将`MyMvcUIPlugIn.dll`和`MyMvcUIPlugIn.Views.dll`复制到到插件目录下(此示例中为`D:\Temp\MyPlugIns`). + +如果您已经按照上述方式配置了主应用程序(参见“基础用法”部分),那么在应用程序启动的时候,您应该能够访问`/MyPlugInPage`URL: + +![simple-plugin-output](images/simple-plugin-output.png) + +## 讨论 + +在现实世界中,您的插件可能具有一些外部依赖性。另外,您的应用程序可能被设计为支持插件。所有这些都是您自己的系统要求。ABP做的仅仅是在应用程序启动时加载模块。您在这些模块中执行什么操作由您决定。 + +但是,我们可以为一些常见情况提供一些建议。 + +### 库依赖 + +对于包/dll依赖,您可以将相关的dll复制到插件目录下。ABP会自动将所有程序集加载到该目录下,并且您的插件将按预期工作。 + +> 请🌘见[Microsoft文档](https://docs.microsoft.com/en-us/dotnet/core/tutorials/creating-app-with-plugin-support#plugin-with-library-dependencies)。 + +### 数据库模式 + +如果您的模块使用关系型数据库和[Entity Framework Core](Entity-Framework-Core.md), 那么它需要在数据表中提供其表。有多种不同的方法可确保在应用程序使用插件时创建表。一些例子; + +1. 插件可以检查数据库表是否存在,并在应用程序启动时创建表,或者如果插件已更新且需要进行某些架构更改时,则会迁移它们。您可以使用EF Core的迁移API来做到这一点。 +2. 您可以改进`DbMigrator`应用程序,用于查找插件的迁移并执行它们。 + +可能还有其他解决方案。例如,如果您的数据库管理员不允许您在应用程序代码中更改数据库模式,则可能需要手动将SQL文件发送给数据库管理员,以将其应用于数据库。 \ No newline at end of file From 9f49b111cc4e56f38785b75d983046516af38304 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 8 Feb 2021 09:45:42 +0800 Subject: [PATCH 18/23] Update KafkaMessageConsumer --- .../src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs | 1 + 1 file changed, 1 insertion(+) 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 2ff70dd8d5..3b8f022012 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Concurrent; +using System.Linq; using System.Threading.Tasks; using Confluent.Kafka; using Confluent.Kafka.Admin; From 857781c0946dcef6088c2e7e1162a801c8cf4052 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 8 Feb 2021 09:53:35 +0800 Subject: [PATCH 19/23] Update PlugIn-Modules.md --- docs/zh-Hans/PlugIn-Modules.md | 62 +++++++++++++++++----------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/docs/zh-Hans/PlugIn-Modules.md b/docs/zh-Hans/PlugIn-Modules.md index 3380e7372d..10f156b659 100644 --- a/docs/zh-Hans/PlugIn-Modules.md +++ b/docs/zh-Hans/PlugIn-Modules.md @@ -1,10 +1,10 @@ # 模块化插件 -可以将[模块](Module-Development-Basics.md)加载为插件。这意味着您可能不需要在解决方案中引用模块的程序集,就可以像其他模块一样在启动应用时加载该模块。 +可以将[模块](Module-Development-Basics.md)加载为插件.这意味着你可能不需要在解决方案中引用模块的程序集,就可以像其它模块一样在启动应用时加载该模块. ## 基本用法 -`IServiceCollection.AddApplication()` 扩展方法可以获取配置插件源的选项。 +`IServiceCollection.AddApplication()` 扩展方法可以获取配置插件源的选项. **例如: 从文件夹加载插件** @@ -34,9 +34,9 @@ namespace MyPlugInDemo.Web ```` * 这是典型的ASP.NET Core应用程序的`Startup`类. -* `PlugInSources.AddFolder`从指定的目录中加载程序集(通常为dll)。 +* `PlugInSources.AddFolder`从指定的目录中加载程序集(通常为dll). -就这样。ABP将在这个目录中发现这些模块,像其他普通模版一样配置和初始化他们。 +就这样.ABP将在这个目录中发现这些模块,像其它常规一样配置和初始化它们. ### 插件源 @@ -46,14 +46,14 @@ namespace MyPlugInDemo.Web options.PlugInSources.Add(new FolderPlugInSource(@"D:\Temp\MyPlugIns")); ```` -> `AddFolder()`方法仅在给定目录下查找程序集文件,而不在子目录中查找。您可以传递一个`SearchOption.AllDirectories`参数作为第二个参数,来递归地查找它的子目录。 +> `AddFolder()`方法仅在给定目录下查找程序集文件,而不在子目录中查找.你可以传递一个`SearchOption.AllDirectories`参数作为第二个参数,来递归地查找它的子目录. 这里有两个内置插件源的示例: -* `PlugInSources.AddFiles()`方法获取程序集(通常是dll)文件列表。这是使用`FilePlugInSource`类的快捷方式。 -* `PlugInSources.AddTypes()`方法获取模块类类型的列表。如果实用化此方法,则需要自己加载模块的程序集,但是在需要时它提供了灵活性。这是使用`TypePlugInSource`类的快捷方式。 +* `PlugInSources.AddFiles()`方法获取程序集(通常是dll)文件列表.这是使用`FilePlugInSource`类的快捷方式. +* `PlugInSources.AddTypes()`方法获取模块类类型的列表.如果实用化此方法,则需要自己加载模块的程序集,但是在需要时它提供了灵活性.这是使用`TypePlugInSource`类的快捷方式. -如果需要,您可以创建自己的`IPlugInSource`的接口实现,并像其他方法一样添加到`options.PlugInSources`中。 +如果需要,你可以创建自己的`IPlugInSource`的接口实现,并像其它方法一样添加到`options.PlugInSources`中. ## 例如:创建一个简单的插件 @@ -61,13 +61,13 @@ options.PlugInSources.Add(new FolderPlugInSource(@"D:\Temp\MyPlugIns")); ![简单插件库](images/simple-plugin-library.png) -您可以在模块中添加需要使用的ABP框架包。至少,您应该为这个项目添加包`Volo.Abp.Core`: +你可以在模块中添加需要使用的ABP框架包.至少,你应该为这个项目添加包`Volo.Abp.Core`: ```` Install-Package Volo.Abp.Core ```` -每个[模块](Module-Development-Basics.md)必须声明为一个继承自`AbpModule`的类。这里是一个简单的模块类,用于解析一个服务并在应用启动时对其初始化: +每个[模块](Module-Development-Basics.md)必须声明为一个继承自`AbpModule`的类.这里是一个简单的模块类,用于解析一个服务并在应用启动时对其初始化: ````csharp using Microsoft.Extensions.DependencyInjection; @@ -89,7 +89,7 @@ namespace MyPlugIn } ```` -`MyService`可以是注册在[依赖注入](Dependency-Injection.md)系统中的任意类,如下所示: +`MyService`可以是注册在[依赖注入](Dependency-Injection.md)系统中的任意类,如下所示: ````csharp using Microsoft.Extensions.Logging; @@ -114,19 +114,19 @@ namespace MyPlugIn } ```` -编译这个项目,打开build目录,找到`MyPlugIn.dll`: +编译这个项目,打开build目录,找到`MyPlugIn.dll`: ![简单dll插件](images/simple-plug-in-dll-file.png) 将`MyPlugIn.dll`复制到到插件目录中(此实例为`D:\Temp\MyPlugIns`). -如果您已经按照上述方式配置了主应用程序(参见“基础用法”部分),那么在应用程序启动时,您可以看到“MyService has been initialized(MyService已经初始化)的日志。 +如果你已经按照上述方式配置了主应用程序(参见“基础用法”部分),那么在应用程序启动时,你可以看到“MyService has been initialized(MyService已经初始化)的日志. ## 例如:创建一个Razor Pages插件 -创建内部带视图的插件需要更多的注意。 +创建内部带视图的插件需要更多的注意. -> 这个示例假设您已经使用应用程序启动模板和MVC / Razor Pages UI[创建了一个新的Web应用程序](https://abp.io/get-started)。 +> 这个示例假设你已经使用应用程序启动模板和MVC / Razor Pages UI[创建了一个新的Web应用程序](https://abp.io/get-started). 在解决方案中创建一个新的**类库**项目: @@ -150,11 +150,11 @@ namespace MyPlugIn ```` -* 将`Sdk`修改为`Microsoft.NET.Sdk.Web`。 +* 将`Sdk`修改为`Microsoft.NET.Sdk.Web`. * 添加了`OutputType`和`IsPackable`属性. * 添加了`Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared`NuGet包. -> 不需要[Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared) 包。您可以引用更基础的程序包,例如[Volo.Abp.AspNetCore.Mvc](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc/). 但是,如果需要构建一个UI视图/组件,建议参考[Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared)程序包,因为它是最高级的程序包,不依赖于特定[theme](UI/AspNetCore/Theming.md)。如果依赖特定主题没有问题,则可以直接引用该主题的程序包,以便能够使用插件中特定于主题的功能。 +> 不需要[Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared) 包.你可以引用更基础的程序包,例如[Volo.Abp.AspNetCore.Mvc](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc/). 但是,如果需要构建一个UI视图/组件,建议参考[Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared)程序包,因为它是最高级的程序包,不依赖于特定[theme](UI/AspNetCore/Theming.md).如果依赖特定主题没有问题,则可以直接引用该主题的程序包,以便能够使用插件中特定于主题的功能. 接下来在插件中创建模块类: @@ -188,11 +188,11 @@ namespace MyMvcUIPlugIn } ```` -* 由于我们添加了相关的NuGet包,因此取决于`AbpAspNetCoreMvcUiThemeSharedModule`。 -* 添加插件程序集到ASP.NET Core MVC的`PartManager`中。这是ASP.NET Core所必需的。否则,您插件中的控制器将无法正常工作。 -* 添加插件的视图程序集到ASP.NET Core MVC的`PartManager`中。这是ASP.NET Core所必需的。否则,您在插件中的视图将不起作用。 +* 由于我们添加了相关的NuGet包,因此取决于`AbpAspNetCoreMvcUiThemeSharedModule`. +* 添加插件程序集到ASP.NET Core MVC的`PartManager`中.这是ASP.NET Core所必需的.否则,你插件中的控制器将无法正常工作. +* 添加插件的视图程序集到ASP.NET Core MVC的`PartManager`中.这是ASP.NET Core所必需的.否则,你在插件中的视图将不起作用. -现在,您可以在`Pages`目录下添加一个razor页面,例如`MyPlugInPage.cshtml`: +现在,你可以在`Pages`目录下添加一个razor页面,例如`MyPlugInPage.cshtml`: ````html @page @@ -201,33 +201,33 @@ namespace MyMvcUIPlugIn

This page is located inside a plug-in module! :)

```` -现在,您可以构建插件项目。它将产生以下输出: +现在,你可以构建插件项目.它将产生以下输出: ![simple-razor-plug-in-dll-file](images/simple-razor-plug-in-dll-file.png) 将`MyMvcUIPlugIn.dll`和`MyMvcUIPlugIn.Views.dll`复制到到插件目录下(此示例中为`D:\Temp\MyPlugIns`). -如果您已经按照上述方式配置了主应用程序(参见“基础用法”部分),那么在应用程序启动的时候,您应该能够访问`/MyPlugInPage`URL: +如果你已经按照上述方式配置了主应用程序(参见“基础用法”部分),那么在应用程序启动的时候,你应该能够访问`/MyPlugInPage`URL: ![simple-plugin-output](images/simple-plugin-output.png) ## 讨论 -在现实世界中,您的插件可能具有一些外部依赖性。另外,您的应用程序可能被设计为支持插件。所有这些都是您自己的系统要求。ABP做的仅仅是在应用程序启动时加载模块。您在这些模块中执行什么操作由您决定。 +在现实世界中,你的插件可能具有一些外部依赖性.另外,你的应用程序可能被设计为支持插件.所有这些都是你自己的系统要求.ABP做的仅仅是在应用程序启动时加载模块.你在这些模块中执行什么操作由你决定. -但是,我们可以为一些常见情况提供一些建议。 +但是,我们可以为一些常见情况提供一些建议. ### 库依赖 -对于包/dll依赖,您可以将相关的dll复制到插件目录下。ABP会自动将所有程序集加载到该目录下,并且您的插件将按预期工作。 +对于包/dll依赖,你可以将相关的dll复制到插件目录下.ABP会自动将所有程序集加载到该目录下,并且你的插件将按预期工作. -> 请🌘见[Microsoft文档](https://docs.microsoft.com/en-us/dotnet/core/tutorials/creating-app-with-plugin-support#plugin-with-library-dependencies)。 +> 请参见[Microsoft文档](https://docs.microsoft.com/zh-cn/dotnet/core/tutorials/creating-app-with-plugin-support#plugin-with-library-dependencies). ### 数据库模式 -如果您的模块使用关系型数据库和[Entity Framework Core](Entity-Framework-Core.md), 那么它需要在数据表中提供其表。有多种不同的方法可确保在应用程序使用插件时创建表。一些例子; +如果你的模块使用关系型数据库和[Entity Framework Core](Entity-Framework-Core.md), 那么它需要在数据库中提供表.有多种不同的方法可确保在应用程序使用插件时创建表.一些例子; -1. 插件可以检查数据库表是否存在,并在应用程序启动时创建表,或者如果插件已更新且需要进行某些架构更改时,则会迁移它们。您可以使用EF Core的迁移API来做到这一点。 -2. 您可以改进`DbMigrator`应用程序,用于查找插件的迁移并执行它们。 +1. 插件可以检查数据库表是否存在,并在应用程序启动时创建表,或者如果插件已更新且需要进行某些架构更改时,则会迁移它们.你可以使用EF Core的迁移API来做到这一点. +2. 你可以改进`DbMigrator`应用程序,用于查找插件的迁移并执行它们. -可能还有其他解决方案。例如,如果您的数据库管理员不允许您在应用程序代码中更改数据库模式,则可能需要手动将SQL文件发送给数据库管理员,以将其应用于数据库。 \ No newline at end of file +可能还有其它解决方案.例如,如果你的数据库管理员不允许你在应用程序代码中更改数据库模式,则可能需要手动将SQL文件发送给数据库管理员,以将其应用于数据库. From 223e9eddf2054c1472d734f8f7642c1da315673f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 8 Feb 2021 09:54:55 +0800 Subject: [PATCH 20/23] Update docs-nav.json --- docs/zh-Hans/docs-nav.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json index 5d231099c9..4f47dd2760 100644 --- a/docs/zh-Hans/docs-nav.json +++ b/docs/zh-Hans/docs-nav.json @@ -313,7 +313,8 @@ "path": "Module-Development-Basics.md" }, { - "text": "模块插件" + "text": "模块插件", + "path": "PlugIn-Modules.md" }, { "text": "自定义应用模块", From 697f3e1eb6a3a1a4829fa24c0e2f2bf7077982b0 Mon Sep 17 00:00:00 2001 From: chxmind Date: Mon, 8 Feb 2021 13:29:33 +0800 Subject: [PATCH 21/23] add zh-Hans doc pictures for PlugIn-Modules.md --- docs/zh-Hans/images/simple-plug-in-dll-file.png | Bin 0 -> 35011 bytes docs/zh-Hans/images/simple-plugin-library.png | Bin 0 -> 17231 bytes docs/zh-Hans/images/simple-plugin-output.png | Bin 0 -> 39597 bytes .../images/simple-razor-plug-in-dll-file.png | Bin 0 -> 52768 bytes docs/zh-Hans/images/simple-razor-plugin.png | Bin 0 -> 25725 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/zh-Hans/images/simple-plug-in-dll-file.png create mode 100644 docs/zh-Hans/images/simple-plugin-library.png create mode 100644 docs/zh-Hans/images/simple-plugin-output.png create mode 100644 docs/zh-Hans/images/simple-razor-plug-in-dll-file.png create mode 100644 docs/zh-Hans/images/simple-razor-plugin.png diff --git a/docs/zh-Hans/images/simple-plug-in-dll-file.png b/docs/zh-Hans/images/simple-plug-in-dll-file.png new file mode 100644 index 0000000000000000000000000000000000000000..3155708d68e59ecfc8d2c954f9cb2c5360182766 GIT binary patch literal 35011 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 literal 0 HcmV?d00001 diff --git a/docs/zh-Hans/images/simple-plugin-library.png b/docs/zh-Hans/images/simple-plugin-library.png new file mode 100644 index 0000000000000000000000000000000000000000..9fefd57dda8c1cbfa2b597ef441e6ab966623a5a GIT binary patch literal 17231 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

wlL(BEY(XaGsJ{4cZ?-2dPR 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 q>M@NXCk|ttVwo315l_y(N9RgyyQ{~`1b Date: Mon, 8 Feb 2021 13:33:09 +0800 Subject: [PATCH 22/23] Update PlugIn-Modules.md --- docs/zh-Hans/PlugIn-Modules.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/zh-Hans/PlugIn-Modules.md b/docs/zh-Hans/PlugIn-Modules.md index 10f156b659..48a507ac7d 100644 --- a/docs/zh-Hans/PlugIn-Modules.md +++ b/docs/zh-Hans/PlugIn-Modules.md @@ -6,7 +6,7 @@ `IServiceCollection.AddApplication()` 扩展方法可以获取配置插件源的选项. -**例如: 从文件夹加载插件** +**示例: 从文件夹加载插件** ````csharp using Microsoft.AspNetCore.Builder; @@ -55,7 +55,7 @@ options.PlugInSources.Add(new FolderPlugInSource(@"D:\Temp\MyPlugIns")); 如果需要,你可以创建自己的`IPlugInSource`的接口实现,并像其它方法一样添加到`options.PlugInSources`中. -## 例如:创建一个简单的插件 +## 示例:创建一个简单的插件 在一个解决方案中创建一个简单的**类库项目** @@ -122,7 +122,7 @@ namespace MyPlugIn 如果你已经按照上述方式配置了主应用程序(参见“基础用法”部分),那么在应用程序启动时,你可以看到“MyService has been initialized(MyService已经初始化)的日志. -## 例如:创建一个Razor Pages插件 +## 示例:创建一个Razor Pages插件 创建内部带视图的插件需要更多的注意. From 31ba40c2549eb8b2aba9ca65b22e39b5db2a7801 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 8 Feb 2021 14:14:12 +0300 Subject: [PATCH 23/23] small design changes. --- .../Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml | 2 +- .../CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml index 7a3660dbf5..998bfa2881 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml @@ -20,7 +20,7 @@ - + @blog.ShortDescription diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml index ebb009448d..a6cef52512 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml @@ -10,11 +10,11 @@ @Model.Title - @@@Model.Creator?.UserName + @Model.Creator?.UserName - + @**@ @await Component.InvokeAsync(typeof(ContentViewComponent), new { entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType,

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 literal 0 HcmV?d00001 diff --git a/docs/zh-Hans/images/simple-plugin-output.png b/docs/zh-Hans/images/simple-plugin-output.png new file mode 100644 index 0000000000000000000000000000000000000000..71f6a78c0ea8661a590a4ae37c1c0423eb4f3832 GIT binary patch literal 39597 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 *mZx;M5=kDQtkoFTcl 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 jKZZ(#nrlKgHahlE_2*yW6YAks#e8`k}8rL7K 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 literal 0 HcmV?d00001 diff --git a/docs/zh-Hans/images/simple-razor-plugin.png b/docs/zh-Hans/images/simple-razor-plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..92e0e00d2962f7336b23e7f0c53bb732bd091633 GIT binary patch literal 25725 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