Browse Source

Merge branch 'dev' into cotur/component-base

pull/6008/head
Ahmet 6 years ago
parent
commit
db5cfd634c
  1. 6
      docs/en/Application-Services.md
  2. 4
      docs/en/Authorization.md
  3. 2
      docs/en/Background-Workers.md
  4. 8
      docs/en/Blog-Posts/2020-05-08 v2_7_Release/Post.md
  5. 8
      docs/en/Community-Articles/2020-04-19-Customize-the-SignIn-Manager/POST.md
  6. 14
      docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md
  7. 42
      docs/en/Customizing-Application-Modules-Overriding-Services.md
  8. 14
      docs/en/Entity-Framework-Core.md
  9. 4
      docs/en/Exception-Handling.md
  10. 16
      docs/en/MongoDB.md
  11. 28
      docs/en/Tutorials/Part-10.md
  12. 2
      docs/en/Tutorials/Part-5.md
  13. 2
      docs/en/Tutorials/Part-9.md
  14. 2
      docs/en/UI/Angular/Component-Replacement.md
  15. 12
      docs/en/UI/AspNetCore/Customization-User-Interface.md
  16. 4
      docs/zh-Hans/Application-Services.md
  17. 2
      docs/zh-Hans/Authorization.md
  18. 2
      docs/zh-Hans/Background-Workers.md
  19. 2
      docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/Post.md
  20. 36
      docs/zh-Hans/Customizing-Application-Modules-Overriding-Services.md
  21. 6
      docs/zh-Hans/Entity-Framework-Core.md
  22. 2
      docs/zh-Hans/How-To/Customize-SignIn-Manager.md
  23. 10
      docs/zh-Hans/MongoDB.md
  24. 4
      docs/zh-Hans/UI/Angular/Component-Replacement.md
  25. 6
      docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md
  26. 2
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor
  27. 2
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs
  28. 2
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs
  29. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs
  30. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs
  31. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs
  32. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs
  33. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs
  34. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpCollapseBodyTagHelperService.cs
  35. 8
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs
  36. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs
  37. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs
  38. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs
  39. 110
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs
  40. 10
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs
  41. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs
  42. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs
  43. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs
  44. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelperService.cs
  45. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperService.cs
  46. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs
  47. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs
  48. 18
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/TagHelpers/AbpComponentDemoSectionTagHelper.cs
  49. 2
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/SecurityLog/AspNetCoreSecurityLogManager.cs
  50. 8
      framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs
  51. 2
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs
  52. 2
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs
  53. 2
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/PermissionRequirementHandler.cs
  54. 4
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs
  55. 4
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs
  56. 2
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs
  57. 2
      framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs
  58. 2
      framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs
  59. 6
      framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs
  60. 8
      framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs
  61. 2
      framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
  62. 2
      framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs
  63. 10
      framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs
  64. 8
      framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs
  65. 4
      framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs
  66. 22
      framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs
  67. 4
      framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapter.cs
  68. 4
      framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapterWithReturnValue.cs
  69. 4
      framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs
  70. 4
      framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs
  71. 2
      framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ReadOnlyAppService.cs
  72. 2
      framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs
  73. 2
      framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs
  74. 2
      framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs
  75. 16
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
  76. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
  77. 2
      framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs
  78. 2
      framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs
  79. 2
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs
  80. 4
      framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs
  81. 6
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs
  82. 2
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs
  83. 6
      framework/src/Volo.Abp.Features/Volo/Abp/Features/TenantFeatureValueProvider.cs
  84. 2
      framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs
  85. 2
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs
  86. 2
      framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs
  87. 8
      framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs
  88. 16
      framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs
  89. 6
      framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs
  90. 4
      framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs
  91. 2
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs
  92. 2
      framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs
  93. 4
      framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/AbpBlobStoringMinioTestModule.cs
  94. 4
      framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleAsyncInterceptor.cs
  95. 4
      framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleResultCacheTestInterceptor.cs
  96. 2
      framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs
  97. 4
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs
  98. 2
      modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor.cs
  99. 6
      modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs
  100. 2
      modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLogoutModel.cs

6
docs/en/Application-Services.md

@ -342,12 +342,12 @@ public class DistrictAppService
{ {
} }
protected override async Task DeleteByIdAsync(DistrictKey id) protected async override Task DeleteByIdAsync(DistrictKey id)
{ {
await Repository.DeleteAsync(d => d.CityId == id.CityId && d.Name == id.Name); await Repository.DeleteAsync(d => d.CityId == id.CityId && d.Name == id.Name);
} }
protected override async Task<District> GetEntityByIdAsync(DistrictKey id) protected async override Task<District> GetEntityByIdAsync(DistrictKey id)
{ {
return await AsyncQueryableExecuter.FirstOrDefaultAsync( return await AsyncQueryableExecuter.FirstOrDefaultAsync(
Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name) Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name)
@ -400,7 +400,7 @@ public class MyPeopleAppService : CrudAppService<Person, PersonDto, Guid>
{ {
} }
protected override async Task CheckDeletePolicyAsync() protected async override Task CheckDeletePolicyAsync()
{ {
await AuthorizationService.CheckAsync("..."); await AuthorizationService.CheckAsync("...");
} }

4
docs/en/Authorization.md

@ -234,7 +234,7 @@ context
When you write this code inside your permission definition provider, it finds the "role deletion" permission of the [Identity Module](Modules/Identity.md) and disabled the permission, so no one can delete a role on the application. When you write this code inside your permission definition provider, it finds the "role deletion" permission of the [Identity Module](Modules/Identity.md) and disabled the permission, so no one can delete a role on the application.
> Tip: It is better to check the value returned by the `GetPermissionOrNull` method since it may return null if the given permission was not defined. > Tip: It is better to check the value returned by the `GetPermissionOrNull` method since it may return null if the given permission was not defined.
## IAuthorizationService ## IAuthorizationService
@ -354,7 +354,7 @@ public class SystemAdminPermissionValueProvider : PermissionValueProvider
public override string Name => "SystemAdmin"; public override string Name => "SystemAdmin";
public override async Task<PermissionGrantResult> public async override Task<PermissionGrantResult>
CheckAsync(PermissionValueCheckContext context) CheckAsync(PermissionValueCheckContext context)
{ {
if (context.Principal?.FindFirst("User_Type")?.Value == "SystemAdmin") if (context.Principal?.FindFirst("User_Type")?.Value == "SystemAdmin")

2
docs/en/Background-Workers.md

@ -54,7 +54,7 @@ public class PassiveUserCheckerWorker : AsyncPeriodicBackgroundWorkerBase
Timer.Period = 600000; //10 minutes Timer.Period = 600000; //10 minutes
} }
protected override async Task DoWorkAsync( protected async override Task DoWorkAsync(
PeriodicBackgroundWorkerContext workerContext) PeriodicBackgroundWorkerContext workerContext)
{ {
Logger.LogInformation("Starting: Setting status of inactive users..."); Logger.LogInformation("Starting: Setting status of inactive users...");

8
docs/en/Blog-Posts/2020-05-08 v2_7_Release/Post.md

@ -16,7 +16,7 @@ ABP.IO Platform is rapidly growing and we are getting more and more contribution
### Object Extending System ### Object Extending System
In the last few releases, we've mostly focused on providing ways to extend existing modules when you use them as NuGet/NPM Packages. In the last few releases, we've mostly focused on providing ways to extend existing modules when you use them as NuGet/NPM Packages.
The Object Extending System allows module developers to create extensible modules and allows application developers to customize and extend a module easily. The Object Extending System allows module developers to create extensible modules and allows application developers to customize and extend a module easily.
@ -43,7 +43,7 @@ ObjectExtensionManager.Instance
options.Attributes.Add(new RequiredAttribute()); options.Attributes.Add(new RequiredAttribute());
options.Attributes.Add( options.Attributes.Add(
new StringLengthAttribute(32) { new StringLengthAttribute(32) {
MinimumLength = 6 MinimumLength = 6
} }
); );
}); });
@ -121,7 +121,7 @@ Just create a class derived from the `ExceptionSubscriber` class in your applica
````csharp ````csharp
public class MyExceptionSubscriber : ExceptionSubscriber public class MyExceptionSubscriber : ExceptionSubscriber
{ {
public override async Task HandleAsync(ExceptionNotificationContext context) public async override Task HandleAsync(ExceptionNotificationContext context)
{ {
//TODO... //TODO...
} }
@ -244,4 +244,4 @@ We ([Volosoft](https://volosoft.com/) - the core team behind the ABP.IO platform
[ABP Framework](https://abp.io/) provides all the infrastructure and application independent framework features to make you more productive, focus on your own business code and implement software development best practices. It provides you a well defined and comfortable development experience without repeating yourself. [ABP Framework](https://abp.io/) provides all the infrastructure and application independent framework features to make you more productive, focus on your own business code and implement software development best practices. It provides you a well defined and comfortable development experience without repeating yourself.
[ABP Commercial](https://commercial.abp.io/) provides pre-built functionalities, themes and tooling to save your time if your requirements involve these functionalities in addition to the premium support for the framework and the pre-built modules. [ABP Commercial](https://commercial.abp.io/) provides pre-built functionalities, themes and tooling to save your time if your requirements involve these functionalities in addition to the premium support for the framework and the pre-built modules.

8
docs/en/Community-Articles/2020-04-19-Customize-the-SignIn-Manager/POST.md

@ -1,6 +1,6 @@
# How to Customize the SignIn Manager for ABP Applications # How to Customize the SignIn Manager for ABP Applications
After creating a new application using the [application startup template](https://docs.abp.io/en/abp/latest/Startup-Templates/Application), you may want extend or change the default behavior of the SignIn Manager for your authentication and registration flow needs. ABP [Account Module](https://docs.abp.io/en/abp/latest/Modules/Account) uses the [Identity Management Module](https://docs.abp.io/en/abp/latest/Modules/Identity) for SignIn Manager and the [Identity Management Module](https://docs.abp.io/en/abp/latest/Modules/Identity) uses default [Microsoft Identity SignIn Manager](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs) ([see here](https://github.com/abpframework/abp/blob/be32a55449e270d2d456df3dabdc91f3ffdd4fa9/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs#L17)). After creating a new application using the [application startup template](https://docs.abp.io/en/abp/latest/Startup-Templates/Application), you may want extend or change the default behavior of the SignIn Manager for your authentication and registration flow needs. ABP [Account Module](https://docs.abp.io/en/abp/latest/Modules/Account) uses the [Identity Management Module](https://docs.abp.io/en/abp/latest/Modules/Identity) for SignIn Manager and the [Identity Management Module](https://docs.abp.io/en/abp/latest/Modules/Identity) uses default [Microsoft Identity SignIn Manager](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs) ([see here](https://github.com/abpframework/abp/blob/be32a55449e270d2d456df3dabdc91f3ffdd4fa9/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs#L17)).
To write your Custom SignIn Manager, you need to extend [Microsoft Identity SignIn Manager](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs) class and register it to the DI container. To write your Custom SignIn Manager, you need to extend [Microsoft Identity SignIn Manager](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs) class and register it to the DI container.
@ -27,7 +27,7 @@ public class CustomSignInManager : Microsoft.AspNetCore.Identity.SignInManager<V
} }
```` ````
> It is important to use **Volo.Abp.Identity.IdentityUser** type for SignInManager to inherit, not the AppUser of your application. > It is important to use **Volo.Abp.Identity.IdentityUser** type for SignInManager to inherit, not the AppUser of your application.
Afterwards you can override any of the SignIn Manager methods you need and add new methods and properties needed for your authentication or registration flow. Afterwards you can override any of the SignIn Manager methods you need and add new methods and properties needed for your authentication or registration flow.
@ -38,7 +38,7 @@ In this case we'll be overriding the `GetExternalLoginInfoAsync` method which is
A good way to override a method is copying its [source code](https://github.com/dotnet/aspnetcore/blob/c56aa320c32ee5429d60647782c91d53ac765865/src/Identity/Core/src/SignInManager.cs#L638-L674). In this case, we will be using a minorly modified version of the source code which explicitly shows the namespaces of the methods and properties to help better understanding of the concept. A good way to override a method is copying its [source code](https://github.com/dotnet/aspnetcore/blob/c56aa320c32ee5429d60647782c91d53ac765865/src/Identity/Core/src/SignInManager.cs#L638-L674). In this case, we will be using a minorly modified version of the source code which explicitly shows the namespaces of the methods and properties to help better understanding of the concept.
````csharp ````csharp
public override async Task<Microsoft.AspNetCore.Identity.ExternalLoginInfo> GetExternalLoginInfoAsync(string expectedXsrf = null) public async override Task<Microsoft.AspNetCore.Identity.ExternalLoginInfo> GetExternalLoginInfoAsync(string expectedXsrf = null)
{ {
var auth = await Context.AuthenticateAsync(Microsoft.AspNetCore.Identity.IdentityConstants.ExternalScheme); var auth = await Context.AuthenticateAsync(Microsoft.AspNetCore.Identity.IdentityConstants.ExternalScheme);
var items = auth?.Properties?.Items; var items = auth?.Properties?.Items;
@ -93,4 +93,4 @@ PreConfigure<IdentityBuilder>(identityBuilder =>
## The Source Code ## The Source Code
You can find the source code of the completed example [here](https://github.com/abpframework/abp-samples/tree/master/Authentication-Customization). You can find the source code of the completed example [here](https://github.com/abpframework/abp-samples/tree/master/Authentication-Customization).

14
docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md

@ -33,7 +33,7 @@ namespace PasswordlessAuthentication.Web
} }
//We need to override this method as well. //We need to override this method as well.
public override async Task<string> GetUserModifierAsync(string purpose, UserManager<TUser> manager, TUser user) public async override Task<string> GetUserModifierAsync(string purpose, UserManager<TUser> manager, TUser user)
{ {
var userId = await manager.GetUserIdAsync(user); var userId = await manager.GetUserIdAsync(user);
@ -105,7 +105,7 @@ namespace PasswordlessAuthentication.Web.Pages
UserManager = userManager; UserManager = userManager;
_userRepository = userRepository; _userRepository = userRepository;
} }
public ActionResult OnGet() public ActionResult OnGet()
{ {
if (!CurrentUser.IsAuthenticated) if (!CurrentUser.IsAuthenticated)
@ -115,15 +115,15 @@ namespace PasswordlessAuthentication.Web.Pages
return Page(); return Page();
} }
//added for passwordless authentication //added for passwordless authentication
public async Task<IActionResult> OnPostGeneratePasswordlessTokenAsync() public async Task<IActionResult> OnPostGeneratePasswordlessTokenAsync()
{ {
var adminUser = await _userRepository.FindByNormalizedUserNameAsync("admin"); var adminUser = await _userRepository.FindByNormalizedUserNameAsync("admin");
var token = await UserManager.GenerateUserTokenAsync(adminUser, "PasswordlessLoginProvider", var token = await UserManager.GenerateUserTokenAsync(adminUser, "PasswordlessLoginProvider",
"passwordless-auth"); "passwordless-auth");
PasswordlessLoginUrl = Url.Action("Login", "Passwordless", PasswordlessLoginUrl = Url.Action("Login", "Passwordless",
new {token = token, userId = adminUser.Id.ToString()}, Request.Scheme); new {token = token, userId = adminUser.Id.ToString()}, Request.Scheme);
@ -238,7 +238,7 @@ namespace PasswordlessAuthentication.Web.Controllers
return Redirect("/"); return Redirect("/");
} }
private static IEnumerable<Claim> CreateClaims(IUser user, IEnumerable<string> roles) private static IEnumerable<Claim> CreateClaims(IUser user, IEnumerable<string> roles)
{ {
var claims = new List<Claim> var claims = new List<Claim>
@ -272,4 +272,4 @@ That's all! We created a passwordless login with 7 steps.
## Source Code ## Source Code
The completed sample is available on [GitHub repository](https://github.com/abpframework/abp-samples/tree/master/PasswordlessAuthentication). The completed sample is available on [GitHub repository](https://github.com/abpframework/abp-samples/tree/master/PasswordlessAuthentication).

42
docs/en/Customizing-Application-Modules-Overriding-Services.md

@ -29,7 +29,7 @@ public class TestAppService : IIdentityUserAppService, ITransientDependency
} }
```` ````
The dependency injection system allows to register multiple services for the same interface. The last registered one is used when the interface is injected. It is a good practice to explicitly replace the service. The dependency injection system allows to register multiple services for the same interface. The last registered one is used when the interface is injected. It is a good practice to explicitly replace the service.
Example: Example:
@ -76,7 +76,7 @@ public class MyIdentityUserAppService : IdentityUserAppService
{ {
} }
public override async Task<IdentityUserDto> CreateAsync(IdentityUserCreateDto input) public async override Task<IdentityUserDto> CreateAsync(IdentityUserCreateDto input)
{ {
if (input.PhoneNumber.IsNullOrWhiteSpace()) if (input.PhoneNumber.IsNullOrWhiteSpace())
{ {
@ -109,33 +109,33 @@ public class MyIdentityUserManager : IdentityUserManager
{ {
public MyIdentityUserManager( public MyIdentityUserManager(
IdentityUserStore store, IdentityUserStore store,
IIdentityRoleRepository roleRepository, IIdentityRoleRepository roleRepository,
IIdentityUserRepository userRepository, IIdentityUserRepository userRepository,
IOptions<IdentityOptions> optionsAccessor, IOptions<IdentityOptions> optionsAccessor,
IPasswordHasher<IdentityUser> passwordHasher, IPasswordHasher<IdentityUser> passwordHasher,
IEnumerable<IUserValidator<IdentityUser>> userValidators, IEnumerable<IUserValidator<IdentityUser>> userValidators,
IEnumerable<IPasswordValidator<IdentityUser>> passwordValidators, IEnumerable<IPasswordValidator<IdentityUser>> passwordValidators,
ILookupNormalizer keyNormalizer, ILookupNormalizer keyNormalizer,
IdentityErrorDescriber errors, IdentityErrorDescriber errors,
IServiceProvider services, IServiceProvider services,
ILogger<IdentityUserManager> logger, ILogger<IdentityUserManager> logger,
ICancellationTokenProvider cancellationTokenProvider) : ICancellationTokenProvider cancellationTokenProvider) :
base(store, base(store,
roleRepository, roleRepository,
userRepository, userRepository,
optionsAccessor, optionsAccessor,
passwordHasher, passwordHasher,
userValidators, userValidators,
passwordValidators, passwordValidators,
keyNormalizer, keyNormalizer,
errors, errors,
services, services,
logger, logger,
cancellationTokenProvider) cancellationTokenProvider)
{ {
} }
public override async Task<IdentityResult> CreateAsync(IdentityUser user) public async override Task<IdentityResult> CreateAsync(IdentityUser user)
{ {
if (user.PhoneNumber.IsNullOrWhiteSpace()) if (user.PhoneNumber.IsNullOrWhiteSpace())
{ {
@ -182,7 +182,7 @@ namespace MyProject.Controllers
} }
public override async Task SendPasswordResetCodeAsync( public async override Task SendPasswordResetCodeAsync(
SendPasswordResetCodeDto input) SendPasswordResetCodeDto input)
{ {
Logger.LogInformation("Your custom logic..."); Logger.LogInformation("Your custom logic...");
@ -214,7 +214,7 @@ Assuming that you've already added a `SocialSecurityNumber` as described in the
You can use the [object extension system](Object-Extensions.md) to add the property to the `IdentityUserDto`. Write this code inside the `YourProjectNameDtoExtensions` class comes with the application startup template: You can use the [object extension system](Object-Extensions.md) to add the property to the `IdentityUserDto`. Write this code inside the `YourProjectNameDtoExtensions` class comes with the application startup template:
````csharp ````csharp
ObjectExtensionManager.Instance ObjectExtensionManager.Instance
.AddOrUpdateProperty<IdentityUserDto, string>( .AddOrUpdateProperty<IdentityUserDto, string>(
"SocialSecurityNumber" "SocialSecurityNumber"
); );
@ -286,8 +286,8 @@ ObjectExtensionManager.Instance
.AddOrUpdateProperty<string>( .AddOrUpdateProperty<string>(
new[] new[]
{ {
typeof(IdentityUserDto), typeof(IdentityUserDto),
typeof(IdentityUserCreateDto), typeof(IdentityUserCreateDto),
typeof(IdentityUserUpdateDto) typeof(IdentityUserUpdateDto)
}, },
"SocialSecurityNumber" "SocialSecurityNumber"

14
docs/en/Entity-Framework-Core.md

@ -92,7 +92,7 @@ protected override void OnModelCreating(ModelBuilder builder)
b.ToTable("Books"); b.ToTable("Books");
//Configure the base properties //Configure the base properties
b.ConfigureByConvention(); b.ConfigureByConvention();
//Configure other properties (if you are using the fluent API) //Configure other properties (if you are using the fluent API)
b.Property(x => x.Name).IsRequired().HasMaxLength(128); b.Property(x => x.Name).IsRequired().HasMaxLength(128);
@ -113,7 +113,7 @@ If you have multiple databases in your application, you can configure the connec
[ConnectionStringName("MySecondConnString")] [ConnectionStringName("MySecondConnString")]
public class MyDbContext : AbpDbContext<MyDbContext> public class MyDbContext : AbpDbContext<MyDbContext>
{ {
} }
``` ```
@ -254,7 +254,7 @@ If you want to replace default repository implementation with your custom reposi
context.Services.AddAbpDbContext<BookStoreDbContext>(options => context.Services.AddAbpDbContext<BookStoreDbContext>(options =>
{ {
options.AddDefaultRepositories(); options.AddDefaultRepositories();
//Replaces IRepository<Book, Guid> //Replaces IRepository<Book, Guid>
options.AddRepository<Book, BookRepository>(); options.AddRepository<Book, BookRepository>();
}); });
@ -263,7 +263,7 @@ context.Services.AddAbpDbContext<BookStoreDbContext>(options =>
This is especially important when you want to **override a base repository method** to customize it. For instance, you may want to override `DeleteAsync` method to delete a specific entity in a more efficient way: This is especially important when you want to **override a base repository method** to customize it. For instance, you may want to override `DeleteAsync` method to delete a specific entity in a more efficient way:
````csharp ````csharp
public override async Task DeleteAsync( public async override Task DeleteAsync(
Guid id, Guid id,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -365,7 +365,7 @@ public class MyRepositoryBase<TEntity>
: EfCoreRepository<BookStoreDbContext, TEntity> : EfCoreRepository<BookStoreDbContext, TEntity>
where TEntity : class, IEntity where TEntity : class, IEntity
{ {
public MyRepositoryBase(IDbContextProvider<BookStoreDbContext> dbContextProvider) public MyRepositoryBase(IDbContextProvider<BookStoreDbContext> dbContextProvider)
: base(dbContextProvider) : base(dbContextProvider)
{ {
} }
@ -395,7 +395,7 @@ context.Services.AddAbpDbContext<BookStoreDbContext>(options =>
typeof(MyRepositoryBase<,>), typeof(MyRepositoryBase<,>),
typeof(MyRepositoryBase<>) typeof(MyRepositoryBase<>)
); );
//... //...
}); });
``` ```
@ -448,4 +448,4 @@ In this example, `OtherDbContext` implements `IBookStoreDbContext`. This feature
## See Also ## See Also
* [Entities](Entities.md) * [Entities](Entities.md)

4
docs/en/Exception-Handling.md

@ -85,7 +85,7 @@ Error **details** in an optional field of the JSON error message. Thrown `Except
### Logging ### Logging
Caught exceptions are automatically logged. Caught exceptions are automatically logged.
#### Log Level #### Log Level
@ -300,7 +300,7 @@ In this case, create a class derived from the `ExceptionSubscriber` class in you
````csharp ````csharp
public class MyExceptionSubscriber : ExceptionSubscriber public class MyExceptionSubscriber : ExceptionSubscriber
{ {
public override async Task HandleAsync(ExceptionNotificationContext context) public async override Task HandleAsync(ExceptionNotificationContext context)
{ {
//TODO... //TODO...
} }

16
docs/en/MongoDB.md

@ -40,7 +40,7 @@ public class MyDbContext : AbpMongoDbContext
protected override void CreateModel(IMongoModelBuilder modelBuilder) protected override void CreateModel(IMongoModelBuilder modelBuilder)
{ {
base.CreateModel(modelBuilder); base.CreateModel(modelBuilder);
//Customize the configuration for your collections. //Customize the configuration for your collections.
} }
} }
@ -62,7 +62,7 @@ So, most of times you don't need to explicitly configure registration for your e
protected override void CreateModel(IMongoModelBuilder modelBuilder) protected override void CreateModel(IMongoModelBuilder modelBuilder)
{ {
base.CreateModel(modelBuilder); base.CreateModel(modelBuilder);
modelBuilder.Entity<Question>(b => modelBuilder.Entity<Question>(b =>
{ {
b.CollectionName = "MyQuestions"; //Sets the collection name b.CollectionName = "MyQuestions"; //Sets the collection name
@ -88,7 +88,7 @@ If you have multiple databases in your application, you can configure the connec
[ConnectionStringName("MySecondConnString")] [ConnectionStringName("MySecondConnString")]
public class MyDbContext : AbpMongoDbContext public class MyDbContext : AbpMongoDbContext
{ {
} }
```` ````
@ -202,7 +202,7 @@ You generally want to derive from the `IRepository` to inherit standard reposito
Example implementation of the `IBookRepository` interface: Example implementation of the `IBookRepository` interface:
```csharp ```csharp
public class BookRepository : public class BookRepository :
MongoDbRepository<BookStoreMongoDbContext, Book, Guid>, MongoDbRepository<BookStoreMongoDbContext, Book, Guid>,
IBookRepository IBookRepository
{ {
@ -242,9 +242,9 @@ context.Services.AddMongoDbContext<BookStoreMongoDbContext>(options =>
This is especially important when you want to **override a base repository method** to customize it. For instance, you may want to override `DeleteAsync` method to delete an entity in a more efficient way: This is especially important when you want to **override a base repository method** to customize it. For instance, you may want to override `DeleteAsync` method to delete an entity in a more efficient way:
```csharp ```csharp
public override async Task DeleteAsync( public async override Task DeleteAsync(
Guid id, Guid id,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
//TODO: Custom implementation of the delete method //TODO: Custom implementation of the delete method
@ -381,4 +381,4 @@ context.Services.AddMongoDbContext<OtherMongoDbContext>(options =>
}); });
``` ```
In this example, `OtherMongoDbContext` implements `IBookStoreMongoDbContext`. This feature allows you to have multiple MongoDbContext (one per module) on development, but single MongoDbContext (implements all interfaces of all MongoDbContexts) on runtime. In this example, `OtherMongoDbContext` implements `IBookStoreMongoDbContext`. This feature allows you to have multiple MongoDbContext (one per module) on development, but single MongoDbContext (implements all interfaces of all MongoDbContexts) on runtime.

28
docs/en/Tutorials/Part-10.md

@ -10,7 +10,7 @@
In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
* **{{DB_Value}}** as the ORM provider. * **{{DB_Value}}** as the ORM provider.
* **{{UI_Value}}** as the UI Framework. * **{{UI_Value}}** as the UI Framework.
This tutorial is organized as the following parts; This tutorial is organized as the following parts;
@ -78,7 +78,7 @@ builder.Entity<Book>(b =>
b.ToTable(BookStoreConsts.DbTablePrefix + "Books", BookStoreConsts.DbSchema); b.ToTable(BookStoreConsts.DbTablePrefix + "Books", BookStoreConsts.DbSchema);
b.ConfigureByConvention(); //auto configure for the base class props b.ConfigureByConvention(); //auto configure for the base class props
b.Property(x => x.Name).IsRequired().HasMaxLength(128); b.Property(x => x.Name).IsRequired().HasMaxLength(128);
// ADD THE MAPPING FOR THE RELATION // ADD THE MAPPING FOR THE RELATION
b.HasOne<Author>().WithMany().HasForeignKey(x => x.AuthorId).IsRequired(); b.HasOne<Author>().WithMany().HasForeignKey(x => x.AuthorId).IsRequired();
}); });
@ -362,7 +362,7 @@ namespace Acme.BookStore.Books
DeletePolicyName = BookStorePermissions.Books.Create; DeletePolicyName = BookStorePermissions.Books.Create;
} }
public override async Task<BookDto> GetAsync(Guid id) public async override Task<BookDto> GetAsync(Guid id)
{ {
await CheckGetPolicyAsync(); await CheckGetPolicyAsync();
@ -384,7 +384,7 @@ namespace Acme.BookStore.Books
return bookDto; return bookDto;
} }
public override async Task<PagedResultDto<BookDto>> public async override Task<PagedResultDto<BookDto>>
GetListAsync(PagedAndSortedResultRequestDto input) GetListAsync(PagedAndSortedResultRequestDto input)
{ {
await CheckGetListPolicyAsync(); await CheckGetListPolicyAsync();
@ -485,7 +485,7 @@ namespace Acme.BookStore.Books
DeletePolicyName = BookStorePermissions.Books.Create; DeletePolicyName = BookStorePermissions.Books.Create;
} }
public override async Task<BookDto> GetAsync(Guid id) public async override Task<BookDto> GetAsync(Guid id)
{ {
await CheckGetPolicyAsync(); await CheckGetPolicyAsync();
@ -498,7 +498,7 @@ namespace Acme.BookStore.Books
return bookDto; return bookDto;
} }
public override async Task<PagedResultDto<BookDto>> public async override Task<PagedResultDto<BookDto>>
GetListAsync(PagedAndSortedResultRequestDto input) GetListAsync(PagedAndSortedResultRequestDto input)
{ {
await CheckGetListPolicyAsync(); await CheckGetListPolicyAsync();
@ -524,7 +524,7 @@ namespace Acme.BookStore.Books
var authorDictionary = await GetAuthorDictionaryAsync(books); var authorDictionary = await GetAuthorDictionaryAsync(books);
//Set AuthorName for the DTOs //Set AuthorName for the DTOs
bookDtos.ForEach(bookDto => bookDto.AuthorName = bookDtos.ForEach(bookDto => bookDto.AuthorName =
authorDictionary[bookDto.AuthorId].Name); authorDictionary[bookDto.AuthorId].Name);
//Get the total count with another query (required for the paging) //Get the total count with another query (required for the paging)
@ -622,7 +622,7 @@ namespace Acme.BookStore.Books
result.Items.ShouldContain(b => b.Name == "1984" && result.Items.ShouldContain(b => b.Name == "1984" &&
b.AuthorName == "George Orwell"); b.AuthorName == "George Orwell");
} }
[Fact] [Fact]
public async Task Should_Create_A_Valid_Book() public async Task Should_Create_A_Valid_Book()
{ {
@ -645,7 +645,7 @@ namespace Acme.BookStore.Books
result.Id.ShouldNotBe(Guid.Empty); result.Id.ShouldNotBe(Guid.Empty);
result.Name.ShouldBe("New test book 42"); result.Name.ShouldBe("New test book 42");
} }
[Fact] [Fact]
public async Task Should_Not_Create_A_Book_Without_Name() public async Task Should_Not_Create_A_Book_Without_Name()
{ {
@ -1100,15 +1100,15 @@ The final `@code` block should be the following:
//ADDED A NEW FIELD //ADDED A NEW FIELD
IReadOnlyList<AuthorLookupDto> authorList = Array.Empty<AuthorLookupDto>(); IReadOnlyList<AuthorLookupDto> authorList = Array.Empty<AuthorLookupDto>();
protected override async Task OnInitializedAsync() protected async override Task OnInitializedAsync()
{ {
await base.OnInitializedAsync(); await base.OnInitializedAsync();
canCreateBook = await canCreateBook = await
AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Create); AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Create);
canEditBook = await canEditBook = await
AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Edit); AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Edit);
canDeleteBook = await canDeleteBook = await
AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Delete); AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Delete);
//GET AUTHORS //GET AUTHORS
@ -1164,4 +1164,4 @@ Add the following `Field` definition into the `ModalBody` of the *Edit* modal, a
That's all. We are reusing the `authorList` defined for the *Create* modal. That's all. We are reusing the `authorList` defined for the *Create* modal.
{{end}} {{end}}

2
docs/en/Tutorials/Part-5.md

@ -487,7 +487,7 @@ Add the following code block to the end of the `Books.razor` file:
bool canEditBook; bool canEditBook;
bool canDeleteBook; bool canDeleteBook;
protected override async Task OnInitializedAsync() protected async override Task OnInitializedAsync()
{ {
await base.OnInitializedAsync(); await base.OnInitializedAsync();

2
docs/en/Tutorials/Part-9.md

@ -1038,7 +1038,7 @@ namespace Acme.BookStore.Blazor.Pages
EditingAuthor = new UpdateAuthorDto(); EditingAuthor = new UpdateAuthorDto();
} }
protected override async Task OnInitializedAsync() protected async override Task OnInitializedAsync()
{ {
await SetPermissionsAsync(); await SetPermissionsAsync();
await GetAuthorsAsync(); await GetAuthorsAsync();

2
docs/en/UI/Angular/Component-Replacement.md

@ -45,7 +45,7 @@ Run the following command to generate a layout in `angular` folder:
yarn ng generate component my-application-layout yarn ng generate component my-application-layout
``` ```
Add the following code in your layout template (`my-layout.component.html`) where you want the page to be loaded. Add the following code in your layout template (`my-application-layout.component.html`) where you want the page to be loaded.
```html ```html
<router-outlet></router-outlet> <router-outlet></router-outlet>

12
docs/en/UI/AspNetCore/Customization-User-Interface.md

@ -28,15 +28,15 @@ namespace Acme.BookStore.Web.Pages.Identity.Users
public class MyEditModalModel : EditModalModel public class MyEditModalModel : EditModalModel
{ {
public MyEditModalModel( public MyEditModalModel(
IIdentityUserAppService identityUserAppService, IIdentityUserAppService identityUserAppService,
IIdentityRoleAppService identityRoleAppService IIdentityRoleAppService identityRoleAppService
) : base( ) : base(
identityUserAppService, identityUserAppService,
identityRoleAppService) identityRoleAppService)
{ {
} }
public override async Task<IActionResult> OnPostAsync() public async override Task<IActionResult> OnPostAsync()
{ {
//TODO: Additional logic //TODO: Additional logic
await base.OnPostAsync(); await base.OnPostAsync();
@ -84,10 +84,10 @@ Create a page model class deriving from the ` LoginModel ` (defined in the ` Vol
public class MyLoginModel : LoginModel public class MyLoginModel : LoginModel
{ {
public MyLoginModel( public MyLoginModel(
IAuthenticationSchemeProvider schemeProvider, IAuthenticationSchemeProvider schemeProvider,
IOptions<AbpAccountOptions> accountOptions IOptions<AbpAccountOptions> accountOptions
) : base( ) : base(
schemeProvider, schemeProvider,
accountOptions) accountOptions)
{ {
@ -437,7 +437,7 @@ See the layouts section below to learn more about the layout system.
Layout system allows themes to define standard, named layouts and allows any page to select a proper layout for its purpose. There are three pre-defined layouts: Layout system allows themes to define standard, named layouts and allows any page to select a proper layout for its purpose. There are three pre-defined layouts:
* "**Application**": The main (and the default) layout for an application. It typically contains header, menu (sidebar), footer, toolbar... etc. * "**Application**": The main (and the default) layout for an application. It typically contains header, menu (sidebar), footer, toolbar... etc.
* "**Account**": This layout is used by login, register and other similar pages. It is used for the pages under the `/Pages/Account` folder by default. * "**Account**": This layout is used by login, register and other similar pages. It is used for the pages under the `/Pages/Account` folder by default.
* "**Empty**": Empty and minimal layout. * "**Empty**": Empty and minimal layout.

4
docs/zh-Hans/Application-Services.md

@ -353,12 +353,12 @@ public class DistrictAppService
{ {
} }
protected override async Task DeleteByIdAsync(DistrictKey id) protected async override Task DeleteByIdAsync(DistrictKey id)
{ {
await Repository.DeleteAsync(d => d.CityId == id.CityId && d.Name == id.Name); await Repository.DeleteAsync(d => d.CityId == id.CityId && d.Name == id.Name);
} }
protected override async Task<District> GetEntityByIdAsync(DistrictKey id) protected async override Task<District> GetEntityByIdAsync(DistrictKey id)
{ {
return await AsyncQueryableExecuter.FirstOrDefaultAsync( return await AsyncQueryableExecuter.FirstOrDefaultAsync(
Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name) Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name)

2
docs/zh-Hans/Authorization.md

@ -343,7 +343,7 @@ public class SystemAdminPermissionValueProvider : PermissionValueProvider
public override string Name => "SystemAdmin"; public override string Name => "SystemAdmin";
public override async Task<PermissionGrantResult> public async override Task<PermissionGrantResult>
CheckAsync(PermissionValueCheckContext context) CheckAsync(PermissionValueCheckContext context)
{ {
if (context.Principal?.FindFirst("User_Type")?.Value == "SystemAdmin") if (context.Principal?.FindFirst("User_Type")?.Value == "SystemAdmin")

2
docs/zh-Hans/Background-Workers.md

@ -54,7 +54,7 @@ public class PassiveUserCheckerWorker : AsyncPeriodicBackgroundWorkerBase
Timer.Period = 600000; //10 minutes Timer.Period = 600000; //10 minutes
} }
protected override async Task DoWorkAsync( protected async override Task DoWorkAsync(
PeriodicBackgroundWorkerContext workerContext) PeriodicBackgroundWorkerContext workerContext)
{ {
Logger.LogInformation("Starting: Setting status of inactive users..."); Logger.LogInformation("Starting: Setting status of inactive users...");

2
docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/Post.md

@ -121,7 +121,7 @@ ABP框架的[异常处理系统](https://docs.abp.io/en/abp/latest/Exception-Han
````csharp ````csharp
public class MyExceptionSubscriber : ExceptionSubscriber public class MyExceptionSubscriber : ExceptionSubscriber
{ {
public override async Task HandleAsync(ExceptionNotificationContext context) public async override Task HandleAsync(ExceptionNotificationContext context)
{ {
//TODO... //TODO...
} }

36
docs/zh-Hans/Customizing-Application-Modules-Overriding-Services.md

@ -76,7 +76,7 @@ public class MyIdentityUserAppService : IdentityUserAppService
{ {
} }
public override async Task<IdentityUserDto> CreateAsync(IdentityUserCreateDto input) public async override Task<IdentityUserDto> CreateAsync(IdentityUserCreateDto input)
{ {
if (input.PhoneNumber.IsNullOrWhiteSpace()) if (input.PhoneNumber.IsNullOrWhiteSpace())
{ {
@ -109,33 +109,33 @@ public class MyIdentityUserManager : IdentityUserManager
{ {
public MyIdentityUserManager( public MyIdentityUserManager(
IdentityUserStore store, IdentityUserStore store,
IIdentityRoleRepository roleRepository, IIdentityRoleRepository roleRepository,
IIdentityUserRepository userRepository, IIdentityUserRepository userRepository,
IOptions<IdentityOptions> optionsAccessor, IOptions<IdentityOptions> optionsAccessor,
IPasswordHasher<IdentityUser> passwordHasher, IPasswordHasher<IdentityUser> passwordHasher,
IEnumerable<IUserValidator<IdentityUser>> userValidators, IEnumerable<IUserValidator<IdentityUser>> userValidators,
IEnumerable<IPasswordValidator<IdentityUser>> passwordValidators, IEnumerable<IPasswordValidator<IdentityUser>> passwordValidators,
ILookupNormalizer keyNormalizer, ILookupNormalizer keyNormalizer,
IdentityErrorDescriber errors, IdentityErrorDescriber errors,
IServiceProvider services, IServiceProvider services,
ILogger<IdentityUserManager> logger, ILogger<IdentityUserManager> logger,
ICancellationTokenProvider cancellationTokenProvider) : ICancellationTokenProvider cancellationTokenProvider) :
base(store, base(store,
roleRepository, roleRepository,
userRepository, userRepository,
optionsAccessor, optionsAccessor,
passwordHasher, passwordHasher,
userValidators, userValidators,
passwordValidators, passwordValidators,
keyNormalizer, keyNormalizer,
errors, errors,
services, services,
logger, logger,
cancellationTokenProvider) cancellationTokenProvider)
{ {
} }
public override async Task<IdentityResult> CreateAsync(IdentityUser user) public async override Task<IdentityResult> CreateAsync(IdentityUser user)
{ {
if (user.PhoneNumber.IsNullOrWhiteSpace()) if (user.PhoneNumber.IsNullOrWhiteSpace())
{ {
@ -251,8 +251,8 @@ ObjectExtensionManager.Instance
.AddOrUpdateProperty<string>( .AddOrUpdateProperty<string>(
new[] new[]
{ {
typeof(IdentityUserDto), typeof(IdentityUserDto),
typeof(IdentityUserCreateDto), typeof(IdentityUserCreateDto),
typeof(IdentityUserUpdateDto) typeof(IdentityUserUpdateDto)
}, },
"SocialSecurityNumber" "SocialSecurityNumber"

6
docs/zh-Hans/Entity-Framework-Core.md

@ -263,7 +263,7 @@ context.Services.AddAbpDbContext<BookStoreDbContext>(options =>
在你想要覆盖默认仓储方法对其自定义时,这一点非常需要. 例如你可能希望自定义`DeleteAsync`方法覆盖默认实现 在你想要覆盖默认仓储方法对其自定义时,这一点非常需要. 例如你可能希望自定义`DeleteAsync`方法覆盖默认实现
````csharp ````csharp
public override async Task DeleteAsync( public async override Task DeleteAsync(
Guid id, Guid id,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -365,7 +365,7 @@ public class MyRepositoryBase<TEntity>
: EfCoreRepository<BookStoreDbContext, TEntity> : EfCoreRepository<BookStoreDbContext, TEntity>
where TEntity : class, IEntity where TEntity : class, IEntity
{ {
public MyRepositoryBase(IDbContextProvider<BookStoreDbContext> dbContextProvider) public MyRepositoryBase(IDbContextProvider<BookStoreDbContext> dbContextProvider)
: base(dbContextProvider) : base(dbContextProvider)
{ {
} }
@ -447,4 +447,4 @@ context.Services.AddAbpDbContext<OtherDbContext>(options =>
## 另请参阅 ## 另请参阅
* [实体](Entities.md) * [实体](Entities.md)

2
docs/zh-Hans/How-To/Customize-SignIn-Manager.md

@ -38,7 +38,7 @@ public class CustomSignInManager : Microsoft.AspNetCore.Identity.SignInManager<V
一个好的开始是从复制[源码](https://github.com/dotnet/aspnetcore/blob/c56aa320c32ee5429d60647782c91d53ac765865/src/Identity/Core/src/SignInManager.cs#L638-L674)而不是从零开始. 在这个用例中我们对源码进行较少的修改,为了帮助理解概念它显式显示了方法和属性的命名空间. 一个好的开始是从复制[源码](https://github.com/dotnet/aspnetcore/blob/c56aa320c32ee5429d60647782c91d53ac765865/src/Identity/Core/src/SignInManager.cs#L638-L674)而不是从零开始. 在这个用例中我们对源码进行较少的修改,为了帮助理解概念它显式显示了方法和属性的命名空间.
````csharp ````csharp
public override async Task<Microsoft.AspNetCore.Identity.ExternalLoginInfo> GetExternalLoginInfoAsync(string expectedXsrf = null) public async override Task<Microsoft.AspNetCore.Identity.ExternalLoginInfo> GetExternalLoginInfoAsync(string expectedXsrf = null)
{ {
var auth = await Context.AuthenticateAsync(Microsoft.AspNetCore.Identity.IdentityConstants.ExternalScheme); var auth = await Context.AuthenticateAsync(Microsoft.AspNetCore.Identity.IdentityConstants.ExternalScheme);
var items = auth?.Properties?.Items; var items = auth?.Properties?.Items;

10
docs/zh-Hans/MongoDB.md

@ -160,7 +160,7 @@ public interface IBookRepository : IRepository<Book, Guid>
实现`IBookRepository`接口的例子: 实现`IBookRepository`接口的例子:
```csharp ```csharp
public class BookRepository : public class BookRepository :
MongoDbRepository<BookStoreMongoDbContext, Book, Guid>, MongoDbRepository<BookStoreMongoDbContext, Book, Guid>,
IBookRepository IBookRepository
{ {
@ -200,9 +200,9 @@ context.Services.AddMongoDbContext<BookStoreMongoDbContext>(options =>
当你想**重写基础仓储方法**时,这一点尤为重要.例如,你想要重写`DeleteAsync`方法,以便更有效的删除实体: 当你想**重写基础仓储方法**时,这一点尤为重要.例如,你想要重写`DeleteAsync`方法,以便更有效的删除实体:
```csharp ```csharp
public override async Task DeleteAsync( public async override Task DeleteAsync(
Guid id, Guid id,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
//TODO: 自定义实现删除方法 //TODO: 自定义实现删除方法
@ -338,4 +338,4 @@ context.Services.AddMongoDbContext<OtherMongoDbContext>(options =>
}); });
``` ```
这个例子中,`OtherMongoDbContext`实现了`IBookStoreMongoDbContext`.这个特性允许你在发开的时候使用多个MongoDbContext(每个模块一个),但是运行的时候只能使有一个MongoDbContext(实现所有MongoDbContexts的所有接口) 这个例子中,`OtherMongoDbContext`实现了`IBookStoreMongoDbContext`.这个特性允许你在发开的时候使用多个MongoDbContext(每个模块一个),但是运行的时候只能使有一个MongoDbContext(实现所有MongoDbContexts的所有接口)

4
docs/zh-Hans/UI/Angular/Component-Replacement.md

@ -49,7 +49,7 @@ export class AppComponent {
yarn ng generate component my-application-layout yarn ng generate component my-application-layout
``` ```
在你的布局模板(`my-layout.component.html`)中添加以下代码: 在你的布局模板(`my-application-layout.component.html`)中添加以下代码:
```html ```html
<router-outlet></router-outlet> <router-outlet></router-outlet>
@ -543,4 +543,4 @@ export class AppComponent implements OnInit {
## 下一步是什么? ## 下一步是什么?
- [自定义设置页面](./Custom-Setting-Page.md) - [自定义设置页面](./Custom-Setting-Page.md)

6
docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md

@ -36,7 +36,7 @@ namespace Acme.BookStore.Web.Pages.Identity.Users
{ {
} }
public override async Task<IActionResult> OnPostAsync() public async override Task<IActionResult> OnPostAsync()
{ {
//TODO: Additional logic //TODO: Additional logic
await base.OnPostAsync(); await base.OnPostAsync();
@ -83,10 +83,10 @@ namespace Acme.BookStore.Web.Pages.Identity.Users
public class MyLoginModel : LoginModel public class MyLoginModel : LoginModel
{ {
public MyLoginModel( public MyLoginModel(
IAuthenticationSchemeProvider schemeProvider, IAuthenticationSchemeProvider schemeProvider,
IOptions<AbpAccountOptions> accountOptions IOptions<AbpAccountOptions> accountOptions
) : base( ) : base(
schemeProvider, schemeProvider,
accountOptions) accountOptions)
{ {

2
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor

@ -21,7 +21,7 @@
private IReadOnlyList<LanguageInfo> _otherLanguages; private IReadOnlyList<LanguageInfo> _otherLanguages;
private LanguageInfo _currentLanguage; private LanguageInfo _currentLanguage;
protected override async Task OnInitializedAsync() protected async override Task OnInitializedAsync()
{ {
var selectedLanguageName = await JsRuntime.InvokeAsync<string>( var selectedLanguageName = await JsRuntime.InvokeAsync<string>(
"localStorage.getItem", "localStorage.getItem",

2
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs

@ -26,7 +26,7 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic
protected string ServerUrl { get; set; } protected string ServerUrl { get; set; }
protected string ServerAccountUrl { get; set; } protected string ServerAccountUrl { get; set; }
protected override async Task OnInitializedAsync() protected async override Task OnInitializedAsync()
{ {
Menu = await MenuManager.GetAsync(StandardMenus.User); Menu = await MenuManager.GetAsync(StandardMenus.User);

2
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs

@ -12,7 +12,7 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic
private List<RenderFragment> ToolbarItemRenders { get; set; } = new List<RenderFragment>(); private List<RenderFragment> ToolbarItemRenders { get; set; } = new List<RenderFragment>();
protected override async Task OnInitializedAsync() protected async override Task OnInitializedAsync()
{ {
var toolbar = await ToolbarManager.GetAsync(StandardToolbars.Main); var toolbar = await ToolbarManager.GetAsync(StandardToolbars.Main);

2
framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs

@ -13,7 +13,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Client
ConfigurationClient = configurationClient; ConfigurationClient = configurationClient;
} }
public override async Task<string> GetOrNullAsync(string name) public async override Task<string> GetOrNullAsync(string name)
{ {
var configuration = await ConfigurationClient.GetAsync(); var configuration = await ConfigurationClient.GetAsync();
return configuration.Features.Values.GetOrDefault(name); return configuration.Features.Values.GetOrDefault(name);

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs

@ -8,7 +8,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
{ {
public class AbpBreadcrumbTagHelperService : AbpTagHelperService<AbpBreadcrumbTagHelper> public class AbpBreadcrumbTagHelperService : AbpTagHelperService<AbpBreadcrumbTagHelper>
{ {
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
output.TagName = "nav"; output.TagName = "nav";
output.Attributes.Add("aria-label", "breadcrumb"); output.Attributes.Add("aria-label", "breadcrumb");

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs

@ -19,7 +19,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel
L = localizer; L = localizer;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
output.TagName = "div"; output.TagName = "div";

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs

@ -9,7 +9,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse
{ {
public class AbpAccordionItemTagHelperService : AbpTagHelperService<AbpAccordionItemTagHelper> public class AbpAccordionItemTagHelperService : AbpTagHelperService<AbpAccordionItemTagHelper>
{ {
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
SetRandomIdIfNotProvided(); SetRandomIdIfNotProvided();

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs

@ -17,7 +17,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse
HtmlGenerator = htmlGenerator; HtmlGenerator = htmlGenerator;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
SetRandomIdIfNotProvided(); SetRandomIdIfNotProvided();
@ -25,7 +25,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse
output.TagMode = TagMode.StartTagAndEndTag; output.TagMode = TagMode.StartTagAndEndTag;
output.Attributes.AddClass("accordion"); output.Attributes.AddClass("accordion");
output.Attributes.Add("id",TagHelper.Id); output.Attributes.Add("id",TagHelper.Id);
var items = InitilizeFormGroupContentsContext(context, output); var items = InitilizeFormGroupContentsContext(context, output);
await output.GetChildContentAsync(); await output.GetChildContentAsync();
@ -62,4 +62,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse
} }
} }
} }
} }

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpCollapseBodyTagHelperService.cs

@ -6,7 +6,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse
{ {
public class AbpCollapseBodyTagHelperService : AbpTagHelperService<AbpCollapseBodyTagHelper> public class AbpCollapseBodyTagHelperService : AbpTagHelperService<AbpCollapseBodyTagHelper>
{ {
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
output.TagName = "div"; output.TagName = "div";
output.Attributes.AddClass("collapse"); output.Attributes.AddClass("collapse");
@ -27,4 +27,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse
output.Content.SetHtmlContent(innerContent); output.Content.SetHtmlContent(innerContent);
} }
} }
} }

8
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs

@ -24,7 +24,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown
_serviceProvider = serviceProvider; _serviceProvider = serviceProvider;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
var content = await output.GetChildContentAsync(); var content = await output.GetChildContentAsync();
@ -60,7 +60,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown
protected virtual async Task<string> GetMainButtonAsync(TagHelperContext context, TagHelperOutput output, TagHelperContent content) protected virtual async Task<string> GetMainButtonAsync(TagHelperContext context, TagHelperOutput output, TagHelperContent content)
{ {
var abpButtonTagHelper = _serviceProvider.GetRequiredService<AbpButtonTagHelper>(); var abpButtonTagHelper = _serviceProvider.GetRequiredService<AbpButtonTagHelper>();
abpButtonTagHelper.Icon = TagHelper.Icon; abpButtonTagHelper.Icon = TagHelper.Icon;
abpButtonTagHelper.Text = TagHelper.Text; abpButtonTagHelper.Text = TagHelper.Text;
abpButtonTagHelper.IconType = TagHelper.IconType; abpButtonTagHelper.IconType = TagHelper.IconType;
@ -121,7 +121,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown
{"aria-haspopup", "true"}, {"aria-haspopup", "true"},
{"aria-expanded", "false"}, {"aria-expanded", "false"},
}; };
attributes.AddClass("dropdown-toggle"); attributes.AddClass("dropdown-toggle");
attributes.AddClass("dropdown-toggle-split"); attributes.AddClass("dropdown-toggle-split");
@ -142,4 +142,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown
return buttonTag; return buttonTag;
} }
} }
} }

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs

@ -31,7 +31,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
_serviceProvider = serviceProvider; _serviceProvider = serviceProvider;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
var list = InitilizeFormGroupContentsContext(context, output); var list = InitilizeFormGroupContentsContext(context, output);
@ -144,7 +144,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
} }
} }
} }
protected virtual void RemoveFormGroupItemsNotInModel(TagHelperContext context, TagHelperOutput output, List<FormGroupItem> items) protected virtual void RemoveFormGroupItemsNotInModel(TagHelperContext context, TagHelperOutput output, List<FormGroupItem> items)
{ {
var models = GetModels(context, output); var models = GetModels(context, output);
@ -303,4 +303,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
return explorer.GetAttribute<AbpRadioButton>() != null; return explorer.GetAttribute<AbpRadioButton>() != null;
} }
} }
} }

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs

@ -26,7 +26,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
_tagHelperLocalizer = tagHelperLocalizer; _tagHelperLocalizer = tagHelperLocalizer;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
var (innerHtml, isCheckBox) = await GetFormInputGroupAsHtmlAsync(context, output); var (innerHtml, isCheckBox) = await GetFormInputGroupAsHtmlAsync(context, output);

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs

@ -35,7 +35,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
_stringLocalizerFactory = stringLocalizerFactory; _stringLocalizerFactory = stringLocalizerFactory;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
var innerHtml = await GetFormInputGroupAsHtmlAsync(context, output); var innerHtml = await GetFormInputGroupAsHtmlAsync(context, output);

110
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs

@ -1,22 +1,22 @@
using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.AspNetCore.Razor.TagHelpers;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
{ {
public class AbpModalTagHelperService : AbpTagHelperService<AbpModalTagHelper> public class AbpModalTagHelperService : AbpTagHelperService<AbpModalTagHelper>
{ {
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
output.TagName = null; output.TagName = null;
var childContent = await output.GetChildContentAsync(); var childContent = await output.GetChildContentAsync();
SetContent(context, output, childContent); SetContent(context, output, childContent);
} }
protected virtual void SetContent(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) protected virtual void SetContent(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent)
{ {
var modalContent = GetModalContentElement(context, output, childContent); var modalContent = GetModalContentElement(context, output, childContent);
@ -24,16 +24,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
var modal = GetModal(context, output, modalDialog); var modal = GetModal(context, output, modalDialog);
output.Content.SetHtmlContent(modal); output.Content.SetHtmlContent(modal);
} }
protected virtual TagBuilder GetModalContentElement(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) protected virtual TagBuilder GetModalContentElement(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent)
{ {
var element = new TagBuilder("div"); var element = new TagBuilder("div");
element.AddCssClass(GetModalContentClasses()); element.AddCssClass(GetModalContentClasses());
element.InnerHtml.SetHtmlContent(childContent); element.InnerHtml.SetHtmlContent(childContent);
return element; return element;
} }
protected virtual TagBuilder GetModalDialogElement(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml) protected virtual TagBuilder GetModalDialogElement(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml)
{ {
var element = new TagBuilder("div"); var element = new TagBuilder("div");
@ -41,8 +41,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
element.Attributes.Add("role", "document"); element.Attributes.Add("role", "document");
element.InnerHtml.SetHtmlContent(innerHtml); element.InnerHtml.SetHtmlContent(innerHtml);
return element; return element;
} }
protected virtual TagBuilder GetModal(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml) protected virtual TagBuilder GetModal(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml)
{ {
var element = new TagBuilder("div"); var element = new TagBuilder("div");
@ -61,37 +61,37 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
element.InnerHtml.SetHtmlContent(innerHtml); element.InnerHtml.SetHtmlContent(innerHtml);
return element; return element;
} }
protected virtual string GetModalClasses() protected virtual string GetModalClasses()
{ {
return "modal fade"; return "modal fade";
} }
protected virtual string GetModalDialogClasses() protected virtual string GetModalDialogClasses()
{ {
var classNames = new StringBuilder("modal-dialog"); var classNames = new StringBuilder("modal-dialog");
if (TagHelper.Centered ?? false) if (TagHelper.Centered ?? false)
{ {
classNames.Append(" "); classNames.Append(" ");
classNames.Append("modal-dialog-centered"); classNames.Append("modal-dialog-centered");
} }
if (TagHelper.Size != AbpModalSize.Default) if (TagHelper.Size != AbpModalSize.Default)
{ {
classNames.Append(" "); classNames.Append(" ");
classNames.Append(TagHelper.Size.ToClassName()); classNames.Append(TagHelper.Size.ToClassName());
} }
return classNames.ToString(); return classNames.ToString();
} }
protected virtual string GetModalContentClasses() protected virtual string GetModalContentClasses()
{ {
return "modal-content"; return "modal-content";
} }
protected virtual string GetDataAttributes() protected virtual string GetDataAttributes()
{ {
if (TagHelper.Static == true) if (TagHelper.Static == true)
@ -107,6 +107,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
{ {
builder.Attributes.Add("data-backdrop", "static"); builder.Attributes.Add("data-backdrop", "static");
} }
} }
} }
} }

10
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs

@ -21,9 +21,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination
private readonly IStringLocalizerFactory _stringLocalizerFactory; private readonly IStringLocalizerFactory _stringLocalizerFactory;
public AbpPaginationTagHelperService( public AbpPaginationTagHelperService(
IHtmlGenerator generator, IHtmlGenerator generator,
HtmlEncoder encoder, HtmlEncoder encoder,
IAbpTagHelperLocalizer tagHelperLocalizer, IAbpTagHelperLocalizer tagHelperLocalizer,
IStringLocalizerFactory stringLocalizerFactory) IStringLocalizerFactory stringLocalizerFactory)
{ {
_generator = generator; _generator = generator;
@ -32,7 +32,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination
_stringLocalizerFactory = stringLocalizerFactory; _stringLocalizerFactory = stringLocalizerFactory;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
if (TagHelper.Model.ShownItemsCount <= 0) if (TagHelper.Model.ShownItemsCount <= 0)
{ {
@ -199,4 +199,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination
} }
} }
} }
} }

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs

@ -9,7 +9,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
{ {
public class AbpTabDropdownTagHelperService : AbpTagHelperService<AbpTabDropdownTagHelper> public class AbpTabDropdownTagHelperService : AbpTagHelperService<AbpTabDropdownTagHelper>
{ {
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
if (string.IsNullOrWhiteSpace(TagHelper.Name)) if (string.IsNullOrWhiteSpace(TagHelper.Name))
{ {

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs

@ -9,7 +9,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
{ {
public class AbpTabTagHelperService : AbpTagHelperService<AbpTabTagHelper> public class AbpTabTagHelperService : AbpTagHelperService<AbpTabTagHelper>
{ {
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
SetPlaceholderForNameIfNotProvided(); SetPlaceholderForNameIfNotProvided();

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs

@ -20,7 +20,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
HtmlGenerator = htmlGenerator; HtmlGenerator = htmlGenerator;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
SetRandomNameIfNotProvided(); SetRandomNameIfNotProvided();

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelperService.cs

@ -16,7 +16,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
ResourceService = resourceService; ResourceService = resourceService;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
var tagHelperItems = context.Items.GetOrDefault(AbpTagHelperConsts.ContextBundleItemListKey) as List<BundleTagHelperItem>; var tagHelperItems = context.Items.GetOrDefault(AbpTagHelperConsts.ContextBundleItemListKey) as List<BundleTagHelperItem>;
if (tagHelperItems != null) if (tagHelperItems != null)

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperService.cs

@ -16,7 +16,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
ResourceService = resourceService; ResourceService = resourceService;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
await ResourceService.ProcessAsync( await ResourceService.ProcessAsync(
TagHelper.ViewContext, TagHelper.ViewContext,

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs

@ -38,7 +38,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
); );
} }
protected override async Task<IReadOnlyList<string>> GetBundleFilesAsync(string bundleName) protected async override Task<IReadOnlyList<string>> GetBundleFilesAsync(string bundleName)
{ {
return await BundleManager.GetScriptBundleFilesAsync(bundleName); return await BundleManager.GetScriptBundleFilesAsync(bundleName);
} }

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs

@ -38,7 +38,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
); );
} }
protected override async Task<IReadOnlyList<string>> GetBundleFilesAsync(string bundleName) protected async override Task<IReadOnlyList<string>> GetBundleFilesAsync(string bundleName)
{ {
return await BundleManager.GetStyleBundleFilesAsync(bundleName); return await BundleManager.GetStyleBundleFilesAsync(bundleName);
} }

18
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/TagHelpers/AbpComponentDemoSectionTagHelper.cs

@ -21,14 +21,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S
private readonly IGuidGenerator _guidGenerator; private readonly IGuidGenerator _guidGenerator;
public AbpComponentDemoSectionTagHelper( public AbpComponentDemoSectionTagHelper(
IVirtualFileProvider virtualFileProvider, IVirtualFileProvider virtualFileProvider,
IGuidGenerator guidGenerator) IGuidGenerator guidGenerator)
{ {
_virtualFileProvider = virtualFileProvider; _virtualFileProvider = virtualFileProvider;
_guidGenerator = guidGenerator; _guidGenerator = guidGenerator;
} }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{ {
output.TagName = null; output.TagName = null;
@ -40,7 +40,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S
var codeBlockTabId = _guidGenerator.Create(); var codeBlockTabId = _guidGenerator.Create();
var tagHelperCodeBlockId = _guidGenerator.Create(); var tagHelperCodeBlockId = _guidGenerator.Create();
var bootstrapCodeBlockId = _guidGenerator.Create(); var bootstrapCodeBlockId = _guidGenerator.Create();
output.PreContent.AppendHtml("<div class=\"card\">"); output.PreContent.AppendHtml("<div class=\"card\">");
output.PreContent.AppendHtml("<div class=\"card-header\">"); output.PreContent.AppendHtml("<div class=\"card-header\">");
output.PreContent.AppendHtml("<div class=\"row\">"); output.PreContent.AppendHtml("<div class=\"row\">");
@ -58,14 +58,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S
output.PreContent.AppendHtml("<div class=\"card-body\">"); output.PreContent.AppendHtml("<div class=\"card-body\">");
output.PreContent.AppendHtml($"<div class=\"tab-content\" id=\"nav-preview-tabContent-{previewId}\">"); output.PreContent.AppendHtml($"<div class=\"tab-content\" id=\"nav-preview-tabContent-{previewId}\">");
output.PreContent.AppendHtml($"<div class=\"tab-pane fade show active\" id=\"nav-preview-{previewId}\" role=\"tabpanel\" aria-labelledby=\"nav-preview-tab-{previewId}\">"); output.PreContent.AppendHtml($"<div class=\"tab-pane fade show active\" id=\"nav-preview-{previewId}\" role=\"tabpanel\" aria-labelledby=\"nav-preview-tab-{previewId}\">");
/* component rendering here */ /* component rendering here */
output.PostContent.AppendHtml("</div>"); // tab-pane output.PostContent.AppendHtml("</div>"); // tab-pane
output.PostContent.AppendHtml($"<div class=\"tab-pane fade\" id=\"nav-code-{codeBlockId}\" role=\"tabpanel\" aria-labelledby=\"nav-code-tab-{codeBlockId}\">"); output.PostContent.AppendHtml($"<div class=\"tab-pane fade\" id=\"nav-code-{codeBlockId}\" role=\"tabpanel\" aria-labelledby=\"nav-code-tab-{codeBlockId}\">");
/* CodeBlock tabs */ /* CodeBlock tabs */
output.PostContent.AppendHtml($"<ul class=\"nav nav-tabs\" id=\"code-block-tab-{codeBlockTabId}\" role=\"tablist\">"); output.PostContent.AppendHtml($"<ul class=\"nav nav-tabs\" id=\"code-block-tab-{codeBlockTabId}\" role=\"tablist\">");
output.PostContent.AppendHtml("<li class=\"nav-item\">"); output.PostContent.AppendHtml("<li class=\"nav-item\">");
output.PostContent.AppendHtml($"<a class=\"nav-link active\" id=\"tag-helper-tab-{tagHelperCodeBlockId}\" data-toggle=\"pill\" href=\"#tag-helper-{tagHelperCodeBlockId}\" role=\"tab\" aria-controls=\"tag-helper-{tagHelperCodeBlockId}\" aria-selected=\"true\">Abp Tag Helper</a>"); output.PostContent.AppendHtml($"<a class=\"nav-link active\" id=\"tag-helper-tab-{tagHelperCodeBlockId}\" data-toggle=\"pill\" href=\"#tag-helper-{tagHelperCodeBlockId}\" role=\"tab\" aria-controls=\"tag-helper-{tagHelperCodeBlockId}\" aria-selected=\"true\">Abp Tag Helper</a>");
@ -75,7 +75,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S
output.PostContent.AppendHtml("</li>"); output.PostContent.AppendHtml("</li>");
output.PostContent.AppendHtml("</ul>"); output.PostContent.AppendHtml("</ul>");
output.PostContent.AppendHtml($"<div class=\"tab-content\" id=\"code-block-tabContent-{codeBlockTabId}\">"); output.PostContent.AppendHtml($"<div class=\"tab-content\" id=\"code-block-tabContent-{codeBlockTabId}\">");
output.PostContent.AppendHtml($"<div class=\"tab-pane fade show active\" id=\"tag-helper-{tagHelperCodeBlockId}\" role=\"tabpanel\" aria-labelledby=\"tag-helper-tab-{tagHelperCodeBlockId}\">"); output.PostContent.AppendHtml($"<div class=\"tab-pane fade show active\" id=\"tag-helper-{tagHelperCodeBlockId}\" role=\"tabpanel\" aria-labelledby=\"tag-helper-tab-{tagHelperCodeBlockId}\">");
output.PostContent.AppendHtml("<pre class=\"p-4\">"); output.PostContent.AppendHtml("<pre class=\"p-4\">");
output.PostContent.AppendHtml("<code class=\"language-html\">"); output.PostContent.AppendHtml("<code class=\"language-html\">");
@ -83,7 +83,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S
output.PostContent.AppendHtml("</code>"); output.PostContent.AppendHtml("</code>");
output.PostContent.AppendHtml("</pre>"); output.PostContent.AppendHtml("</pre>");
output.PostContent.AppendHtml("</div>"); output.PostContent.AppendHtml("</div>");
output.PostContent.AppendHtml($"<div class=\"tab-pane fade\" id=\"bootstrap-{bootstrapCodeBlockId}\" role=\"tabpanel\" aria-labelledby=\"bootstrap-tab-{bootstrapCodeBlockId}\">"); output.PostContent.AppendHtml($"<div class=\"tab-pane fade\" id=\"bootstrap-{bootstrapCodeBlockId}\" role=\"tabpanel\" aria-labelledby=\"bootstrap-tab-{bootstrapCodeBlockId}\">");
output.PostContent.AppendHtml("<pre class=\"p-4\">"); output.PostContent.AppendHtml("<pre class=\"p-4\">");
output.PostContent.AppendHtml("<code class=\"language-html\">"); output.PostContent.AppendHtml("<code class=\"language-html\">");
@ -91,7 +91,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S
output.PostContent.AppendHtml("</code>"); output.PostContent.AppendHtml("</code>");
output.PostContent.AppendHtml("</pre>"); output.PostContent.AppendHtml("</pre>");
output.PostContent.AppendHtml("</div>"); output.PostContent.AppendHtml("</div>");
output.PostContent.AppendHtml("</div>"); // tab-content output.PostContent.AppendHtml("</div>"); // tab-content
output.PostContent.AppendHtml("</div>"); // tab-pane output.PostContent.AppendHtml("</div>"); // tab-pane
output.PostContent.AppendHtml("</div>"); // tab-content output.PostContent.AppendHtml("</div>"); // tab-content

2
framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/SecurityLog/AspNetCoreSecurityLogManager.cs

@ -48,7 +48,7 @@ namespace Volo.Abp.AspNetCore.SecurityLog
WebClientInfoProvider = webClientInfoProvider; WebClientInfoProvider = webClientInfoProvider;
} }
protected override async Task<SecurityLogInfo> CreateAsync() protected async override Task<SecurityLogInfo> CreateAsync()
{ {
var securityLogInfo = await base.CreateAsync(); var securityLogInfo = await base.CreateAsync();

8
framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs

@ -18,7 +18,7 @@ namespace Volo.Abp.Auditing
_auditingManager = auditingManager; _auditingManager = auditingManager;
} }
public override async Task InterceptAsync(IAbpMethodInvocation invocation) public async override Task InterceptAsync(IAbpMethodInvocation invocation)
{ {
if (!ShouldIntercept(invocation, out var auditLog, out var auditLogAction)) if (!ShouldIntercept(invocation, out var auditLog, out var auditLogAction))
{ {
@ -46,8 +46,8 @@ namespace Volo.Abp.Auditing
} }
protected virtual bool ShouldIntercept( protected virtual bool ShouldIntercept(
IAbpMethodInvocation invocation, IAbpMethodInvocation invocation,
out AuditLogInfo auditLog, out AuditLogInfo auditLog,
out AuditLogActionInfo auditLogAction) out AuditLogActionInfo auditLogAction)
{ {
auditLog = null; auditLog = null;
@ -73,7 +73,7 @@ namespace Volo.Abp.Auditing
auditLogAction = _auditingHelper.CreateAuditLogAction( auditLogAction = _auditingHelper.CreateAuditLogAction(
auditLog, auditLog,
invocation.TargetObject.GetType(), invocation.TargetObject.GetType(),
invocation.Method, invocation.Method,
invocation.Arguments invocation.Arguments
); );

2
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs

@ -23,7 +23,7 @@ namespace Volo.Abp.Authorization
_options = options.Value; _options = options.Value;
} }
public override async Task<AuthorizationPolicy> GetPolicyAsync(string policyName) public async override Task<AuthorizationPolicy> GetPolicyAsync(string policyName)
{ {
var policy = await base.GetPolicyAsync(policyName); var policy = await base.GetPolicyAsync(policyName);
if (policy != null) if (policy != null)

2
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs

@ -13,7 +13,7 @@ namespace Volo.Abp.Authorization
_methodInvocationAuthorizationService = methodInvocationAuthorizationService; _methodInvocationAuthorizationService = methodInvocationAuthorizationService;
} }
public override async Task InterceptAsync(IAbpMethodInvocation invocation) public async override Task InterceptAsync(IAbpMethodInvocation invocation)
{ {
await AuthorizeAsync(invocation); await AuthorizeAsync(invocation);
await invocation.ProceedAsync(); await invocation.ProceedAsync();

2
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/PermissionRequirementHandler.cs

@ -13,7 +13,7 @@ namespace Volo.Abp.Authorization
_permissionChecker = permissionChecker; _permissionChecker = permissionChecker;
} }
protected override async Task HandleRequirementAsync( protected async override Task HandleRequirementAsync(
AuthorizationHandlerContext context, AuthorizationHandlerContext context,
PermissionRequirement requirement) PermissionRequirement requirement)
{ {

4
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs

@ -15,7 +15,7 @@ namespace Volo.Abp.Authorization.Permissions
} }
public override async Task<PermissionGrantResult> CheckAsync(PermissionValueCheckContext context) public async override Task<PermissionGrantResult> CheckAsync(PermissionValueCheckContext context)
{ {
var clientId = context.Principal?.FindFirst(AbpClaimTypes.ClientId)?.Value; var clientId = context.Principal?.FindFirst(AbpClaimTypes.ClientId)?.Value;
@ -24,7 +24,7 @@ namespace Volo.Abp.Authorization.Permissions
return PermissionGrantResult.Undefined; return PermissionGrantResult.Undefined;
} }
return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, clientId) return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, clientId)
? PermissionGrantResult.Granted ? PermissionGrantResult.Granted
: PermissionGrantResult.Undefined; : PermissionGrantResult.Undefined;
} }

4
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs

@ -16,7 +16,7 @@ namespace Volo.Abp.Authorization.Permissions
} }
public override async Task<PermissionGrantResult> CheckAsync(PermissionValueCheckContext context) public async override Task<PermissionGrantResult> CheckAsync(PermissionValueCheckContext context)
{ {
var roles = context.Principal?.FindAll(AbpClaimTypes.Role).Select(c => c.Value).ToArray(); var roles = context.Principal?.FindAll(AbpClaimTypes.Role).Select(c => c.Value).ToArray();
@ -36,4 +36,4 @@ namespace Volo.Abp.Authorization.Permissions
return PermissionGrantResult.Undefined; return PermissionGrantResult.Undefined;
} }
} }
} }

2
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs

@ -15,7 +15,7 @@ namespace Volo.Abp.Authorization.Permissions
} }
public override async Task<PermissionGrantResult> CheckAsync(PermissionValueCheckContext context) public async override Task<PermissionGrantResult> CheckAsync(PermissionValueCheckContext context)
{ {
var userId = context.Principal?.FindFirst(AbpClaimTypes.UserId)?.Value; var userId = context.Principal?.FindFirst(AbpClaimTypes.UserId)?.Value;

2
framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs

@ -30,7 +30,7 @@ namespace Volo.Abp.BackgroundJobs
Timer.Period = WorkerOptions.JobPollPeriod; Timer.Period = WorkerOptions.JobPollPeriod;
} }
protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) protected async override Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{ {
var store = workerContext.ServiceProvider.GetRequiredService<IBackgroundJobStore>(); var store = workerContext.ServiceProvider.GetRequiredService<IBackgroundJobStore>();

2
framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs

@ -57,7 +57,7 @@ namespace Volo.Abp.BackgroundWorkers.Quartz
.Build(); .Build();
} }
public override async Task Execute(IJobExecutionContext context) public async override Task Execute(IJobExecutionContext context)
{ {
var worker = (IBackgroundWorker) ServiceProvider.GetService(typeof(TWorker)); var worker = (IBackgroundWorker) ServiceProvider.GetService(typeof(TWorker));
var workerContext = new PeriodicBackgroundWorkerContext(ServiceProvider); var workerContext = new PeriodicBackgroundWorkerContext(ServiceProvider);

6
framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs

@ -22,13 +22,13 @@ namespace Volo.Abp.BackgroundWorkers
Timer.Elapsed += Timer_Elapsed; Timer.Elapsed += Timer_Elapsed;
} }
public override async Task StartAsync(CancellationToken cancellationToken = default) public async override Task StartAsync(CancellationToken cancellationToken = default)
{ {
await base.StartAsync(cancellationToken); await base.StartAsync(cancellationToken);
Timer.Start(cancellationToken); Timer.Start(cancellationToken);
} }
public override async Task StopAsync(CancellationToken cancellationToken = default) public async override Task StopAsync(CancellationToken cancellationToken = default)
{ {
Timer.Stop(cancellationToken); Timer.Stop(cancellationToken);
await base.StopAsync(cancellationToken); await base.StopAsync(cancellationToken);
@ -59,4 +59,4 @@ namespace Volo.Abp.BackgroundWorkers
protected abstract Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext); protected abstract Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext);
} }
} }

8
framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs

@ -9,7 +9,7 @@ using Volo.Abp.Threading;
namespace Volo.Abp.BackgroundWorkers namespace Volo.Abp.BackgroundWorkers
{ {
/// <summary> /// <summary>
/// Extends <see cref="BackgroundWorkerBase"/> to add a periodic running Timer. /// Extends <see cref="BackgroundWorkerBase"/> to add a periodic running Timer.
/// </summary> /// </summary>
public abstract class PeriodicBackgroundWorkerBase : BackgroundWorkerBase public abstract class PeriodicBackgroundWorkerBase : BackgroundWorkerBase
{ {
@ -25,13 +25,13 @@ namespace Volo.Abp.BackgroundWorkers
Timer.Elapsed += Timer_Elapsed; Timer.Elapsed += Timer_Elapsed;
} }
public override async Task StartAsync(CancellationToken cancellationToken = default) public async override Task StartAsync(CancellationToken cancellationToken = default)
{ {
await base.StartAsync(cancellationToken); await base.StartAsync(cancellationToken);
Timer.Start(cancellationToken); Timer.Start(cancellationToken);
} }
public override async Task StopAsync(CancellationToken cancellationToken = default) public async override Task StopAsync(CancellationToken cancellationToken = default)
{ {
Timer.Stop(cancellationToken); Timer.Stop(cancellationToken);
await base.StopAsync(cancellationToken); await base.StopAsync(cancellationToken);
@ -62,4 +62,4 @@ namespace Volo.Abp.BackgroundWorkers
/// </summary> /// </summary>
protected abstract void DoWork(PeriodicBackgroundWorkerContext workerContext); protected abstract void DoWork(PeriodicBackgroundWorkerContext workerContext);
} }
} }

2
framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs

@ -204,7 +204,7 @@ namespace Volo.Abp.BlazoriseUI
EditingEntity = new TUpdateViewModel(); EditingEntity = new TUpdateViewModel();
} }
protected override async Task OnInitializedAsync() protected async override Task OnInitializedAsync()
{ {
await SetBreadcrumbItemsAsync(); await SetBreadcrumbItemsAsync();
await SetPermissionsAsync(); await SetPermissionsAsync();

2
framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs

@ -73,7 +73,7 @@ namespace Volo.Abp.BlobStoring.Aliyun
return Task.FromResult(BlobExistsAsync(ossClient, containerName, blobName)); return Task.FromResult(BlobExistsAsync(ossClient, containerName, blobName));
} }
public override async Task<Stream> GetOrNullAsync(BlobProviderGetArgs args) public async override Task<Stream> GetOrNullAsync(BlobProviderGetArgs args)
{ {
var containerName = GetContainerName(args); var containerName = GetContainerName(args);
var blobName = AliyunBlobNameCalculator.Calculate(args); var blobName = AliyunBlobNameCalculator.Calculate(args);

10
framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs

@ -20,7 +20,7 @@ namespace Volo.Abp.BlobStoring.Aws
AmazonS3ClientFactory = amazonS3ClientFactory; AmazonS3ClientFactory = amazonS3ClientFactory;
} }
public override async Task SaveAsync(BlobProviderSaveArgs args) public async override Task SaveAsync(BlobProviderSaveArgs args)
{ {
var blobName = AwsBlobNameCalculator.Calculate(args); var blobName = AwsBlobNameCalculator.Calculate(args);
var configuration = args.Configuration.GetAwsConfiguration(); var configuration = args.Configuration.GetAwsConfiguration();
@ -48,7 +48,7 @@ namespace Volo.Abp.BlobStoring.Aws
} }
} }
public override async Task<bool> DeleteAsync(BlobProviderDeleteArgs args) public async override Task<bool> DeleteAsync(BlobProviderDeleteArgs args)
{ {
var blobName = AwsBlobNameCalculator.Calculate(args); var blobName = AwsBlobNameCalculator.Calculate(args);
var containerName = GetContainerName(args); var containerName = GetContainerName(args);
@ -70,7 +70,7 @@ namespace Volo.Abp.BlobStoring.Aws
} }
} }
public override async Task<bool> ExistsAsync(BlobProviderExistsArgs args) public async override Task<bool> ExistsAsync(BlobProviderExistsArgs args)
{ {
var blobName = AwsBlobNameCalculator.Calculate(args); var blobName = AwsBlobNameCalculator.Calculate(args);
var containerName = GetContainerName(args); var containerName = GetContainerName(args);
@ -81,7 +81,7 @@ namespace Volo.Abp.BlobStoring.Aws
} }
} }
public override async Task<Stream> GetOrNullAsync(BlobProviderGetArgs args) public async override Task<Stream> GetOrNullAsync(BlobProviderGetArgs args)
{ {
var blobName = AwsBlobNameCalculator.Calculate(args); var blobName = AwsBlobNameCalculator.Calculate(args);
var containerName = GetContainerName(args); var containerName = GetContainerName(args);
@ -155,4 +155,4 @@ namespace Volo.Abp.BlobStoring.Aws
: configuration.ContainerName; : configuration.ContainerName;
} }
} }
} }

8
framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs

@ -15,7 +15,7 @@ namespace Volo.Abp.BlobStoring.Azure
AzureBlobNameCalculator = azureBlobNameCalculator; AzureBlobNameCalculator = azureBlobNameCalculator;
} }
public override async Task SaveAsync(BlobProviderSaveArgs args) public async override Task SaveAsync(BlobProviderSaveArgs args)
{ {
var blobName = AzureBlobNameCalculator.Calculate(args); var blobName = AzureBlobNameCalculator.Calculate(args);
var configuration = args.Configuration.GetAzureConfiguration(); var configuration = args.Configuration.GetAzureConfiguration();
@ -33,7 +33,7 @@ namespace Volo.Abp.BlobStoring.Azure
await GetBlobClient(args, blobName).UploadAsync(args.BlobStream, true); await GetBlobClient(args, blobName).UploadAsync(args.BlobStream, true);
} }
public override async Task<bool> DeleteAsync(BlobProviderDeleteArgs args) public async override Task<bool> DeleteAsync(BlobProviderDeleteArgs args)
{ {
var blobName = AzureBlobNameCalculator.Calculate(args); var blobName = AzureBlobNameCalculator.Calculate(args);
@ -45,14 +45,14 @@ namespace Volo.Abp.BlobStoring.Azure
return false; return false;
} }
public override async Task<bool> ExistsAsync(BlobProviderExistsArgs args) public async override Task<bool> ExistsAsync(BlobProviderExistsArgs args)
{ {
var blobName = AzureBlobNameCalculator.Calculate(args); var blobName = AzureBlobNameCalculator.Calculate(args);
return await BlobExistsAsync(args, blobName); return await BlobExistsAsync(args, blobName);
} }
public override async Task<Stream> GetOrNullAsync(BlobProviderGetArgs args) public async override Task<Stream> GetOrNullAsync(BlobProviderGetArgs args)
{ {
var blobName = AzureBlobNameCalculator.Calculate(args); var blobName = AzureBlobNameCalculator.Calculate(args);

4
framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs

@ -16,7 +16,7 @@ namespace Volo.Abp.BlobStoring.FileSystem
FilePathCalculator = filePathCalculator; FilePathCalculator = filePathCalculator;
} }
public override async Task SaveAsync(BlobProviderSaveArgs args) public async override Task SaveAsync(BlobProviderSaveArgs args)
{ {
var filePath = FilePathCalculator.Calculate(args); var filePath = FilePathCalculator.Calculate(args);
@ -59,7 +59,7 @@ namespace Volo.Abp.BlobStoring.FileSystem
return ExistsAsync(filePath); return ExistsAsync(filePath);
} }
public override async Task<Stream> GetOrNullAsync(BlobProviderGetArgs args) public async override Task<Stream> GetOrNullAsync(BlobProviderGetArgs args)
{ {
var filePath = FilePathCalculator.Calculate(args); var filePath = FilePathCalculator.Calculate(args);

22
framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs

@ -16,7 +16,7 @@ namespace Volo.Abp.BlobStoring.Minio
MinioBlobNameCalculator = minioBlobNameCalculator; MinioBlobNameCalculator = minioBlobNameCalculator;
} }
public override async Task SaveAsync(BlobProviderSaveArgs args) public async override Task SaveAsync(BlobProviderSaveArgs args)
{ {
var blobName = MinioBlobNameCalculator.Calculate(args); var blobName = MinioBlobNameCalculator.Calculate(args);
var configuration = args.Configuration.GetMinioConfiguration(); var configuration = args.Configuration.GetMinioConfiguration();
@ -36,7 +36,7 @@ namespace Volo.Abp.BlobStoring.Minio
await client.PutObjectAsync(containerName, blobName, args.BlobStream, args.BlobStream.Length); await client.PutObjectAsync(containerName, blobName, args.BlobStream, args.BlobStream.Length);
} }
public override async Task<bool> DeleteAsync(BlobProviderDeleteArgs args) public async override Task<bool> DeleteAsync(BlobProviderDeleteArgs args)
{ {
var blobName = MinioBlobNameCalculator.Calculate(args); var blobName = MinioBlobNameCalculator.Calculate(args);
var client = GetMinioClient(args); var client = GetMinioClient(args);
@ -51,7 +51,7 @@ namespace Volo.Abp.BlobStoring.Minio
return false; return false;
} }
public override async Task<bool> ExistsAsync(BlobProviderExistsArgs args) public async override Task<bool> ExistsAsync(BlobProviderExistsArgs args)
{ {
var blobName = MinioBlobNameCalculator.Calculate(args); var blobName = MinioBlobNameCalculator.Calculate(args);
var client = GetMinioClient(args); var client = GetMinioClient(args);
@ -60,7 +60,7 @@ namespace Volo.Abp.BlobStoring.Minio
return await BlobExistsAsync(client, containerName, blobName); return await BlobExistsAsync(client, containerName, blobName);
} }
public override async Task<Stream> GetOrNullAsync(BlobProviderGetArgs args) public async override Task<Stream> GetOrNullAsync(BlobProviderGetArgs args)
{ {
var blobName = MinioBlobNameCalculator.Calculate(args); var blobName = MinioBlobNameCalculator.Calculate(args);
var client = GetMinioClient(args); var client = GetMinioClient(args);
@ -69,10 +69,10 @@ namespace Volo.Abp.BlobStoring.Minio
if (!await BlobExistsAsync(client, containerName, blobName)) if (!await BlobExistsAsync(client, containerName, blobName))
{ {
return null; return null;
} }
var memoryStream = new MemoryStream(); var memoryStream = new MemoryStream();
await client.GetObjectAsync(containerName, blobName, (stream) => await client.GetObjectAsync(containerName, blobName, (stream) =>
{ {
if (stream != null) if (stream != null)
{ {
@ -118,13 +118,13 @@ namespace Volo.Abp.BlobStoring.Minio
await client.StatObjectAsync(containerName, blobName); await client.StatObjectAsync(containerName, blobName);
} }
catch (Exception e) catch (Exception e)
{ {
if (e is ObjectNotFoundException) if (e is ObjectNotFoundException)
{ {
return false; return false;
} }
throw; throw;
} }
return true; return true;

4
framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapter.cs

@ -18,9 +18,9 @@ namespace Volo.Abp.Castle.DynamicProxy
Proceed = proceed; Proceed = proceed;
} }
public override async Task ProceedAsync() public async override Task ProceedAsync()
{ {
await Proceed(Invocation, ProceedInfo); await Proceed(Invocation, ProceedInfo);
} }
} }
} }

4
framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapterWithReturnValue.cs

@ -19,9 +19,9 @@ namespace Volo.Abp.Castle.DynamicProxy
Proceed = proceed; Proceed = proceed;
} }
public override async Task ProceedAsync() public async override Task ProceedAsync()
{ {
ReturnValue = await Proceed(Invocation, ProceedInfo); ReturnValue = await Proceed(Invocation, ProceedInfo);
} }
} }
} }

4
framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs

@ -15,14 +15,14 @@ namespace Volo.Abp.Castle.DynamicProxy
_abpInterceptor = abpInterceptor; _abpInterceptor = abpInterceptor;
} }
protected override async Task InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func<IInvocation, IInvocationProceedInfo, Task> proceed) protected async override Task InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func<IInvocation, IInvocationProceedInfo, Task> proceed)
{ {
await _abpInterceptor.InterceptAsync( await _abpInterceptor.InterceptAsync(
new CastleAbpMethodInvocationAdapter(invocation, proceedInfo, proceed) new CastleAbpMethodInvocationAdapter(invocation, proceedInfo, proceed)
); );
} }
protected override async Task<TResult> InterceptAsync<TResult>(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func<IInvocation, IInvocationProceedInfo, Task<TResult>> proceed) protected async override Task<TResult> InterceptAsync<TResult>(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func<IInvocation, IInvocationProceedInfo, Task<TResult>> proceed)
{ {
var adapter = new CastleAbpMethodInvocationAdapterWithReturnValue<TResult>(invocation, proceedInfo, proceed); var adapter = new CastleAbpMethodInvocationAdapterWithReturnValue<TResult>(invocation, proceedInfo, proceed);

4
framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs

@ -80,12 +80,12 @@ namespace Volo.Abp.Application.Services
Repository = repository; Repository = repository;
} }
protected override async Task DeleteByIdAsync(TKey id) protected async override Task DeleteByIdAsync(TKey id)
{ {
await Repository.DeleteAsync(id); await Repository.DeleteAsync(id);
} }
protected override async Task<TEntity> GetEntityByIdAsync(TKey id) protected async override Task<TEntity> GetEntityByIdAsync(TKey id)
{ {
return await Repository.GetAsync(id); return await Repository.GetAsync(id);
} }

2
framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ReadOnlyAppService.cs

@ -46,7 +46,7 @@ namespace Volo.Abp.Application.Services
Repository = repository; Repository = repository;
} }
protected override async Task<TEntity> GetEntityByIdAsync(TKey id) protected async override Task<TEntity> GetEntityByIdAsync(TKey id)
{ {
return await Repository.GetAsync(id); return await Repository.GetAsync(id);
} }

2
framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs

@ -14,7 +14,7 @@ namespace Volo.Abp.Emailing
EmailSender = emailSender; EmailSender = emailSender;
} }
public override async Task ExecuteAsync(BackgroundEmailSendingJobArgs args) public async override Task ExecuteAsync(BackgroundEmailSendingJobArgs args)
{ {
if (args.From.IsNullOrWhiteSpace()) if (args.From.IsNullOrWhiteSpace())
{ {

2
framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs

@ -69,7 +69,7 @@ namespace Volo.Abp.Emailing
); );
} }
public async Task QueueAsync(string from, string to, string subject, string body, bool isBodyHtml = true) public virtual async Task QueueAsync(string from, string to, string subject, string body, bool isBodyHtml = true)
{ {
if (!BackgroundJobManager.IsAvailable()) if (!BackgroundJobManager.IsAvailable())
{ {

2
framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs

@ -67,7 +67,7 @@ namespace Volo.Abp.Emailing.Smtp
} }
} }
protected override async Task SendEmailAsync(MailMessage mail) protected async override Task SendEmailAsync(MailMessage mail)
{ {
using (var smtpClient = await BuildClientAsync()) using (var smtpClient = await BuildClientAsync())
{ {

16
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs

@ -45,7 +45,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
); );
} }
public override async Task<TEntity> InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) public async override Task<TEntity> InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default)
{ {
CheckAndSetId(entity); CheckAndSetId(entity);
@ -59,7 +59,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
return savedEntity; return savedEntity;
} }
public override async Task<TEntity> UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) public async override Task<TEntity> UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default)
{ {
DbContext.Attach(entity); DbContext.Attach(entity);
@ -73,7 +73,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
return updatedEntity; return updatedEntity;
} }
public override async Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) public async override Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default)
{ {
DbSet.Remove(entity); DbSet.Remove(entity);
@ -83,19 +83,19 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
} }
} }
public override async Task<List<TEntity>> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) public async override Task<List<TEntity>> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default)
{ {
return includeDetails return includeDetails
? await WithDetails().ToListAsync(GetCancellationToken(cancellationToken)) ? await WithDetails().ToListAsync(GetCancellationToken(cancellationToken))
: await DbSet.ToListAsync(GetCancellationToken(cancellationToken)); : await DbSet.ToListAsync(GetCancellationToken(cancellationToken));
} }
public override async Task<long> GetCountAsync(CancellationToken cancellationToken = default) public async override Task<long> GetCountAsync(CancellationToken cancellationToken = default)
{ {
return await DbSet.LongCountAsync(GetCancellationToken(cancellationToken)); return await DbSet.LongCountAsync(GetCancellationToken(cancellationToken));
} }
public override async Task<List<TEntity>> GetPagedListAsync( public async override Task<List<TEntity>> GetPagedListAsync(
int skipCount, int skipCount,
int maxResultCount, int maxResultCount,
string sorting, string sorting,
@ -115,7 +115,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
return DbSet.AsQueryable(); return DbSet.AsQueryable();
} }
public override async Task<TEntity> FindAsync( public async override Task<TEntity> FindAsync(
Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, bool>> predicate,
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -129,7 +129,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
.SingleOrDefaultAsync(GetCancellationToken(cancellationToken)); .SingleOrDefaultAsync(GetCancellationToken(cancellationToken));
} }
public override async Task DeleteAsync(Expression<Func<TEntity, bool>> predicate, bool autoSave = false, CancellationToken cancellationToken = default) public async override Task DeleteAsync(Expression<Func<TEntity, bool>> predicate, bool autoSave = false, CancellationToken cancellationToken = default)
{ {
var entities = await GetQueryable() var entities = await GetQueryable()
.Where(predicate) .Where(predicate)

2
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs

@ -148,7 +148,7 @@ namespace Volo.Abp.EntityFrameworkCore
} }
} }
public override async Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default) public async override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
{ {
try try
{ {

2
framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs

@ -146,7 +146,7 @@ namespace Volo.Abp.EventBus.Kafka
GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear()); GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear());
} }
public override async Task PublishAsync(Type eventType, object eventData) public async override Task PublishAsync(Type eventType, object eventData)
{ {
var eventName = EventNameAttribute.GetNameOrDefault(eventType); var eventName = EventNameAttribute.GetNameOrDefault(eventType);
var body = Serializer.Serialize(eventData); var body = Serializer.Serialize(eventData);

2
framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs

@ -124,7 +124,7 @@ namespace Volo.Abp.EventBus.Rebus
return Subscribe(typeof(TEvent), handler); return Subscribe(typeof(TEvent), handler);
} }
public override async Task PublishAsync(Type eventType, object eventData) public async override Task PublishAsync(Type eventType, object eventData)
{ {
await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData); await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData);
} }

2
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs

@ -117,7 +117,7 @@ namespace Volo.Abp.EventBus.Local
GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear()); GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear());
} }
public override async Task PublishAsync(Type eventType, object eventData) public async override Task PublishAsync(Type eventType, object eventData)
{ {
var exceptions = new List<Exception>(); var exceptions = new List<Exception>();

4
framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs

@ -18,7 +18,7 @@ namespace Volo.Abp.Features
PrincipalAccessor = principalAccessor; PrincipalAccessor = principalAccessor;
} }
public override async Task<string> GetOrNullAsync(FeatureDefinition feature) public async override Task<string> GetOrNullAsync(FeatureDefinition feature)
{ {
var editionId = PrincipalAccessor.Principal?.FindEditionId(); var editionId = PrincipalAccessor.Principal?.FindEditionId();
if (editionId == null) if (editionId == null)
@ -29,4 +29,4 @@ namespace Volo.Abp.Features
return await FeatureStore.GetOrNullAsync(feature.Name, Name, editionId.Value.ToString()); return await FeatureStore.GetOrNullAsync(feature.Name, Name, editionId.Value.ToString());
} }
} }
} }

6
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs

@ -34,8 +34,8 @@ namespace Volo.Abp.Features
true true
); );
} }
public override async Task<string> GetOrNullAsync(string name) public async override Task<string> GetOrNullAsync(string name)
{ {
var featureDefinition = FeatureDefinitionManager.Get(name); var featureDefinition = FeatureDefinitionManager.Get(name);
var providers = Enumerable var providers = Enumerable
@ -65,4 +65,4 @@ namespace Volo.Abp.Features
return null; return null;
} }
} }
} }

2
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs

@ -15,7 +15,7 @@ namespace Volo.Abp.Features
_methodInvocationFeatureCheckerService = methodInvocationFeatureCheckerService; _methodInvocationFeatureCheckerService = methodInvocationFeatureCheckerService;
} }
public override async Task InterceptAsync(IAbpMethodInvocation invocation) public async override Task InterceptAsync(IAbpMethodInvocation invocation)
{ {
if (AbpCrossCuttingConcerns.IsApplied(invocation.TargetObject, AbpCrossCuttingConcerns.FeatureChecking)) if (AbpCrossCuttingConcerns.IsApplied(invocation.TargetObject, AbpCrossCuttingConcerns.FeatureChecking))
{ {

6
framework/src/Volo.Abp.Features/Volo/Abp/Features/TenantFeatureValueProvider.cs

@ -10,16 +10,16 @@ namespace Volo.Abp.Features
public override string Name => ProviderName; public override string Name => ProviderName;
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
public TenantFeatureValueProvider(IFeatureStore featureStore, ICurrentTenant currentTenant) public TenantFeatureValueProvider(IFeatureStore featureStore, ICurrentTenant currentTenant)
: base(featureStore) : base(featureStore)
{ {
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
} }
public override async Task<string> GetOrNullAsync(FeatureDefinition feature) public async override Task<string> GetOrNullAsync(FeatureDefinition feature)
{ {
return await FeatureStore.GetOrNullAsync(feature.Name, Name, CurrentTenant.Id?.ToString()); return await FeatureStore.GetOrNullAsync(feature.Name, Name, CurrentTenant.Id?.ToString());
} }
} }
} }

2
framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs

@ -19,7 +19,7 @@ namespace Volo.Abp.Http.Client.IdentityModel.Web
{ {
} }
public override async Task Authenticate(RemoteServiceHttpClientAuthenticateContext context) public async override Task Authenticate(RemoteServiceHttpClientAuthenticateContext context)
{ {
if (context.RemoteService.GetUseCurrentAccessToken() != false) if (context.RemoteService.GetUseCurrentAccessToken() != false)
{ {

2
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs

@ -75,7 +75,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
Logger = NullLogger<DynamicHttpProxyInterceptor<TService>>.Instance; Logger = NullLogger<DynamicHttpProxyInterceptor<TService>>.Instance;
} }
public override async Task InterceptAsync(IAbpMethodInvocation invocation) public async override Task InterceptAsync(IAbpMethodInvocation invocation)
{ {
if (invocation.Method.ReturnType.GenericTypeArguments.IsNullOrEmpty()) if (invocation.Method.ReturnType.GenericTypeArguments.IsNullOrEmpty())
{ {

2
framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs

@ -28,7 +28,7 @@ namespace Volo.Abp.MailKit
SmtpConfiguration = smtpConfiguration; SmtpConfiguration = smtpConfiguration;
} }
protected override async Task SendEmailAsync(MailMessage mail) protected async override Task SendEmailAsync(MailMessage mail)
{ {
using (var client = await BuildClientAsync()) using (var client = await BuildClientAsync())
{ {

8
framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs

@ -170,7 +170,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
return Task.FromResult(GetQueryable().Where(predicate).SingleOrDefault()); return Task.FromResult(GetQueryable().Where(predicate).SingleOrDefault());
} }
public override async Task DeleteAsync( public async override Task DeleteAsync(
Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, bool>> predicate,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -182,7 +182,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
} }
} }
public override async Task<TEntity> InsertAsync( public async override Task<TEntity> InsertAsync(
TEntity entity, TEntity entity,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -194,7 +194,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
return entity; return entity;
} }
public override async Task<TEntity> UpdateAsync( public async override Task<TEntity> UpdateAsync(
TEntity entity, TEntity entity,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -218,7 +218,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
return entity; return entity;
} }
public override async Task DeleteAsync( public async override Task DeleteAsync(
TEntity entity, TEntity entity,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)

16
framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs

@ -55,7 +55,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
GuidGenerator = SimpleGuidGenerator.Instance; GuidGenerator = SimpleGuidGenerator.Instance;
} }
public override async Task<TEntity> InsertAsync( public async override Task<TEntity> InsertAsync(
TEntity entity, TEntity entity,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -81,7 +81,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
return entity; return entity;
} }
public override async Task<TEntity> UpdateAsync( public async override Task<TEntity> UpdateAsync(
TEntity entity, TEntity entity,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -131,7 +131,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
return entity; return entity;
} }
public override async Task DeleteAsync( public async override Task DeleteAsync(
TEntity entity, TEntity entity,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -194,17 +194,17 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
} }
} }
public override async Task<List<TEntity>> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) public async override Task<List<TEntity>> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable().ToListAsync(GetCancellationToken(cancellationToken)); return await GetMongoQueryable().ToListAsync(GetCancellationToken(cancellationToken));
} }
public override async Task<long> GetCountAsync(CancellationToken cancellationToken = default) public async override Task<long> GetCountAsync(CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable().LongCountAsync(GetCancellationToken(cancellationToken)); return await GetMongoQueryable().LongCountAsync(GetCancellationToken(cancellationToken));
} }
public override async Task<List<TEntity>> GetPagedListAsync( public async override Task<List<TEntity>> GetPagedListAsync(
int skipCount, int skipCount,
int maxResultCount, int maxResultCount,
string sorting, string sorting,
@ -218,7 +218,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public override async Task DeleteAsync( public async override Task DeleteAsync(
Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, bool>> predicate,
bool autoSave = false, bool autoSave = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -238,7 +238,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
return GetMongoQueryable(); return GetMongoQueryable();
} }
public override async Task<TEntity> FindAsync( public async override Task<TEntity> FindAsync(
Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, bool>> predicate,
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)

6
framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs

@ -10,16 +10,16 @@ namespace Volo.Abp.Settings
public override string Name => ProviderName; public override string Name => ProviderName;
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
public TenantSettingValueProvider(ISettingStore settingStore, ICurrentTenant currentTenant) public TenantSettingValueProvider(ISettingStore settingStore, ICurrentTenant currentTenant)
: base(settingStore) : base(settingStore)
{ {
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
} }
public override async Task<string> GetOrNullAsync(SettingDefinition setting) public async override Task<string> GetOrNullAsync(SettingDefinition setting)
{ {
return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentTenant.Id?.ToString()); return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentTenant.Id?.ToString());
} }
} }
} }

4
framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs

@ -17,7 +17,7 @@ namespace Volo.Abp.Settings
CurrentUser = currentUser; CurrentUser = currentUser;
} }
public override async Task<string> GetOrNullAsync(SettingDefinition setting) public async override Task<string> GetOrNullAsync(SettingDefinition setting)
{ {
if (CurrentUser.Id == null) if (CurrentUser.Id == null)
{ {
@ -27,4 +27,4 @@ namespace Volo.Abp.Settings
return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentUser.Id.ToString()); return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentUser.Id.ToString());
} }
} }
} }

2
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs

@ -18,7 +18,7 @@ namespace Volo.Abp.Uow
_defaultOptions = options.Value; _defaultOptions = options.Value;
} }
public override async Task InterceptAsync(IAbpMethodInvocation invocation) public async override Task InterceptAsync(IAbpMethodInvocation invocation)
{ {
if (!UnitOfWorkHelper.IsUnitOfWorkMethod(invocation.Method, out var unitOfWorkAttribute)) if (!UnitOfWorkHelper.IsUnitOfWorkMethod(invocation.Method, out var unitOfWorkAttribute))
{ {

2
framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs

@ -13,7 +13,7 @@ namespace Volo.Abp.Validation
_methodInvocationValidator = methodInvocationValidator; _methodInvocationValidator = methodInvocationValidator;
} }
public override async Task InterceptAsync(IAbpMethodInvocation invocation) public async override Task InterceptAsync(IAbpMethodInvocation invocation)
{ {
Validate(invocation); Validate(invocation);
await invocation.ProceedAsync(); await invocation.ProceedAsync();

4
framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/AbpBlobStoringMinioTestModule.cs

@ -60,7 +60,7 @@ namespace Volo.Abp.BlobStoring.Minio
}); });
} }
public override async void OnApplicationShutdown(ApplicationShutdownContext context) public async override void OnApplicationShutdown(ApplicationShutdownContext context)
{ {
var minioClient = new MinioClient(_endPoint, _accessKey, _secretKey); var minioClient = new MinioClient(_endPoint, _accessKey, _secretKey);
if (await minioClient.BucketExistsAsync(_randomContainerName)) if (await minioClient.BucketExistsAsync(_randomContainerName))
@ -74,7 +74,7 @@ namespace Volo.Abp.BlobStoring.Minio
await minioClient.RemoveBucketAsync(_randomContainerName); await minioClient.RemoveBucketAsync(_randomContainerName);
} }
} }
} }

4
framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleAsyncInterceptor.cs

@ -5,7 +5,7 @@ namespace Volo.Abp.DynamicProxy
{ {
public class SimpleAsyncInterceptor : AbpInterceptor public class SimpleAsyncInterceptor : AbpInterceptor
{ {
public override async Task InterceptAsync(IAbpMethodInvocation invocation) public async override Task InterceptAsync(IAbpMethodInvocation invocation)
{ {
await Task.Delay(5); await Task.Delay(5);
(invocation.TargetObject as ICanLogOnObject)?.Logs?.Add($"{GetType().Name}_InterceptAsync_BeforeInvocation"); (invocation.TargetObject as ICanLogOnObject)?.Logs?.Add($"{GetType().Name}_InterceptAsync_BeforeInvocation");
@ -14,4 +14,4 @@ namespace Volo.Abp.DynamicProxy
await Task.Delay(5); await Task.Delay(5);
} }
} }
} }

4
framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleResultCacheTestInterceptor.cs

@ -12,8 +12,8 @@ namespace Volo.Abp.DynamicProxy
{ {
_cache = new ConcurrentDictionary<MethodInfo, object>(); _cache = new ConcurrentDictionary<MethodInfo, object>();
} }
public override async Task InterceptAsync(IAbpMethodInvocation invocation) public async override Task InterceptAsync(IAbpMethodInvocation invocation)
{ {
if (_cache.ContainsKey(invocation.Method)) if (_cache.ContainsKey(invocation.Method))
{ {

2
framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs

@ -51,7 +51,7 @@ namespace Volo.Abp.MongoDB.Repositories
} }
[Fact] [Fact]
public override async Task InsertAsync() public async override Task InsertAsync()
{ {
var person = new Person(Guid.NewGuid(), "New Person", 35); var person = new Person(Guid.NewGuid(), "New Person", 35);
person.Phones.Add(new Phone(person.Id, "1234567890")); person.Phones.Add(new Phone(person.Id, "1234567890"));

4
framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs

@ -15,12 +15,12 @@ namespace Volo.Abp.TestApp.Application
{ {
} }
protected override async Task DeleteByIdAsync(DistrictKey id) protected async override Task DeleteByIdAsync(DistrictKey id)
{ {
await Repository.DeleteAsync(d => d.CityId == id.CityId && d.Name == id.Name); await Repository.DeleteAsync(d => d.CityId == id.CityId && d.Name == id.Name);
} }
protected override async Task<District> GetEntityByIdAsync(DistrictKey id) protected async override Task<District> GetEntityByIdAsync(DistrictKey id)
{ {
return await AsyncExecuter.FirstOrDefaultAsync( return await AsyncExecuter.FirstOrDefaultAsync(
Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name) Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name)

2
modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor.cs

@ -17,7 +17,7 @@ namespace Volo.Abp.Account.Blazor.Pages.Account
protected PersonalInfoModel PersonalInfoModel; protected PersonalInfoModel PersonalInfoModel;
protected override async Task OnInitializedAsync() protected async override Task OnInitializedAsync()
{ {
await GetUserInformations(); await GetUserInformations();
} }

6
modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs

@ -43,7 +43,7 @@ namespace Volo.Abp.Account.Web.Pages.Account
IdentityServerEvents = identityServerEvents; IdentityServerEvents = identityServerEvents;
} }
public override async Task<IActionResult> OnGetAsync() public async override Task<IActionResult> OnGetAsync()
{ {
LoginInput = new LoginInputModel(); LoginInput = new LoginInputModel();
@ -98,7 +98,7 @@ namespace Volo.Abp.Account.Web.Pages.Account
return Page(); return Page();
} }
public override async Task<IActionResult> OnPostAsync(string action) public async override Task<IActionResult> OnPostAsync(string action)
{ {
if (action == "Cancel") if (action == "Cancel")
{ {
@ -173,7 +173,7 @@ namespace Volo.Abp.Account.Web.Pages.Account
return RedirectSafely(ReturnUrl, ReturnUrlHash); return RedirectSafely(ReturnUrl, ReturnUrlHash);
} }
public override async Task<IActionResult> OnPostExternalLogin(string provider) public async override Task<IActionResult> OnPostExternalLogin(string provider)
{ {
if (AccountOptions.WindowsAuthenticationSchemeName == provider) if (AccountOptions.WindowsAuthenticationSchemeName == provider)
{ {

2
modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLogoutModel.cs

@ -18,7 +18,7 @@ namespace Volo.Abp.Account.Web.Pages.Account
Interaction = interaction; Interaction = interaction;
} }
public override async Task<IActionResult> OnGetAsync() public async override Task<IActionResult> OnGetAsync()
{ {
await IdentitySecurityLogManager.SaveAsync(new IdentitySecurityLogContext() await IdentitySecurityLogManager.SaveAsync(new IdentitySecurityLogContext()
{ {

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save