先说ASP.NET Core的运行原理

  在Nop.Web中有一个Startup.cs文件,对ASP.NET Core程序而言,Startup.cs是必须的。ASP.NET Core在程序启动时会从assemblies中找到名字叫Startup的类,如果存在多个名为Startup的类,则会先找到项目根名称空间下的Startup类。在Startup必须定义Configure方法,而ConfigureServices方法则是可选的,方法会在程序第一次启动时被调用,类似传统的ASP.NET MVC的路由和应用程序状态均可在Startup中配置,也可以在此安装所需中间件等等。我们这里要说的依赖注入,就是从ConfigureServices方法开始。

NopCommerce的依赖注册过程

  在ConfigureServices方法中,调用扩展类ServiceCollectionExtensions的ConfigureApplicationServices方法,里面主要是使用了Nop.Core.Infrastructure中的NopEngine对象,进行服务配置。使用WebAppTypeFinder找到所有的INopStartup对象,实例化并配置所有的服务。然后开始注册服务,同样使用WebAppTypeFinder找到所有的IDependencyRegistrar对象,实例化并注册所有服务。以Nop.Web.Framework.Infrastructure中的DependencyRegistrar为例,注册了web helper、user agent helper、data layer、repositories、plugins、cache manager、work context、store context、自定义services、all settings、event consumers等等。

Autofac  

  NopCommerce是通过Autofac的ContainerBuilder作为容器进行依赖注入的。Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高。主要方法如下:

  1、InstancePerDependency

  对每一个依赖或每一次调用创建一个新的唯一的实例。这也是默认的创建实例的方式。

  2、InstancePerLifetimeScope

  在一个生命周期域中,每一个依赖或调用创建一个单一的共享的实例,且每一个不同的生命周期域,实例是唯一的,不共享的。

  3、InstancePerMatchingLifetimeScope

  在一个做标识的生命周期域中,每一个依赖或调用创建一个单一的共享的实例。打了标识了的生命周期域中的子标识域中可以共享父级域中的实例。若在整个继承层次中没有找到打标识的生命周期域,则会抛出异常: DependencyResolutionException。

  4、InstancePerOwned

  在一个生命周期域中所拥有的实例创建的生命周期中,每一个依赖组件或调用Resolve()方法创建一个单一的共享的实例,并且子生命周期域共享父生命周期域中的实例。若在继承层级中没有发现合适的拥有子实例的生命周期域,则抛出异常:DependencyResolutionException。

  5、SingleInstance

  每一次依赖组件或调用Resolve()方法都会得到一个相同的共享的实例。其实就是单例模式。

  6、InstancePerHttpRequest

  在一次Http请求上下文中,共享一个组件实例。仅适用于asp.net mvc开发。

  

转载于:https://www.cnblogs.com/tingqianzhu/p/8588961.html

NopCommerce架构分析-依赖注入相关推荐

  1. NopCommerce架构分析之八------多语言

    系统支持的语言是有类:Language表示: 多语言资源对应的类为:LocalizedProperty: 当先选择某种语言存储在类中:GenericAttribute: 多语言可以导出为XML文件,当 ...

  2. 初学者都能看懂的 Spring 源码之依赖注入(DI)源码分析

    前言 在面试中,经常被问到 Spring 的 IOC 和 DI (依赖注入),很多人会觉得其实 IOC 就是 DI ,但是严格上来说这两个其实并不等价,因为 IOC 注重的是存,而依赖注入注重的是取, ...

  3. Spring依赖注入和循环依赖问题分析

    Spring源码揭秘之依赖注入和循环依赖问题分析 前言 依赖注入的入口方法 依赖注入流程分析 AbstractBeanFactory#getBean AbstractBeanFactory#doGet ...

  4. dagger2 依赖注入

    前言: 当 mvp + dagger2 + rxjava 三者遇上,架构更加清晰,代码更加灵活,巧妙结合. 依赖注入:是为了解耦,达到高内聚低耦合的目的,保证代码的健壮性.灵活性和可维护性. 1 pu ...

  5. Spring Setter依赖注入示例

    学习如何编写Spring Setter依赖注入示例 . Setter注入是Spring依赖注入的一种 . Spring支持字段注入,Setter注入以及构造函数注入,以将依赖项注入Spring托管的b ...

  6. 【Java从0到架构师】Spring - IoC 控制反转、DI 依赖注入

    IoC 控制反转.DI 依赖注入 Spring 简介 Spring 基本使用 - IoC 容器 依赖注入 (Dependency Injection) 基于 setter 的注入 - 自定义对象 be ...

  7. Java程序员进阶——Spring依赖注入原理分析

    Spring依赖注入原理分析 下面谈谈Spring是如何实现反转模式IOC或依赖注入模式DI: 平时,我们需要生成一个对象,使用new语法,如一个类为A public class A{public v ...

  8. 架构设计之依赖倒置、控制反转与依赖注入

    名词解释 依赖:一种模型元素之间的关系的描述.例如类A调用了类B,那么我们说类A依赖于类B. 耦合:一种模型元素之间的关系的描述.例如类A调用了类B或类B调用了类A,那么我们说类A与类B有耦合关系. ...

  9. Spring-Bean的依赖注入分析-01

    ###我们先通过一个例子弄明白为什么要使用依赖注入### 1.创建业务层UserService接口及UserServiceImpl实现类(接口代码省略) public class UserServic ...

最新文章

  1. Collections 类
  2. .ipynb文件怎么打开
  3. python学生成绩管理程序设计总框图_学生成绩管理程序设计报告
  4. 一个跨国银行的敏捷转型案例要点之全员培训
  5. python的正则表达式 re-------可以在字符串前加上 r 这个前缀来避免部分疑惑,因为 r 开头的python字符串是 raw 字符串,所以里面的所有字符都不会被转义...
  6. nssl1438-战略威慑【枚举,树的直径】
  7. 工作372-cookie和sessionstroage以及localstroage区别
  8. java程序经过编译后会产生byte code_Java 虚拟机(JVM)内存模型
  9. (8)Verilog include 头文件使用路径(FPGA不积跬步101)
  10. Java新职篇:类型提升的约定
  11. LaTeX使用小结2
  12. 百度文库无需VIP和下载券直接下载
  13. P1436 棋盘分割
  14. 中龙电力什么理财产品预期收益高又安全?介绍四类理财产品
  15. 网易云信发送短信工具类
  16. 每日总结(2021/12/15)
  17. python乘车费用 青少年编程电子学会python编程等级考试二级真题解析2020年6月
  18. 搭建Wordpress Mu的插件和注意事项
  19. 七段显示器显示整数C语言答案,C语言程序设计试卷(含答案)(7页)-原创力文档...
  20. 画环形或者蚊香线圈的软件介绍以及使用笔记

热门文章

  1. angularjs与java_关于angularjs与java结合,获取后台数据并解析的问题
  2. 二叉树层序遍历递归与非递归_总结归纳:二叉树遍历【递归 amp;amp; 非递归】...
  3. INADDR_ANY 最好的解释
  4. xilinx windows 下烧录脚本 稳定性超好
  5. matlab打开显示系统错误,win7系统笔记本运行Matlab软件弹出已停止工作错误窗口的解决方法...
  6. TCL中关于管脚(Ports)的一些使用方法?
  7. 【深度学习篇】--Windows 64下tensorflow-gpu安装到应用
  8. SpringMVC 之拦截器和异常处理
  9. android 发送http请求
  10. HDU_1253 胜利大逃亡(BFS)