点这里进入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
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, AbpController 和 AbpApiController 这3个基类已经注入了AbpSession属性,所以在Application Service的实例方法中,能直接使用AbpSession属性。
AbpSession定义的一些关键属性:
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