日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

从入门到放弃,.net构建博客系统(二):依赖注入

發(fā)布時間:2024/6/30 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从入门到放弃,.net构建博客系统(二):依赖注入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄:《從入門到放棄,.net構建博客系統(tǒng)》

  • 從入門到放棄,.net構建博客系統(tǒng)(一):系統(tǒng)構建
  • 從入門到放棄,.net構建博客系統(tǒng)(二):依賴注入

?

上一篇中有講到項目啟動時會進行ioc的依賴注入,但具體是怎么注入的呢?我們先一步步往下走

一、注冊autofac配置

首先bootstraper會進行初始化,接著將當前mvc控制器工廠改為AutofacControllerFactory。

1 public class AutofacConfig 2 { 3 /// <summary> 4 /// 負責調用autofac框架實現業(yè)務邏輯層和數據倉儲層程序集中的類型對象的創(chuàng)建 5 /// 負責創(chuàng)建MVC控制器類的對象(調用控制器中的有參構造函數),接管DefaultControllerFactory的工作 6 /// </summary> 7 public static void Register() 8 { 9 Bootstrapper boot = new Bootstrapper(); 10 boot.Start(); 11 12 //將MVC的控制器對象實例 交由autofac來創(chuàng)建 13 ControllerBuilder.Current.SetControllerFactory(new AutofacControllerFactory()); 14 } 15 } View Code

?

二、bootstraper開始注冊服務

在注冊服務前,我們先定義一個容器生成器ContainerBuilder,用以注冊服務;接著我們會獲取當前項目所有引用的程序集,對其中的類型進行判斷,如果符合條件就會注冊進去。那哪些類型會注冊進去呢?

有三種:

  1.?IDependency,倉儲層和服務層的接口都繼承該接口,注冊的服務會在容器每次resolve的時候,生成一個新對象

  2.?ISignleton,日志和緩存接口繼承該接口,每次解析都會返回統(tǒng)一對象,即單例對象

  3.?Module,其中暴露了ContainerBuilder對象,由模塊自定義注冊方式,項目中webapp層有個MvcControllerModule,用于將所有實現IController給注冊進去

1 public void Start() 2 { 3 Type baseType = typeof(IDependency); 4 5 // 獲取所有相關類庫的程序集 6 Assembly[] assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToArray(); 7 8 containerBuilder.RegisterAssemblyTypes(assemblies).Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract) 9 .AsImplementedInterfaces().InstancePerDependency();//每次解析獲得新實例 10 11 Type singletonType = typeof(ISignleton); 12 containerBuilder.RegisterAssemblyTypes(assemblies).Where(type => singletonType.IsAssignableFrom(type) && !type.IsAbstract) 13 .AsImplementedInterfaces().SingleInstance();// 保證對象生命周期基于單例 14 15 containerBuilder.RegisterAssemblyModules(assemblies);//所有繼承module中的類都會被注冊 16 17 var container = containerBuilder.Build(); 18 ContainerManager.SetContainer(container); 19 } View Code

依賴注冊好后,會生成IOC容器,接著將容器管理器的IOC容器設置為該容器,以后所有的服務的解析可以通過管理器來解析。

?

?三、自定義Autofac控制器工廠

第一步中我們將控制器工廠改為AutofacControllerFactory,這個控制器工廠重寫了GetControllerInstance,主要在解析控制器類型時,用ContainerManager去解析控制器類型,這樣就能把控制器中的依賴給注入進去。

1 protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 2 { 3 if (controllerType == null) 4 { 5 return base.GetControllerInstance(requestContext, controllerType); 6 } 7 8 return ContainerManager.Resolve(controllerType) as IController; 9 } View Code

?

demo:http://tonyblogs.top/

Git源碼:https://github.com/Halifa/TonyBlogs

如本文對您有幫助請移步右下角,推薦本文,謝謝大家的點贊,因為您的支持是我最大動力

轉載于:https://www.cnblogs.com/shinly/p/7351799.html

總結

以上是生活随笔為你收集整理的从入门到放弃,.net构建博客系统(二):依赖注入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。