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