比较随意,记录下过程,以便忘了以后重拾。

所谓约定注册是指不需要明确写代码注入,只需要按约定规则写服务类,框架自动完成服务注册。

例如,只要这样写,框架就会自动注册。

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>()分解

这句可以分解四个要点:

  1. 操作(AddTransient)。添加时的具体操作,是直接添加,还是替换,或者已经有了就不在添加。
  2. 生命周期(AddTransient)。
  3. 对外的服务ITaxCalculator,ICanCalculate
  4. 服务的实现TaxCalculator

ABP默认的约定注册对应如下:

  1. 操作。默认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)的更多相关文章

  1. ABP源码分析 - 约定注册(3)

    入口 //ConfigureServices foreach (var module in Modules) { if (module.Instance is AbpModule abpModule) ...

  2. ABP源码分析二:ABP中配置的注册和初始化

    一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...

  3. ABP源码分析六:依赖注入的实现

    ABP的依赖注入的实现有一个本质两个途径:1.本质上是依赖于Castle这个老牌依赖注入的框架.2.一种实现途径是通过实现IConventionalDependencyRegistrar的实例定义注入 ...

  4. [Abp 源码分析]三、依赖注入

    0.简要介绍 在 Abp 框架里面,无时无刻不存在依赖注入,关于依赖注入的作用与好处我就不在这里多加赘述了,网上有很多解释的教程.在 [Abp 源码分析]一.Abp 框架启动流程分析 里面已经说过,A ...

  5. [Abp 源码分析]十七、ASP.NET Core 集成

    0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ...

  6. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  7. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  8. ABP源码分析三:ABP Module

    Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...

  9. ABP源码分析四:Configuration

    核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...

随机推荐

  1. npm vue路由配置

    npm vue路由 复习:1.README.md文件:保存如何使用的命令 (1)     npm install:拷项目时可以不拷node_modules文件,运行该命令时,会自动下载node_mod ...

  2. 使用ntp 实现时间同步

    1.首先安装NTP [root@localhost /]# yum install ntp -y2.查看是否安装成功 rpm -qa|grep ntp [root@hadoop102 桌面]# vi ...

  3. python学习之matplotlib实战

    import numpy as np def main(): # print("hello") # line import matplotlib.pyplot as plt x = ...

  4. 全面解析UNIX缓冲区溢出 深度防御体系

    首先简要回顾一下缓冲区溢出的攻击大系: ◆栈溢出(stack smashing) 未检查输入缓冲区长度,导致数组越界,覆盖栈中局部变量空间之上的栈桢指针%ebp以及函数返回地址retaddr,当函数返 ...

  5. OOS 预览报错解决思路

    预览报错解决思路: 官方链接:https://docs.microsoft.com/zh-cn/officeonlineserver/office-online-server :> 查看服务器内 ...

  6. Cobalt Strike的安装

    一.下载 压缩包下载回来之后,可以看到里面的文件有这些: 其中搭建团队服务器端的关键文件有两个,一个是cobaltstrike.jar,另一个是teamserver,这里我打算将团队服务器端搭在我的v ...

  7. python练习册 每天一个小程序 第0006题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都 ...

  8. vue2.x版本中computed和watch的使用入门详解-关联和区别

    前面两篇介绍了computed和watch的基本使用 watch篇 computed篇 两者的区别,继续通过代码实现的方式具体去了解 html <li>最开始的value值:{{ name ...

  9. 什么是 Netflix Feign?它的优点是什么?

    Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序. Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其 ...

  10. IOC的优点是什么?

    IOC 或 依赖注入把应用的代码量降到最低.它使应用容易测试,单元测试不再需要单例和JNDI查找机制.最小的代价和最小的侵入性使松散耦合得以实现.IOC容器支持加载服务时的饿汉式初始化和懒加载.