Browse Source

Merge branch 'dev' into berkan/include-ABP-book

pull/11482/head
berkansasmaz 5 years ago
parent
commit
735e2b88ed
No known key found for this signature in database GPG Key ID: 884D815C3F32BE00
  1. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
  2. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
  3. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
  4. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
  5. 2
      docs/en/Blog-Posts/2022-01-11 v5_1_Release_Stable/POST.md
  6. 2
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs
  7. 15
      framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs
  8. 13
      framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs
  9. 22
      framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventHandlerStep.cs
  10. 10
      framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs
  11. 13
      framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs
  12. 2
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs
  13. 95
      framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/AppUrlProvider_Tests.cs
  14. 8
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor
  15. 6
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LoginDisplay.razor
  16. 2
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/Branding.razor
  17. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml
  18. 7
      npm/ng-packs/packages/core/src/lib/services/localization.service.ts
  19. 16
      npm/ng-packs/packages/theme-shared/src/lib/handlers/document-dir.handler.ts
  20. 4
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Pages/Index.razor
  21. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Pages/_Host.cshtml
  22. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj
  23. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs
  24. 1
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj
  25. 2
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs

2
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json

@ -19,6 +19,8 @@
"Developers": "Developers",
"LicenseType": "License type",
"Manage": "Manage",
"SetDefault": "Set as default",
"DefaultOrganization": "Default",
"StartDate": "Start date",
"EndDate": "End date",
"Modules": "Modules",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json

@ -18,6 +18,8 @@
"Developers": "Yazılımcılar",
"LicenseType": "lisans türü",
"Manage": "Yönet",
"SetDefault": "Varsayılan olarak ayarla",
"DefaultOrganization": "Varsayılan",
"StartDate": "Başlangıç tarihi",
"EndDate": "bitiş tarihi",
"Modules": "Modüller",
@ -395,4 +397,4 @@
"ExtendNow": "Şimdi Uzat",
"ContinueWithNewOrganization": "Yeni bir organizasyon ile devam et"
}
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json

@ -18,6 +18,8 @@
"Developers": "开发者",
"LicenseType": "许可类型",
"Manage": "管理",
"SetDefault": "设为默认",
"DefaultOrganization": "默认",
"StartDate": "开始日期",
"EndDate": "结束日期",
"Modules": "模块",
@ -391,4 +393,4 @@
"TrialLicenseExpiredInfo": "您的试用许可期限已过!",
"CommercialNewsletterConfirmationMessage": "我同意<a href=\"https://commercial.abp.io/TermsConditions\">条款和条件</a>和<a href=\"https://commercial.abp.io/Privacy\">隐私政策</a>。"
}
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json

@ -18,6 +18,8 @@
"Developers": "開發者",
"LicenseType": "許可證類型",
"Manage": "管理",
"SetDefault": "設爲默認",
"DefaultOrganization": "默認",
"StartDate": "開始日期",
"EndDate": "結束日期",
"Modules": "模組",
@ -391,4 +393,4 @@
"TrialLicenseExpiredInfo": "您的試用許可期限已過!",
"CommercialNewsletterConfirmationMessage": "我同意<a href=\"https://commercial.abp.io/TermsConditions\">條款和條件</a>和<a href=\"https://commercial.abp.io/Privacy\">隱私政策</a>。"
}
}
}

2
docs/en/Blog-Posts/2022-01-11 v5_1_Release_Stable/POST.md

@ -104,6 +104,8 @@ Here are some other notable changes that come with this release:
* Support markdown in [CMS-Kit comments ](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Comments)feature ([#10792](https://github.com/abpframework/abp/pull/10792))
* Used file scoped namespaces for all the ABP Framework source code :) ([#10552](https://github.com/abpframework/abp/pull/10696))
* Developers should control `EnableLegacyTimestampBehavior` when using PostgreSQL. [#11371](https://github.com/abpframework/abp/pull/11371) [#65](https://github.com/abpframework/eShopOnAbp/pull/65)
All issues & PRs in [5.1 milesone](https://github.com/abpframework/abp/milestone/60?closed=1).

2
framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs

@ -166,7 +166,7 @@ public abstract class AbpComponentBase : OwningComponentBase
return localizer;
}
protected async Task HandleErrorAsync(Exception exception)
protected virtual async Task HandleErrorAsync(Exception exception)
{
Logger.LogException(exception);
await InvokeAsync(async () =>

15
framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs

@ -1,5 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
using Rebus.Handlers;
using Rebus.Pipeline;
using Rebus.Pipeline.Receive;
using Rebus.ServiceProvider;
using Volo.Abp.Modularity;
@ -21,6 +23,17 @@ public class AbpEventBusRebusModule : AbpModule
context.Services.AddRebus(configure =>
{
configure.Options(options =>
{
options.Decorate<IPipeline>(d =>
{
var step = new AbpRebusEventHandlerStep();
var pipeline = d.Get<IPipeline>();
return new PipelineStepInjector(pipeline).OnReceive(step, PipelineRelativePosition.After, typeof(ActivateHandlersStep));
});
});
preActions.Configure().Configurer?.Invoke(configure);
return configure;
});
@ -35,4 +48,4 @@ public class AbpEventBusRebusModule : AbpModule
.GetRequiredService<RebusDistributedEventBus>()
.Initialize();
}
}
}

13
framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs

@ -20,24 +20,13 @@ public class AbpRebusEventBusOptions
}
private Action<RebusConfigurer> _configurer;
[NotNull]
public Func<IBus, Type, object, Task> Publish {
get => _publish;
set => _publish = Check.NotNull(value, nameof(value));
}
private Func<IBus, Type, object, Task> _publish;
public Func<IBus, Type, object, Task> Publish { get; set; }
public AbpRebusEventBusOptions()
{
_publish = DefaultPublish;
_configurer = DefaultConfigure;
}
private async Task DefaultPublish(IBus bus, Type eventType, object eventData)
{
await bus.Advanced.Routing.Send(InputQueueName, eventData);
}
private void DefaultConfigure(RebusConfigurer configure)
{
configure.Subscriptions(s => s.StoreInMemory());

22
framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventHandlerStep.cs

@ -0,0 +1,22 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Rebus.Messages;
using Rebus.Pipeline;
using Rebus.Pipeline.Receive;
namespace Volo.Abp.EventBus.Rebus;
public class AbpRebusEventHandlerStep : IIncomingStep
{
public Task Process(IncomingStepContext context, Func<Task> next)
{
var message = context.Load<Message>();
var handlerInvokers = context.Load<HandlerInvokers>().ToList();
handlerInvokers.RemoveAll(x => x.Handler.GetType() == typeof(RebusDistributedEventHandlerAdapter<object>));
context.Save(new HandlerInvokers(message, handlerInvokers));
return next();
}
}

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

@ -148,9 +148,15 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen
await TriggerHandlersAsync(eventType, eventData);
}
protected override async Task PublishToEventBusAsync(Type eventType, object eventData)
protected async override Task PublishToEventBusAsync(Type eventType, object eventData)
{
await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData);
if (AbpRebusEventBusOptions.Publish != null)
{
await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData);
return;
}
await Rebus.Publish(eventData);
}
protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord)

13
framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs

@ -51,6 +51,12 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention
foreach (var controller in GetClientProxyControllers(application))
{
if (ShouldBeRemove(application, controller))
{
application.Controllers.Remove(controller);
continue;
}
controller.ControllerName = controller.ControllerName.RemovePostFix("ClientProxy");
var controllerApiDescription = FindControllerApiDescriptionModel(controller);
@ -66,6 +72,13 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention
}
}
protected virtual bool ShouldBeRemove(ApplicationModel application, ControllerModel controllerModel)
{
return application.Controllers
.Where(x => x.ControllerType != controllerModel.ControllerType)
.Any(x => FindAppServiceInterfaceType(x) == FindAppServiceInterfaceType(controllerModel));
}
protected virtual void ConfigureClientProxySelector(ControllerModel controller)
{
RemoveEmptySelectors(controller.Selectors);

2
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs

@ -86,7 +86,7 @@ public class AppUrlProvider : IAppUrlProvider, ITransientDependency
{
if (CurrentTenant.Id.HasValue)
{
url = url.Replace(tenantNamePlaceHolder, await GetCurrentTenantNameAsync());
url = url.Replace(tenantNamePlaceHolder, await GetCurrentTenantNameAsync() + ".");
}
else
{

95
framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/AppUrlProvider_Tests.cs

@ -0,0 +1,95 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Testing;
using Volo.Abp.UI.Navigation.Urls;
using Xunit;
namespace Volo.Abp.UI.Navigation;
public class AppUrlProvider_Tests : AbpIntegratedTest<AbpUiNavigationTestModule>
{
private readonly IAppUrlProvider _appUrlProvider;
private readonly ICurrentTenant _currentTenant;
public AppUrlProvider_Tests()
{
_appUrlProvider = ServiceProvider.GetRequiredService<AppUrlProvider>();
_currentTenant = ServiceProvider.GetRequiredService<ICurrentTenant>();
}
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.UseAutofac();
}
protected override void AfterAddApplication(IServiceCollection services)
{
services.Configure<AppUrlOptions>(options =>
{
options.Applications["MVC"].RootUrl = "https://{{tenantName}}.abp.io";
options.Applications["MVC"].Urls["PasswordReset"] = "account/reset-password";
options.RedirectAllowedUrls.AddRange(new List<string>()
{
"https://wwww.volosoft.com",
"https://wwww.aspnetzero.com"
});
options.Applications["BLAZOR"].RootUrl = "https://{{tenantId}}.abp.io";
options.Applications["BLAZOR"].Urls["PasswordReset"] = "account/reset-password";
});
}
[Fact]
public async Task GetUrlAsync()
{
using (_currentTenant.Change(null))
{
var url = await _appUrlProvider.GetUrlAsync("MVC");
url.ShouldBe("https://abp.io");
url = await _appUrlProvider.GetUrlAsync("MVC", "PasswordReset");
url.ShouldBe("https://abp.io/account/reset-password");
}
using (_currentTenant.Change(Guid.NewGuid(), "community"))
{
var url = await _appUrlProvider.GetUrlAsync("MVC");
url.ShouldBe("https://community.abp.io");
url = await _appUrlProvider.GetUrlAsync("MVC", "PasswordReset");
url.ShouldBe("https://community.abp.io/account/reset-password");
}
var tenantId = Guid.NewGuid();
using (_currentTenant.Change(tenantId))
{
var url = await _appUrlProvider.GetUrlAsync("BLAZOR");
url.ShouldBe($"https://{tenantId}.abp.io");
url = await _appUrlProvider.GetUrlAsync("BLAZOR", "PasswordReset");
url.ShouldBe($"https://{tenantId}.abp.io/account/reset-password");
}
await Assert.ThrowsAsync<AbpException>(async () =>
{
await _appUrlProvider.GetUrlAsync("ANGULAR");
});
}
[Fact]
public async Task GetUrlOrNullAsync()
{
(await _appUrlProvider.GetUrlOrNullAsync("ANGULAR")).ShouldBeNull();
}
[Fact]
public void IsRedirectAllowedUrl()
{
_appUrlProvider.IsRedirectAllowedUrl("https://community.abp.io").ShouldBeFalse();
_appUrlProvider.IsRedirectAllowedUrl("https://wwww.volosoft.com").ShouldBeTrue();
}
}

8
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor

@ -30,7 +30,7 @@
CultureInfo.CurrentCulture.Name,
CultureInfo.CurrentUICulture.Name
);
if (currentLanguage == null)
{
var localizationOptions = await RequestLocalizationOptionsProvider.GetLocalizationOptionsAsync();
@ -56,10 +56,10 @@
private void ChangeLanguage(LanguageInfo language)
{
var relativeUrl = NavigationManager.Uri.RemovePreFix(NavigationManager.BaseUri).EnsureStartsWith('/');
var relativeUrl = NavigationManager.Uri.RemovePreFix(NavigationManager.BaseUri).EnsureStartsWith('/').EnsureStartsWith('~');
NavigationManager.NavigateTo(
$"/Abp/Languages/Switch?culture={language.CultureName}&uiCulture={language.UiCultureName}&returnUrl={relativeUrl}",
$"Abp/Languages/Switch?culture={language.CultureName}&uiCulture={language.UiCultureName}&returnUrl={relativeUrl}",
forceLoad: true
);
}

6
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LoginDisplay.razor

@ -26,13 +26,13 @@
{
@foreach (var menuItem in Menu.Items)
{
<a class="dropdown-item" href="@menuItem.Url?.TrimStart('~')" target="@menuItem.Target">@menuItem.DisplayName</a>
<a class="dropdown-item" href="@menuItem.Url?.TrimStart('/', '~')" target="@menuItem.Target">@menuItem.DisplayName</a>
}
}
</DropdownMenu>
</Dropdown>
</Authorized>
<NotAuthorized>
<a class="nav-link" href="/Account/Login">@L["Login"]</a>
<a class="nav-link" href="Account/Login">@L["Login"]</a>
</NotAuthorized>
</AuthorizeView>
</AuthorizeView>

2
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/Branding.razor

@ -3,7 +3,7 @@
<a class="navbar-brand" href="">
@if (!BrandingProvider.LogoUrl.IsNullOrWhiteSpace())
{
<img src="@BrandingProvider.LogoUrl" alt="@BrandingProvider.AppName" >
<img src="@BrandingProvider.LogoUrl.TrimStart('/', '~')" alt="@BrandingProvider.AppName">
}
@BrandingProvider.AppName
</a>

2
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml

@ -25,7 +25,7 @@
<h4>@group.DisplayName</h4>
<hr class="mt-2 mb-3"/>
<div class="w-100" style="max-height: 640px;overflow-y: auto">
<div class="pl-1 pt-1">
<div class="ps-1 pt-1">
<abp-input asp-for="@group.IsAllPermissionsGranted"
check-box-hidden-input-render-mode="CheckBoxHiddenInputRenderMode.None"
name="SelectAllInThisTab"

7
npm/ng-packs/packages/core/src/lib/services/localization.service.ts

@ -25,11 +25,18 @@ export class LocalizationService {
/**
* Returns currently selected language
* Even though this looks like it's redundant to return the same value as `getLanguage()`,
* it's actually not. This could be invoked any time, and the latestLang could be different from the
* sessionState.getLanguage() value.
*/
get currentLang(): string {
return this.latestLang || this.sessionState.getLanguage();
}
get currentLang$(): Observable<string> {
return this.sessionState.getLanguage$();
}
get languageChange$(): Observable<string> {
return this._languageChange$.asObservable();
}

16
npm/ng-packs/packages/theme-shared/src/lib/handlers/document-dir.handler.ts

@ -1,7 +1,7 @@
import { getLocaleDirection, LocalizationService } from '@abp/ng.core';
import { Injectable, Injector } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { map, startWith } from 'rxjs/operators';
import { map } from 'rxjs/operators';
import { LocaleDirection } from '../models/common';
@Injectable()
@ -14,17 +14,11 @@ export class DocumentDirHandlerService {
private listenToLanguageChanges() {
const l10n = this.injector.get(LocalizationService);
// will always listen, no need to unsubscribe
l10n.languageChange$
.pipe(
startWith(l10n.currentLang),
map(locale => getLocaleDirection(locale)),
)
.subscribe(dir => {
this.dir.next(dir);
this.setBodyDir(dir);
});
l10n.currentLang$.pipe(map(locale => getLocaleDirection(locale))).subscribe(dir => {
this.dir.next(dir);
this.setBodyDir(dir);
});
}
private setBodyDir(dir: LocaleDirection) {

4
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Pages/Index.razor

@ -12,10 +12,10 @@
<h1>Welcome to the Application</h1>
<p class="lead px-lg-5 mx-lg-5">@L["LongWelcomeMessage"]</p>
@if (!CurrentUser.IsAuthenticated)
{
<a class="btn btn-primary" href="/Account/Login" ><i class="fa fa-sign-in"></i> @L["Login"]</a>
<a class="btn btn-primary" href="Account/Login" ><i class="fa fa-sign-in"></i> @L["Login"]</a>
}
</div>

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Pages/_Host.cshtml

@ -16,7 +16,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>MyCompanyName.MyProjectName.Blazor.Server</title>
<base href="~/" />
<abp-style-bundle name="@BlazorBasicThemeBundles.Styles.Global" />
</head>
<body class="abp-application-layout bg-light @rtl">

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj

@ -25,6 +25,7 @@
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Caching.StackExchangeRedis\Volo.Abp.Caching.StackExchangeRedis.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Mvc.Client\Volo.Abp.AspNetCore.Mvc.Client.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Authentication.OpenIdConnect\Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Http.Client.Web\Volo.Abp.Http.Client.Web.csproj" />
<ProjectReference Include="..\..\..\..\..\modules\basic-theme\src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Serilog\Volo.Abp.AspNetCore.Serilog.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Http.Client.IdentityModel.Web\Volo.Abp.Http.Client.IdentityModel.Web.csproj" />

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs

@ -29,6 +29,7 @@ using Volo.Abp.AutoMapper;
using Volo.Abp.Caching;
using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Abp.Http.Client.IdentityModel.Web;
using Volo.Abp.Http.Client.Web;
using Volo.Abp.Identity.Web;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
@ -48,6 +49,7 @@ namespace MyCompanyName.MyProjectName.Web;
typeof(MyProjectNameHttpApiModule),
typeof(AbpAspNetCoreAuthenticationOpenIdConnectModule),
typeof(AbpAspNetCoreMvcClientModule),
typeof(AbpHttpClientWebModule),
typeof(AbpAspNetCoreMvcUiBasicThemeModule),
typeof(AbpAutofacModule),
typeof(AbpCachingStackExchangeRedisModule),

1
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj

@ -19,6 +19,7 @@
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Mvc.Client\Volo.Abp.AspNetCore.Mvc.Client.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Authentication.OpenIdConnect\Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Http.Client.IdentityModel.Web\Volo.Abp.Http.Client.IdentityModel.Web.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Http.Client.Web\Volo.Abp.Http.Client.Web.csproj" />
<ProjectReference Include="..\..\..\..\..\modules\basic-theme\src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Swashbuckle\Volo.Abp.Swashbuckle.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Http.Client.Web\Volo.Abp.Http.Client.Web.csproj" />

2
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs

@ -36,6 +36,7 @@ using Volo.Abp.FeatureManagement;
using Volo.Abp.Http.Client.IdentityModel.Web;
using Volo.Abp.Identity;
using Volo.Abp.Identity.Web;
using Volo.Abp.Http.Client.Web;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.PermissionManagement;
@ -57,6 +58,7 @@ namespace MyCompanyName.MyProjectName;
typeof(MyProjectNameHttpApiModule),
typeof(AbpAspNetCoreAuthenticationOpenIdConnectModule),
typeof(AbpAspNetCoreMvcClientModule),
typeof(AbpHttpClientWebModule),
typeof(AbpAspNetCoreMvcUiBasicThemeModule),
typeof(AbpAutofacModule),
typeof(AbpCachingStackExchangeRedisModule),

Loading…
Cancel
Save