麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:30:08
字體:
來源:轉載
供稿:網友
本文介紹了NopCommerce中IOC框架Autofac的使用,Autofac是一款IOC框架,比較于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很輕量級性能上非常高。
 

NopCommerce為了實現松耦合的框架設計目的,使用了IOC框架:Autofac。據有人測試,Autofac是性能很好的IOC工具。

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

2、下面來看NopCommerce如何使用Autofac實現松耦合的框架設計的。其實它的插件機制也是通過Autofac來實現的。

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

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

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

3、類型查找器

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

4、類型注冊

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

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

在系統中有一個依賴類引擎上下文環境:EngineContext,可以根據配置文件生成引擎,此引擎是負責根據類型接口從容器中返回對象。

系統默認引擎NopEngine,若沒有配置有效的引擎,即用默認引擎,生成的引擎保存在單例容器中。

它們的關系如下:

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

5、容器注冊類

系統注冊接口為:IDependencyRegistrar,系統通過ContainerConfigurer注冊此接口以及實現類的,并通過ITypeFinder類搜尋程序集里實現接口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.AddComponentInstance<NopConfig>(configuration, "nop.configuration");    containerManager.AddComponentInstance<IEngine>(engine, "nop.engine");    containerManager.AddComponentInstance<ContainerConfigurer>(this, "nop.containerConfigurer");     //type finder    containerManager.AddComponent<ITypeFinder, WebAppTypeFinder>("nop.typeFinder");     //register dependencies provided by other assemblies    var typeFinder = containerManager.Resolve<ITypeFinder>();    containerManager.UpdateContainer(x =>    {     var drTypes = typeFinder.FindClassesOfType<IDependencyRegistrar>();     var drInstances = new List<IDependencyRegistrar>();     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的內容如下:

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

6、單例類容器

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

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

Singleton<T>,SingletonList<T>,SingletonDictionary<TKey, TValue>。EngineContext就是通過Singleton<T>類來管理引擎的。

7、MVC 服務提供類。

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

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

8、其他

事件攔截類:EventBroker:過濾向系統發送的請求,防止由于臨時的錯誤或異常導致系統崩潰。

系統啟動時執行任務:IStartupTask,啟動時執行的任務主要是數據庫的初始化和加載。



注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲亚色| 亚洲综合视频网站 | 免费欧美精品 | 亚洲第一成人久久网站 | 黄色特级片黄色特级片 | 亚洲精品aa| 媚药按摩痉挛w中文字幕 | a视频在线免费观看 | 日本欧美中文字幕 | 精品成人av一区二区三区 | 国产91九色视频 | 黄色特级视频 | 草莓视频在线导航 | 91精品国产综合久久婷婷香 | 国产99精品视频 | 国产99久久精品一区二区 | 欧美激情区| 久久精品视频日本 | lutube成人福利在线观看 | 成人免费一区二区三区 | 黄视频免费在线观看 | 久久精品欧美电影 | av不卡免费在线 | 成人免费福利视频 | 国产午夜亚洲精品理论片大丰影院 | 精品国产乱码一区二区三区四区 | 成人在线视频精品 | 亚洲成人自拍电影 | 黄网站在线播放视频免费观看 | 国产视频在线免费观看 | 日本aⅴ在线 | 欧美一级黄色免费看 | 日本免费一区二区三区四区 | 天天色综合2 | 精品久久999| 精品中文字幕久久久久四十五十骆 | 成人午夜在线观看视频 | 男女生羞羞视频网站在线观看 | 91精品国产91久久久久久丝袜 | 色无极影院亚洲 | 广州毛片 |