mirror of https://github.com/abpframework/abp.git
6 changed files with 215 additions and 72 deletions
@ -0,0 +1,23 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<Import Project="..\..\..\configureawait.props" /> |
||||
|
<Import Project="..\..\..\common.props" /> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFramework>net7.0</TargetFramework> |
||||
|
<Nullable>enable</Nullable> |
||||
|
<WarningsAsErrors>Nullable</WarningsAsErrors> |
||||
|
<AssemblyName>Volo.Abp.MailKit</AssemblyName> |
||||
|
<PackageId>Volo.Abp.MailKit</PackageId> |
||||
|
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> |
||||
|
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
||||
|
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
||||
|
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
||||
|
<RootNamespace /> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\Volo.Abp.AspNetCore.Mvc.Client.Common\Volo.Abp.AspNetCore.Mvc.Client.Common.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
||||
@ -0,0 +1,19 @@ |
|||||
|
using System; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp.AspNetCore.Mvc.Client; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.Modularity; |
||||
|
|
||||
|
namespace Volo.Abp.Maui.Client; |
||||
|
|
||||
|
[DependsOn( |
||||
|
typeof(AbpAspNetCoreMvcClientCommonModule) |
||||
|
)] |
||||
|
public class AbpMauiClientModule : AbpModule |
||||
|
{ |
||||
|
public async Task OnApplicationInitializationAsync(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
await context.ServiceProvider.GetRequiredService<IClientScopeServiceProviderAccessor>().ServiceProvider.GetRequiredService<MauiCachedApplicationConfigurationClient>().InitializeAsync(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,20 @@ |
|||||
|
using System; |
||||
|
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
|
||||
|
namespace Volo.Abp.Maui.Client; |
||||
|
public class ApplicationConfigurationCache : ISingletonDependency |
||||
|
{ |
||||
|
protected ApplicationConfigurationDto? Configuration { get; set; } |
||||
|
public event Action? ApplicationConfigurationChanged; |
||||
|
public virtual ApplicationConfigurationDto? Get() |
||||
|
{ |
||||
|
return Configuration; |
||||
|
} |
||||
|
|
||||
|
public void Set(ApplicationConfigurationDto configuration) |
||||
|
{ |
||||
|
Configuration = configuration; |
||||
|
ApplicationConfigurationChanged?.Invoke(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,75 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
||||
|
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClientProxies; |
||||
|
using Volo.Abp.AspNetCore.Mvc.Client; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.Modularity; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
using Volo.Abp.Threading; |
||||
|
|
||||
|
namespace Volo.Abp.Maui.Client; |
||||
|
|
||||
|
public class MauiCachedApplicationConfigurationClient : |
||||
|
ICachedApplicationConfigurationClient, |
||||
|
ISingletonDependency |
||||
|
{ |
||||
|
protected AbpApplicationConfigurationClientProxy ApplicationConfigurationClientProxy { get; } |
||||
|
protected AbpApplicationLocalizationClientProxy ApplicationLocalizationClientProxy { get; } |
||||
|
protected ApplicationConfigurationCache Cache { get; } |
||||
|
protected ICurrentTenantAccessor CurrentTenantAccessor { get; } |
||||
|
|
||||
|
public MauiCachedApplicationConfigurationClient( |
||||
|
AbpApplicationConfigurationClientProxy applicationConfigurationClientProxy, |
||||
|
AbpApplicationLocalizationClientProxy applicationLocalizationClientProxy, |
||||
|
ApplicationConfigurationCache cache, |
||||
|
ICurrentTenantAccessor currentTenantAccessor) |
||||
|
{ |
||||
|
ApplicationConfigurationClientProxy = applicationConfigurationClientProxy; |
||||
|
ApplicationLocalizationClientProxy = applicationLocalizationClientProxy; |
||||
|
CurrentTenantAccessor = currentTenantAccessor; |
||||
|
Cache = cache; |
||||
|
} |
||||
|
|
||||
|
public virtual async Task<ApplicationConfigurationDto> InitializeAsync() |
||||
|
{ |
||||
|
var configurationDto = await ApplicationConfigurationClientProxy.GetAsync( |
||||
|
new ApplicationConfigurationRequestOptions |
||||
|
{ |
||||
|
IncludeLocalizationResources = false, |
||||
|
}); |
||||
|
|
||||
|
var localizationDto = await ApplicationLocalizationClientProxy.GetAsync( |
||||
|
new ApplicationLocalizationRequestDto |
||||
|
{ |
||||
|
CultureName = configurationDto.Localization.CurrentCulture.Name, |
||||
|
OnlyDynamics = true |
||||
|
} |
||||
|
); |
||||
|
|
||||
|
configurationDto.Localization.Resources = localizationDto.Resources; |
||||
|
|
||||
|
CurrentTenantAccessor.Current = new BasicTenantInfo( |
||||
|
configurationDto.CurrentTenant.Id, |
||||
|
configurationDto.CurrentTenant.Name); |
||||
|
|
||||
|
Cache.Set(configurationDto); |
||||
|
|
||||
|
return configurationDto; |
||||
|
} |
||||
|
|
||||
|
public virtual ApplicationConfigurationDto Get() |
||||
|
{ |
||||
|
return AsyncHelper.RunSync(GetAsync); |
||||
|
} |
||||
|
|
||||
|
public virtual async Task<ApplicationConfigurationDto> GetAsync() |
||||
|
{ |
||||
|
var configurationDto = Cache.Get(); |
||||
|
if (configurationDto is null) |
||||
|
{ |
||||
|
return await InitializeAsync(); |
||||
|
} |
||||
|
|
||||
|
return configurationDto; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue