紀錄Autofac 的一些學習心得
除了MVC 本身會下載的Framework 外,除了 log4net 個人最常引用在目前.NET 專案的Framework 大概就是 Autofac 了
Autofac 是一個 IoC Framework
實務上可以幫助 .NET 開發人員快速寫出一個鬆散耦合的程式架構
簡單來說,如果 SourceCode 打開,每個Solution 下面都只有一個專案,
或者除了參考 .NET Framework 沒有參考到其他的library,那基本上也用不到 IoC Framework
沒有相依性需要考慮的專案,個人認知應該跟鬆散耦合扯不上關係
換句話說,如果有參考到其他的Library,但是沒有用到IoC Framework 的話,那程式碼的相依性常會有些問題
這傢伙的官方網站在
http://autofac.org/
基本的用法很簡單
只要把 Getting Start 的Code 實作一遍,就差不多知道這是什麼東西了
http://autofac.readthedocs.org/en/latest/getting-started/index.html
中文的話,覺得黑大介紹的很不錯
http://blog.darkthread.net/post-2011-06-07-autofac-notes-1.aspx
個人實作上有幾個心得
1. IContainer 可以變成一個Static instance,一個Application 可以只有一份就好了
通常不曉得Container要放哪邊的話
網站程式有時候會放在global ,但個人是放在如core 或者 framework的專案類型下面
2. 用Container 物件實作 Singleton Pattern 非常好用
http://blog.darkthread.net/post-2013-11-02-autofac-notes-2.aspx
3. 類別設計的時候,建議考慮建構子注入
DI有好幾種實現方法,搭配建構子注入(Constructor Injection)使用方式大概是最常用的
如過要看建構子注入的專案例子,可以參考 nopcommerce (https://github.com/nopSolutions/nopCommerce)
特點就是幾乎看不到 new 這個關鍵字
4. Resolve 物件的時候儘量搭配使用lifetime scope
IoC Framework 最麻煩的部分,應該是Resource Manage,簡單說就是會不會造成memory leak 的問題
搭配 lifetime scope ,autofac基本上不會有memory leak的問題
PS: 如果應用程式沒有長大到會建立上千萬個物件,大概不會覺得不用lifetime scope有什麼用
需要K點文件,可以從這邊著手
http://blog.darkthread.net/post-2013-11-03-autofac-notes-3-lifetime-scope.aspx
http://autofac.readthedocs.org/en/latest/lifetime/index.html
http://nblumhardt.com/2011/01/an-autofac-lifetime-primer/
最後程式碼會看到
一堆interface
一堆建構子裡面有interface
Happy Coding ....