zoukankan      html  css  js  c++  java
  • NopCommerce架构分析-依赖注入

    先说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开发。

      

  • 相关阅读:
    Oracel System.Data.OracleClient requires Oracle client software version 8.1.7 or greater错误的解决方法
    oracle中CASE 的用法(摘录)
    ajaxpro 的一些用法,是在vs.net2003上
    我所知道的web下的打印方法
    电容触摸技术实用教程
    BLE资料应用笔记 持续更新
    蓝牙BLE实用教程
    README
    android 应用笔记
    Git 教程
  • 原文地址:https://www.cnblogs.com/tingqianzhu/p/8588961.html
Copyright © 2011-2022 走看看