ASP.NET MVC Autofac依賴注入的一點小心得(包含特性注入)


前言

IOC的重要性 大家都清楚..便利也都知道..新的ASP.NET Core也大量使用了這種手法..

一直憋着沒寫ASP.NET Core的文章..還是怕誤導大家..

今天這篇也不是講Core

 前面寫了C#開發移動應用系列  就第一篇和最后一篇上了最多推薦 - -  也許大家確實不看好吧..

算了..廢話不多說.開始今天的東西吧..

 本篇文章不講為何我們要用IOC..只講Autofac使用中的一些小心得

 

正文

1.基本注入

首先我們要構造一個容器,代碼如下:

//第一步: 構造一個AutoFac的builder容器
ContainerBuilder builder = new ContainerBuilder();

第二步..注入自己需要的服務和繼承關系.  類似下面:

//注入倉儲
builder.RegisterGeneric(typeof(Repository<,>)).As(typeof(IRepository<,>)).InstancePerLifetimeScope();

嗯..這里解釋一下是什么意思..

RegisterGeneric 注入你的服務類,后面的As則是你服務類繼承的接口.

InstancePerLifetimeScope為你注入的這個服務的生命周期.(注:生命周期我們后面講)

 

 

2.控制器注入

采用屬性注入的方式,注入控制器

//注入控制控制器
builder.RegisterControllers(assemblys.ToArray()).PropertiesAutowired().InstancePerLifetimeScope();

嗯..這里面的assemblys.ToArray().. 就是一些你要注入到控制器里面的程序集..

嗯 我是直接通過統一接口 然后批量注入..你們自己隨意..

PropertiesAutowired()的意思就是采用屬性注入的方式

 

3.特性注入

我們在使用MVC的時候,肯定會用到特性..肯定會有一些自己定義的特性..那么這些特性里面要用到相關的服務,該怎么注入呢..如下:

//注入特性
 builder.RegisterFilterProvider();

是的.. 你沒看錯..MVC里面就一句話就行了..特性里面就可以取到想要的服務了..(注:WebAPI不可以,具體請查官方文檔)

 

4.生成容器並提供給MVC

代碼如下:

//通過容器配置生成容器. 
 var container = builder.Build();
 //提供給MVC
 DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

 

5.一些雜七雜八

//注入類用這個
builder.RegisterType(要注入的類型)
//注入泛型類用這個
builder.RegisterGeneric(要注入的類型)

 

 

6.關於生命周期

InstancePerDependency()

瞬時,嗯..就是服務對於每次請求都會返回單獨的實例

InstancePerLifetimeScope()

基於線程或者請求的單例..嗯 就是一個請求 或者一個線程 共用一個

SingleInstance()

嗯..沒別的 就是單例.. 整個項目公用一個

InstancePerRequest()

嗯..針對MVC的,或者說是ASP.NET的..每個請求單例

 

 到此就結束了.

 

 

最后

嗯..內容不多,勝在實用..分享一下吧, 有問題的地方希望大神指正一下,也順便是自己的一個記錄吧..


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM