深入了解Abp

Posted xiaoliangsummary

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入了解Abp相关的知识,希望对你有一定的参考价值。

一、abp的系统设置(ISettingStore接口)

1、如果要新增一个系统设置,必须在使用前定义设置

2、系统设置参数有三种级别:应用程序、租户、用户

3、在应用层可以使用ISettingManager接口的GetSettingValue方法来回去设置参数的值

4、在js中,获取设置参数值的方法有   var value= abp.setting.get("参数名称");

二、Abp的AbpSession(IAbpSession接口)

1、依赖注入的方法为 

技术图片
public IAbpSession AbpSession { get; set; }

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

    public void MyMethod()
    {
        var currentUserId = AbpSession.UserId;
        //...
    }
获取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
        }
    }
}
覆盖当前abpsession

 (始终在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
    }
}
View 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");
});
View Code

 四、读取缓存(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
    }
}
View Code

将注入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);
});
View Code

 

以上是关于深入了解Abp的主要内容,如果未能解决你的问题,请参考以下文章

ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用

ABP项目启动及源代码结构

ABP Framework 为什么好上手,不好深入?探讨最佳学习姿势!

ABP创建项目,生成解决方案

详解ABP框架的多租户

ABP详细教程——模块类