ABP框架扩展AbpSession
1、扩展IAbpSession
定位到.Core结尾的项目中,添加Extensions
文件夹,然后添加IAbpSessionExtension
接口继承自IAbpSession
:
namespace TJS.IntelligentMonitoring.Extensions { public interface IAbpSessionExtension:IAbpSession { string ProjectId { get; set; } } }
2、实现IAbpSessionExtension
添加AbpSessionExtension
类,基础自ClaimsAbpSession
并实现IAbpSessionExtension
接口。
namespace TJS.IntelligentMonitoring.Extensions { public class AbpSessionExtension : ClaimsAbpSession, IAbpSessionExtension { public AbpSessionExtension(IPrincipalAccessor principalAccessor, IMultiTenancyConfig multiTenancy, ITenantResolver tenantResolver, IAmbientScopeProvider<SessionOverride> sessionOverrideScopeProvider) : base(principalAccessor, multiTenancy, tenantResolver, sessionOverrideScopeProvider) { } //public string ProjectId => GetClaimValue("ProjectId"); //private string GetClaimValue(string claimType) //{ // var claimsPrincipal = PrincipalAccessor.Principal; // var claim = claimsPrincipal?.Claims.FirstOrDefault(c => c.Type == claimType); // if (string.IsNullOrEmpty(claim?.Value)) // return null; // return claim.Value; //} public string ProjectId { get; set; } } }
3、替换掉注入的AbpSession属性
先来替换掉AbpController中注入的AbpSession
定位到.Web\Controllers\xxxxControllerBase.cs,使用属性注入IAbpSessionExtension
。添加以下代码:
//隐藏父类的AbpSession public new IAbpSessionExtension AbpSession { get; set; }
再来替换掉ApplicationService中注入的AbpSession
定位到.Application\xxxxAppServiceBase.cs。使用属性注入IAbpSessionExtension
,同样添加以下代码:
//隐藏父类的AbpSession public new IAbpSessionExtension AbpSession { get; set; }
这样就可以在controller和service中使用扩展的AbpSession.ProjectId来赋值和取值了