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来赋值和取值了

posted @ 2020-03-25 17:26  儿歌三百首  阅读(272)  评论(0编辑  收藏  举报