ABP源码分析 - 约定注册(2)
比较随意,记录下过程,以便忘了以后重拾。
所谓约定注册是指不需要明确写代码注入,只需要按约定规则写服务类,框架自动完成服务注册。
例如,只要这样写,框架就会自动注册。
public class TaxCalculator : ITaxCalculator, ICanCalculate,ITransientDependency
{
}
如果不用abp,你需要写如下代码进行服务注册
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddTransient<ITaxCalculator, TaxCalculator>();
context.Services.AddTransient<ICanCalculate, TaxCalculator>();
}
context.Services.AddTransient<ITaxCalculator, TaxCalculator>()分解
这句可以分解四个要点:
- 操作(
AddTransient)。添加时的具体操作,是直接添加,还是替换,或者已经有了就不在添加。- 生命周期(Add
Transient)。- 对外的服务ITaxCalculator,ICanCalculate
- 服务的实现TaxCalculator
ABP默认的约定注册对应如下:
- 操作。默认Add,可以通过Dependency表达TryAdd和Replace
public class DependencyAttribute : Attribute
{
public virtual ServiceLifetime? Lifetime { get; set; }
public virtual bool TryRegister { get; set; }
public virtual bool ReplaceServices { get; set; }
public DependencyAttribute()
{
}
public DependencyAttribute(ServiceLifetime lifetime)
{
Lifetime = lifetime;
}
}
2.生命周期。既可以通过DependencyAttribute.Lifetime也可以通过ITransientDependency,ISingletonDependency,IScopedDependency三个接口来表达。
ITransientDependency,ISingletonDependency,IScopedDependency三个接口是空的,这种接口叫做标识接口,也可以当做一种元数据,作为辅助描述。
3.对外的服务。通过ExposeServices表示。例如我们希望仅暴露ITaxCalculator,就可以通过ExposeServices明确指定。
[ExposeServices(typeof(ITaxCalculator))]
public class TaxCalculator: ITaxCalculator, ICanCalculate, ITransientDependency
{
}
默认不指定ExposeServices,abp会暴露ITaxCalculator,ICanCalculate,TaxCalculator(没错,自身也会注入)三个服务。
4.服务的实现即类本身。
小结
上边介绍了abp怎样对一次服务的描述,下节上源码。
ABP源码分析 - 约定注册(2)的更多相关文章
- ABP源码分析 - 约定注册(3)
入口 //ConfigureServices foreach (var module in Modules) { if (module.Instance is AbpModule abpModule) ...
- ABP源码分析二:ABP中配置的注册和初始化
一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...
- ABP源码分析六:依赖注入的实现
ABP的依赖注入的实现有一个本质两个途径:1.本质上是依赖于Castle这个老牌依赖注入的框架.2.一种实现途径是通过实现IConventionalDependencyRegistrar的实例定义注入 ...
- [Abp 源码分析]三、依赖注入
0.简要介绍 在 Abp 框架里面,无时无刻不存在依赖注入,关于依赖注入的作用与好处我就不在这里多加赘述了,网上有很多解释的教程.在 [Abp 源码分析]一.Abp 框架启动流程分析 里面已经说过,A ...
- [Abp 源码分析]十七、ASP.NET Core 集成
0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
- ABP源码分析四:Configuration
核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...
随机推荐
- PHP数组和字符串函数
1.1关于数组操作的函数 1.1.1range(start,end) 创建一个数组,值从start开始,一直到end结束 如果range里面的参数是数字,那么他直接按照数字大小的顺序排序,如果里面的参 ...
- vue 控制台错误
控制台显示报错: Uncaught TypeError: WEBPACK_IMPORTED_MODULE_1_vuex.a.store is not a constructor 解决办法: 将new ...
- ubuntu 16.04和18.04 忘记登录密码的解决办法
1:开机按Shift键,出现如下界面.(手速要快,Shift键要按时间久一点)选择第二项 2:按回车键进入如下界面,然后选中有recovery mode的选项(第三项) 3:按e进入如下界面,并找到图 ...
- 『现学现忘』Docker基础 — 24、Docker图形化管理工具Portainer
目录 1.Portainer介绍 2.Portainer安装启动 3.Portainer初始化配置 4.Portainer汉化 1.Portainer介绍 (1)Portainer 是一款轻量级的图形 ...
- PicGo+Typora配置gitee图床
1 .下载Typora Typora官网地址:https://www.typora.io/#windows 本文使用的Typora版本为 0.11.2 根据自己的要求进行安装即可! 2.下载PicGo ...
- 单循环链表(基于java语言)
public class CircleSinglyLinkList { private Node head; CircleSinglyLinkList(){ this.head = null; } C ...
- java8中CompletableFuture的使用介绍
既然CompletableFuture类实现了CompletionStage接口,首先我们需要理解这个接口的契约.它代表了一个特定的计算的阶段,可以同步或者异步的被完成.你可以把它看成一个计算流水线上 ...
- [SPDK/NVMe存储技术分析]011 - 内核态ib_post_send()源码剖析
OFA定义了一组标准的Verbs,并在用户态提供了一个标准库libibverbs.例如将一个工作请求(WR)放置到发送队列的Verb API是ibv_post_send(), 但是在Linux内核,对 ...
- go语言学习入门篇 2--轻量级线程的实现
很多有过 JVM 相关语言工作经验的程序员或许都遇到过如下问题: 超出 thread 限制导致内存溢出.在作者的笔记本的 linux 上运行,这种情况一般发生在创建了 11500 个左右的 threa ...
- 关于IIS应用程序池的默认参数设置解决
关于IIS应用程序池的默认参数设置,一般如下设置以满足IIS站点的需要. 1.关于IIS站点的启动模式,以及处理请求的管道模式设置. 2.回收机制设置, A)若IIS站点程序中存在单例模式访问DB数据 ...