深入了解Abp
Posted xiaoliangsummary
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入了解Abp相关的知识,希望对你有一定的参考价值。
一、abp的系统设置(ISettingStore接口)
1、如果要新增一个系统设置,必须在使用前定义设置
2、系统设置参数有三种级别:应用程序、租户、用户
3、在应用层可以使用ISettingManager接口的GetSettingValue方法来回去设置参数的值
4、在js中,获取设置参数值的方法有 var value= abp.setting.get("参数名称");
二、Abp的AbpSession(I
AbpSession接口)
1、依赖注入的方法为
public IAbpSession AbpSession { get; set; } public MyClass() { AbpSession = NullAbpSession.Instance; } public void MyMethod() { var currentUserId = AbpSession.UserId; //... }
(由于身份验证/授权是应用程序层的任务,因此建议在应用程序层和上层使用IAbpSession。通常,这不是在域层中完成的。ApplicationService, AbpController, AbpApiController和其他一些基类 已经注入了AbpSession,因此,例如,您可以在应用程序服务方法中直接使用AbpSession属性,无需再利用依赖注入)
2、覆盖当前abpsesion的值的方法:
public class MyService { private readonly IAbpSession _session; public MyService(IAbpSession session) { _session = session; } public void Test() { using (_session.Use(42, null)) { var tenantId = _session.TenantId; //42 var userId = _session.UserId; //null } } }
(始终在using块中使用Use方法)
三、分布式缓存(Redis缓存集成)
1、将Abp.RedisCache NuGet软件包安装 到应用程序中
2、为AbpRedisCacheModule添加DependsOn属性,
/...other namespaces using Abp.Runtime.Caching.Redis; namespace MyProject.AbpZeroTemplate.Web { [DependsOn( //...other module dependencies typeof(AbpRedisCacheModule))] public class MyProjectWebModule : AbpModule { public override void PreInitialize() { //...other configurations Configuration.Caching.UseRedis(); } //...other code } }
3、Abp.RedisCache软件包使用“ localhost ”作为连接字符串<add name="Abp.Redis.Cache" connectionString="localhost"/>
4、appSettings中设置Redis的数据库ID <add key="Abp.Redis.Cache.DatabaseId" value="2"/>
(不同的数据库ID对于在同一服务器中创建不同的键空间(隔离的缓存)很有用)
5、UseRedis的委托参数覆盖
Configuration.Caching.UseRedis(options => { options.ConnectionString = _appConfiguration["RedisCache:ConnectionString"]; options.DatabaseId = _appConfiguration.GetValue<int>("RedisCache:DatabaseId"); });
四、读取缓存(ICacheManager接口)
1、注入接口并使用它来获取缓存
public class TestAppService : ApplicationService { private readonly ICacheManager _cacheManager; public TestAppService(ICacheManager cacheManager) { _cacheManager = cacheManager; } public Item GetItem(int id) { //Try to get from cache return _cacheManager .GetCache("MyCache") .Get(id.ToString(), () => GetFromDatabase(id)) as Item; } public Item GetFromDatabase(int id) { //... retrieve item from database } }
(将注入ICacheManager并获取一个名为MyCache的缓存)
(GetCache方法返回一个ICache。缓存是单例(每个缓存名称)。它是在第一次请求时创建的,然后总是返回相同的缓存对象。)
2、默认的缓存过期时间为60分钟
//设置大部分缓存的时间 Configuration.Caching.ConfigureAll(cache => { cache.DefaultSlidingExpireTime = TimeSpan.FromHours(2); }); //针对特殊缓存使用的过期时间的修改 Configuration.Caching.Configure("MyCache", cache => { cache.DefaultSlidingExpireTime = TimeSpan.FromHours(8); });
以上是关于深入了解Abp的主要内容,如果未能解决你的问题,请参考以下文章
ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用