1. 程式人生 > >ASP.NET MVC Autofac依賴註入的一點小心得(包含特性註入)

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

使用 quest ont var nbsp sin posit size 繼承關系

前言

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的..每個請求單例

到此就結束了.

最後

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

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