主頁 > 知識庫 > NopCommerce架構(gòu)分析(一)Autofac依賴注入類生成容器

NopCommerce架構(gòu)分析(一)Autofac依賴注入類生成容器

熱門標(biāo)簽:塔城代理外呼系統(tǒng) 遂寧市地圖標(biāo)注app 代理接電話機(jī)器人如何取消 400電話辦理哪家性價比高 濮陽外呼電銷系統(tǒng)怎么樣 地圖標(biāo)注的公司有哪些 地圖定位圖標(biāo)標(biāo)注 地圖標(biāo)注專業(yè)團(tuán)隊 天心智能電銷機(jī)器人

NopCommerce為了實現(xiàn)松耦合的框架設(shè)計目的,使用了IOC框架:Autofac。據(jù)有人測試,Autofac是性能很好的IOC工具。

1、在IOC中,組件首先需要在IOC中注冊,有通過配置文件注冊的。像Spring.net,也有通過特性注冊的,像StructureMap,也有通過代理來注冊的,像Autofac。但是IOC講究一個原則,就是接口和實現(xiàn)分離。所有IOC就是生命某個具體類實現(xiàn)了某個接口。然后在使用時,系統(tǒng)從IOC中獲取接口的實現(xiàn)類,并創(chuàng)建對象。

2、下面來看NopCommerce如何使用Autofac實現(xiàn)松耦合的框架設(shè)計的。其實它的插件機(jī)制也是通過Autofac來實現(xiàn)的。

IOC的封裝及靈活使用機(jī)制主要在Nop.Core.Infrastructure中封裝的。在Autofac中,對象又稱為組件。組件生命周期分為:單例、臨時和生命周期域內(nèi),如下定義:

namespace Nop.Core.Infrastructure.DependencyManagement 
{ 
 public enum ComponentLifeStyle 
 { 
  Singleton = 0, 
  Transient = 1, 
  LifetimeScope = 2 
 } 
} 

Autofac中有容器、并提供方法注冊接口及其類型,還提供方法查找到注冊的類型,以及自動創(chuàng)建對象。

3、類型查找器

為了支持插件功能,以及支持一些自動注冊的功能。系統(tǒng)提供了類型查找器。ITypeFinder以及實現(xiàn)類就是提供此功能。通過類型查找器可以查找本程序域中的類,也可以查找整個bin目錄下所有動態(tài)鏈接庫中類,并把它們注冊到類型反轉(zhuǎn)容器中。ITypeFinder以及實現(xiàn)類如下:

4、類型注冊

容器管理類:ContainerManager,管理通過Autofac生成的容器;

容器配置器:ContainerConfigurer:配置依賴反轉(zhuǎn)容器,建立整個框架的類型依賴注冊和類型查找類之間的關(guān)系。

在系統(tǒng)中有一個依賴類引擎上下文環(huán)境:EngineContext,可以根據(jù)配置文件生成引擎,此引擎是負(fù)責(zé)根據(jù)類型接口從容器中返回對象。

系統(tǒng)默認(rèn)引擎NopEngine,若沒有配置有效的引擎,即用默認(rèn)引擎,生成的引擎保存在單例容器中。

它們的關(guān)系如下:

系統(tǒng)在類MvcApplication的方法Application_Start中初始化引擎上下文。并通過調(diào)用EngineContext.Initialize(false);實現(xiàn)所有反轉(zhuǎn)依賴的注冊功能;

5、容器注冊類

系統(tǒng)注冊接口為:IDependencyRegistrar,系統(tǒng)通過ContainerConfigurer注冊此接口以及實現(xiàn)類的,并通過ITypeFinder類搜尋程序集里實現(xiàn)接口IDependencyRegistrar的類。代碼如下:

namespace Nop.Core.Infrastructure.DependencyManagement 
{ 
 /// summary> 
 /// Configures the inversion of control container with services used by Nop. 
 /// /summary> 
 public class ContainerConfigurer 
 { 
  public virtual void Configure(IEngine engine, ContainerManager containerManager, EventBroker broker, NopConfig configuration) 
  { 
   //other dependencies 
   containerManager.AddComponentInstanceNopConfig>(configuration, "nop.configuration"); 
   containerManager.AddComponentInstanceIEngine>(engine, "nop.engine"); 
   containerManager.AddComponentInstanceContainerConfigurer>(this, "nop.containerConfigurer"); 
 
   //type finder 
   containerManager.AddComponentITypeFinder, WebAppTypeFinder>("nop.typeFinder"); 
 
   //register dependencies provided by other assemblies 
   var typeFinder = containerManager.ResolveITypeFinder>(); 
   containerManager.UpdateContainer(x => 
   { 
    var drTypes = typeFinder.FindClassesOfTypeIDependencyRegistrar>(); 
    var drInstances = new ListIDependencyRegistrar>(); 
    foreach (var drType in drTypes) 
     drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType)); 
    //sort 
    drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList(); 
    foreach (var dependencyRegistrar in drInstances) 
     dependencyRegistrar.Register(x, typeFinder); 
   }); 
 
   //event broker 
   containerManager.AddComponentInstance(broker); 
  } 
 } 
}

而接口IDependencyRegistrar的內(nèi)容如下:

namespace Nop.Core.Infrastructure.DependencyManagement 
{ 
 public interface IDependencyRegistrar 
 { 
  /// summary> 
  /// 此方法在通過ContainerBuilder注冊依賴關(guān)系。 
  /// /summary> 
  /// param name="builder">容器管理者類/param> 
  /// param name="typeFinder">類型查找者接口/param> 
  void Register(ContainerBuilder builder, ITypeFinder typeFinder); 
  /// summary> 
  /// 注冊排序序號 
  /// /summary> 
  int Order { get; } 
 } 
}

6、單例類容器

單例類系列保存系統(tǒng)中與程序相同生命周期的單例對象,或者叫做單例類容器。

其中包括實體類,集合類和字典類的單例容器。

SingletonT>,SingletonListT>,SingletonDictionaryTKey, TValue>。EngineContext就是通過SingletonT>類來管理引擎的。

7、MVC 服務(wù)提供類。

類型依賴獲取器:NopDependencyResolver,通過繼承mvc下的接口:IDependencyResolver,并在Application_Start方法中注冊,使之在系統(tǒng)啟動時調(diào)用。

//set dependency resolver 
var dependencyResolver = new NopDependencyResolver();
DependencyResolver.SetResolver(dependencyResolver);

8、其他

事件攔截類:EventBroker:過濾向系統(tǒng)發(fā)送的請求,防止由于臨時的錯誤或異常導(dǎo)致系統(tǒng)崩潰。

系統(tǒng)啟動時執(zhí)行任務(wù):IStartupTask,啟動時執(zhí)行的任務(wù)主要是數(shù)據(jù)庫的初始化和加載。

您可能感興趣的文章:
  • NopCommerce架構(gòu)分析之(八)多語言支持
  • NopCommerce架構(gòu)分析之(七)主題Theme皮膚管理器
  • NopCommerce架構(gòu)分析之(六)自定義RazorViewEngine和WebViewPage
  • NopCommerce架構(gòu)分析之(五)Model綁定Action參數(shù)
  • NopCommerce架構(gòu)分析之(四)基于路由實現(xiàn)靈活的插件機(jī)制
  • NopCommerce架構(gòu)分析之(三)EntityFramework數(shù)據(jù)庫初試化及數(shù)據(jù)操作
  • 使用Nopcommerce為商城添加滿XX減XX優(yōu)惠券功能
  • 基于nopCommerce的開發(fā)框架 附源碼

標(biāo)簽:婁底 汕頭 重慶 本溪 麗江 宜春 吉林 河南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《NopCommerce架構(gòu)分析(一)Autofac依賴注入類生成容器》,本文關(guān)鍵詞  NopCommerce,架構(gòu),分析,一,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《NopCommerce架構(gòu)分析(一)Autofac依賴注入類生成容器》相關(guān)的同類信息!
  • 本頁收集關(guān)于NopCommerce架構(gòu)分析(一)Autofac依賴注入類生成容器的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章