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对象和扩展方法很巧妙的实现了配 ...
随机推荐
- CF1453D题解
VP 的时候发现的一道数学题( 在思考这个问题之前,先让我们思考一件事:走到距离上一个存档点 \(n\) 的位置的期望是多少?(假设这个值为 \(f[n]\)) 先思考 \(f[1]\) 是多少,很明 ...
- 写博客的技巧整理——基于Markdown
我们需要掌握各种技巧,这样才能在写博客时游刃有余,以下内容觉得不错就点个赞吧 文章目录 1.目录与目录跳转 目录一(示例用勿点) 目录二(示例用勿点) 目录三(示例用勿点) 2.文字与图片 3.引用 ...
- 【elasticsearch】搜索过程详解
elasticsearch 搜索过程详解 本文基于elasticsearch8.1.在es搜索中,经常会使用索引+星号,采用时间戳来进行搜索,比如aaaa-*在es中是怎么处理这类请求的呢?是对匹配的 ...
- Flink消费kafka
Flink消费Kafka https://blog.csdn.net/boling_cavalry/article/details/85549434 https://www.cnblogs.com/s ...
- kubernetes里kube-proxy的ConfigMap误删除处理
由于想要开启ipvs,没想到把cm当成pod删除了....然后就开始了修复之路 ConfigMap介绍 ConfigMap是一种API对象,用来将非加密数据保存到键值对中.可以用作环境变量.命令行参数 ...
- 使用dom4j处理xml文件
1.项目中加入dom4j的jar 2.基本的读取xml文件为Document对象:将Document对象写入到指定文件中 package com.ricoh.rapp.deploymenttool.u ...
- CVE-2019-0708 RCE复现
漏洞环境 192.168.91.136 windows7 6.1.7601 192.168.91.151 kali Windows7 SP1下载链接: ed2k://|file|cn ...
- S2-048(RCE远程代码执行)
环境搭建: https://blog.csdn.net/qq_36374896/article/details/84145020 进入漏洞环境 cd vulhub-master/struts2/s2- ...
- 什么是通知(Advice)?
特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice.Spring AOP 使用一 个 Advice 作为拦截器,在 JoinPoint "周围"维护一系列 ...
- Zookeeper 的 java 客户端都有哪些?
java 客户端:zk 自带的 zkclient 及 Apache 开源的 Curator.