ABP(现代ASP.NET样板开发框架)系列之七、ABP Session管理

点这里进入ABP系列文章总目录html

 

基于DDD的现代ASP.NET开发框架--ABP系列之七、ABP Session管理
git

 

ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。github

ABP的官方网站http://www.aspnetboilerplate.com架构

ABP在Github上的开源项目https://github.com/aspnetboilerplate框架

 


 

简介

若是一个应用程序须要登陆,则它必须知道当前用户执行了什么操做。所以ASP.NET在展现层提供了一套本身的SESSION会话对象,而ABP则提供了一个能够在任何地方
获取当前用户和租户的IAbpSession接口。ide

 

关于IAbpSession网站

须要获取会话信息则必须实现IAbpSession接口。虽然你能够用本身的方式去实现它(IAbpSession),可是它在module-zero项目中已经有了完整的实现。spa

 

注入Session

IAbpSession一般是以属性注入的方式存在于须要它的类中,不须要获取会话信息的类中则不须要它。若是咱们使用属性注入方式,咱们能够用
NullAbpSession.Instance做为默认值来初始化它(IAbpSession),以下所示:架构设计

public class MyClass : ITransientDependency
{
    public IAbpSession AbpSession { get; set; }

    public MyClass()
    {
        AbpSession = NullAbpSession.Instance;
    }

    public void MyMethod()
    {
        var currentUserId = AbpSession.UserId;
        //...
    }
}

因为受权是应用层的任务,所以咱们应该在应用层和应用层的上一层使用IAbpSession(咱们不在领域层使用IAbpSession是很正常的)。设计

ApplicationService, AbpControllerAbpApiController 这3个基类已经注入了AbpSession属性,所以在Application Service的实例方法中,能直接使用AbpSession属性。

 

使用Session属性

AbpSession定义的一些关键属性:

  • UserId: 当前用户的标识ID,若是没有当前用户则为null.若是须要受权访问则它不可能为空。
  • TenantId: 当前租户的标识ID,若是没有当前租户则为null。
  • MultiTenancySide: 多是Host或Tenant。

UserId和TenantId是能够为null的。固然也提供了不为空时获取数据的 GetUserId()和GetTenantId() 方法 。当你肯定有当前用户时,你可使用GetUserId()方法。
若是当前用户为空,使用该方法则会抛出一个异常。GetTenantId()的使用方式和GetUserId()相似。

 

 


 
阳铭注:

ABP框架中的AbpSession, 并无使用到System.Web.HttpSessionStateBase, 而是本身定义了一个Abp.Runtime.Session.IAbpSession接口, 并在Zero模块中经过AspNet.Identity组件实现了AbpSession对象的存值、取值。 因此即便Web服务重启,也不会丢失Session状态。

在我本身的项目中, Session对象只有UserId、TenantId、MultiTenancySide这几个属性是不够用的,我扩充了几个属性和方法,使用起来很是方便。有这个需求的朋友,欢迎加入QQ群与我交流。

 


 

但愿更多国内的架构师能关注到ABP这个项目,也许这其中有能帮助到您的地方,也许有您的参与,这个项目能够发展得更好。

欢迎加ABP架构设计交流QQ群:134710707

ABP架构设计交流群

 

点这里进入ABP系列文章总目录

相关文章
相关标签/搜索