mirror of https://github.com/abpframework/abp.git
csharpabpc-sharpframeworkblazoraspnet-coredotnet-coreaspnetcorearchitecturesaasdomain-driven-designangularmulti-tenancy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
5.0 KiB
132 lines
5.0 KiB
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Localization;
|
|
using Microsoft.Extensions.Logging;
|
|
using Microsoft.Extensions.Logging.Abstractions;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using Volo.Abp.Aspects;
|
|
using Volo.Abp.Auditing;
|
|
using Volo.Abp.Authorization;
|
|
using Volo.Abp.Data;
|
|
using Volo.Abp.DependencyInjection;
|
|
using Volo.Abp.Features;
|
|
using Volo.Abp.GlobalFeatures;
|
|
using Volo.Abp.Guids;
|
|
using Volo.Abp.Linq;
|
|
using Volo.Abp.Localization;
|
|
using Volo.Abp.MultiTenancy;
|
|
using Volo.Abp.ObjectMapping;
|
|
using Volo.Abp.Settings;
|
|
using Volo.Abp.Timing;
|
|
using Volo.Abp.Uow;
|
|
using Volo.Abp.Users;
|
|
using Volo.Abp.Validation;
|
|
|
|
namespace Volo.Abp.Application.Services;
|
|
|
|
public abstract class ApplicationService :
|
|
IApplicationService,
|
|
IAvoidDuplicateCrossCuttingConcerns,
|
|
IValidationEnabled,
|
|
IUnitOfWorkEnabled,
|
|
IAuditingEnabled,
|
|
IGlobalFeatureCheckingEnabled,
|
|
ITransientDependency
|
|
{
|
|
public IAbpLazyServiceProvider LazyServiceProvider { get; set; } = default!;
|
|
|
|
[Obsolete("Use LazyServiceProvider instead.")]
|
|
public IServiceProvider ServiceProvider { get; set; } = default!;
|
|
|
|
public static string[] CommonPostfixes { get; set; } = { "AppService", "ApplicationService", "Service" };
|
|
|
|
public List<string> AppliedCrossCuttingConcerns { get; } = new();
|
|
|
|
protected IUnitOfWorkManager UnitOfWorkManager => LazyServiceProvider.LazyGetRequiredService<IUnitOfWorkManager>();
|
|
|
|
protected IAsyncQueryableExecuter AsyncExecuter => LazyServiceProvider.LazyGetRequiredService<IAsyncQueryableExecuter>();
|
|
|
|
protected Type? ObjectMapperContext { get; set; }
|
|
protected IObjectMapper ObjectMapper => LazyServiceProvider.LazyGetService<IObjectMapper>(provider =>
|
|
ObjectMapperContext == null
|
|
? provider.GetRequiredService<IObjectMapper>()
|
|
: (IObjectMapper)provider.GetRequiredService(typeof(IObjectMapper<>).MakeGenericType(ObjectMapperContext)));
|
|
|
|
protected IGuidGenerator GuidGenerator => LazyServiceProvider.LazyGetService<IGuidGenerator>(SimpleGuidGenerator.Instance);
|
|
|
|
protected ILoggerFactory LoggerFactory => LazyServiceProvider.LazyGetRequiredService<ILoggerFactory>();
|
|
|
|
protected ICurrentTenant CurrentTenant => LazyServiceProvider.LazyGetRequiredService<ICurrentTenant>();
|
|
|
|
protected IDataFilter DataFilter => LazyServiceProvider.LazyGetRequiredService<IDataFilter>();
|
|
|
|
protected ICurrentUser CurrentUser => LazyServiceProvider.LazyGetRequiredService<ICurrentUser>();
|
|
|
|
protected ISettingProvider SettingProvider => LazyServiceProvider.LazyGetRequiredService<ISettingProvider>();
|
|
|
|
protected IClock Clock => LazyServiceProvider.LazyGetRequiredService<IClock>();
|
|
|
|
protected IAuthorizationService AuthorizationService => LazyServiceProvider.LazyGetRequiredService<IAuthorizationService>();
|
|
|
|
protected IFeatureChecker FeatureChecker => LazyServiceProvider.LazyGetRequiredService<IFeatureChecker>();
|
|
|
|
protected IStringLocalizerFactory StringLocalizerFactory => LazyServiceProvider.LazyGetRequiredService<IStringLocalizerFactory>();
|
|
|
|
protected IStringLocalizer L {
|
|
get {
|
|
if (_localizer == null)
|
|
{
|
|
_localizer = CreateLocalizer();
|
|
}
|
|
|
|
return _localizer;
|
|
}
|
|
}
|
|
private IStringLocalizer? _localizer;
|
|
|
|
protected Type? LocalizationResource {
|
|
get => _localizationResource;
|
|
set {
|
|
_localizationResource = value;
|
|
_localizer = null;
|
|
}
|
|
}
|
|
private Type? _localizationResource = typeof(DefaultResource);
|
|
|
|
protected IUnitOfWork? CurrentUnitOfWork => UnitOfWorkManager?.Current;
|
|
|
|
protected ILogger Logger => LazyServiceProvider.LazyGetService<ILogger>(provider => LoggerFactory?.CreateLogger(GetType().FullName!) ?? NullLogger.Instance);
|
|
|
|
/// <summary>
|
|
/// Checks for given <paramref name="policyName"/>.
|
|
/// Throws <see cref="AbpAuthorizationException"/> if given policy has not been granted.
|
|
/// </summary>
|
|
/// <param name="policyName">The policy name. This method does nothing if given <paramref name="policyName"/> is null or empty.</param>
|
|
protected virtual async Task CheckPolicyAsync(string? policyName)
|
|
{
|
|
if (string.IsNullOrEmpty(policyName))
|
|
{
|
|
return;
|
|
}
|
|
|
|
await AuthorizationService.CheckAsync(policyName!);
|
|
}
|
|
|
|
protected virtual IStringLocalizer CreateLocalizer()
|
|
{
|
|
if (LocalizationResource != null)
|
|
{
|
|
return StringLocalizerFactory.Create(LocalizationResource);
|
|
}
|
|
|
|
var localizer = StringLocalizerFactory.CreateDefaultOrNull();
|
|
if (localizer == null)
|
|
{
|
|
throw new AbpException($"Set {nameof(LocalizationResource)} or define the default localization resource type (by configuring the {nameof(AbpLocalizationOptions)}.{nameof(AbpLocalizationOptions.DefaultResourceType)}) to be able to use the {nameof(L)} object!");
|
|
}
|
|
|
|
return localizer;
|
|
}
|
|
}
|
|
|