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的..每個請求單例
到此就結束了.
嗯..內容不多,勝在實用..分享一下吧, 有問題的地方希望大神指正一下,也順便是自己的一個記錄吧..