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的..每個請求單例
到此就結束了.
最後
嗯..內容不多,勝在實用..分享一下吧, 有問題的地方希望大神指正一下,也順便是自己的一個記錄吧..
ASP.NET MVC Autofac依賴註入的一點小心得(包含特性註入)