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对象和扩展方法很巧妙的实现了配 ...
随机推荐
- 配置DHCP Relay的功能原理是什么?
DHCP中继代理,就是在DHCP服务器和客户端之间转发DHCP数据包.当DHCP客户端与服务器不在同一个子网上,就必须有DHCP中继代理来转发DHCP请求和应答消息.DHCP中继代理的数据转发,与通常 ...
- java 中判断输入是否合法 if (变量名.hasNextInt())
//案例: Scanner sc = new Scanner(System.in); System.out.println("你选择了新修改商品功能!"); System.out. ...
- DTD与Schema约束
1.DTD:(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法 规则.它是标准通用标记语言.2.XML Schema 是基于XML的DTD替代者 ...
- 版本控制工具之git的常用命名01
基本命令 从git远程仓库导出项目:git clone http://127.0.0.1/name_master/server.git 从git远程仓库拉取代码:git pull 查看本地仓库状态:g ...
- java进行远程部署与调试及原理解析
远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用. JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过 ...
- Drools 规则引擎应用 看这一篇就够了
1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...
- 多线程笔记(学习尚硅谷java基础教程)
一.基本概念: 程序: 是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程: 是程序的一次执行过程,或是正在运行的一个程序.是一个动态的过程:有它自身的产生.存在和 ...
- leetcode刷题1--动态规划法回文串2
题目是: Given a string s,partition s such that every substring of the partition is a palindrome Return ...
- python 列表推导式,生成器推导式,集合推导式,字典推导式简介
1.列表推导式multiples = [i for i in range(30) if i % 2 is 0]names = [[],[]]multiples = [name for lst in n ...
- 解释一下Spring AOP里面的几个名词?
(1)切面(Aspect):被抽取的公共模块,可能会横切多个对象.在Spring AOP中,切面可以使用通用类(基于模式的风格)或者在普通类中以@AspectJ注解来实现. (2)连接点(Join p ...