Autofac 學習心得

紀錄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 ....