AbpZeroDbContext:配置ABP.Zero中定义的entity的Dbset EntityFrameworkModelBuilderExtensions:给PrimitivePropertyConfiguration添加了扩展方法用于创建Index. AbpZeroDbModelBuilderExtensions:给DbModelBuilder添加了扩展方法用于表的重命名. AbpZeroEntityFrameworkModule:很明显Abp Zero模块中的EntityFramew…
动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能,这应该算是对DRY的最佳诠释了. 如下图所示,一行代码就为所有实现了IApplicationService的类型,自动创建对应的动态WebAPI. 这么Magic的功能是如何实现的呢? 本文为你揭开其Magic的外表.你会发现,实现如此Magic的功能,最关键的代码只有四行. 先思考一个问题:如果不…
IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法.EventBus定义了一个Dictionary容器来存放事件和处理该事件的对象(其实不是对象而是Factory,暂且这样理解无妨).其key是Type:在ABP使用Type表示不同的事件,具体而言这个type是EventData派生类的类型.EventData在ABP中有两个作用:第一用于封装事件数…
ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, session, authorization (permission management), setting management, language management, audit logging等核心功能.ABP中的这些功能具体实现都依赖外部的持久层,所以ABP框架中仅仅定义了接口和一些空的实现…
ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展.同时重写了ABP核心模块中的permission功能,以实现授权.注意:ABP仅仅使用了Asp.Net Identity的身份认证功能,但没有使用Asp.Net Identity中的基于role和Claim的授权. ABP Zero 中扩展的Asp.Net Identity实体类: AbpUser, AbpRole. AbpUser: 代表user的Enti…
ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig:定义了一个配置项,用于配置外部认证源.默认情况下,ABP Zero使用AbpUser表作为身份认证的数据源,但是我们也可以使用其他数据源做身份认证,比如AD或其他数据库.这种情况下,就需要通过UserManagementConfig将这个外表身份认证数据源添加进来.后文关于Ldap身份认证的文章会…
通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供DefautValue.主要提供配置访问AD数据库的账号信息. LdapSettings/ILdapSettings:通过settingManager获取LDAP settings AbpZeroLdapModuleConfig/IAbpZeroLdapModuleConfig: 提供激活Ldap认证的配置.…
ABP 中异常处理的思路是很清晰的.一共五种类型的异常类. AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationException异常就可以,无须做额外处理.这类异常往往是需要维护人员介入分析的. 其他四个异常都在AbpController中被集中处理,处理分为两步:一,通过EventBus触发异常事件,相应的异常处理函数则处理异常.二,针对AbpValidationException,UserFriendlyExc…
ABP 通过StackExchange.Redis类库来操作Redis数据库. AbpRedisCacheModule:完成ABP.RedisCache模块的初始化(完成常规的依赖注入) AbpRedisCacheConfig:定义了connectionStringKey和databaseIdAppSetting的值.这两个值对象redis 在web.config中的key值. ABP.RedisCache模块通过读取web.config来获取redis的配置. IAbpRedisConnect…
如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识. API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController,实现了Controller代码的常用. AbpODataEntityController<TEntity, TPrimaryKey>:使用ABP的repository和UOW完成实体的CRUD操作. AbpODataEntityController<TEntity>:主键为int类型的AbpODataEnt…