使用依賴注入容器時,大部分都是使用構造函數來注入或者是xml配置文件。也有很多支持屬性注入。Autofac就是其中一個。
1 為什么要有屬性注入?
對於一些使用特頻繁的類或者方法,很多類都會用到,那么使用屬性注入會節省更多的力氣,而且在設計的時候就可以提早的把該屬性給定義出來。
2.哪些需求需要用到屬性注入?
舉幾個比較實際的例子:日志功能、統一事務提交、當前用戶附加信息的獲取等等。
Autofac中如何實現屬性注入呢?我們以注入日志屬性為例說明。我們使用Castle的日志類為例。
1.創建一個繼承Module類的LoggingModule。
創建一個查找Autofac注入的某個組件中是否有實現了ILogger的類,然后為該屬性賦值
2.重寫AttachToComponentRegistration方法,當某個有ILogger屬性的類被實例化時,執行上面的方法。
3.創建一個使用屬性注入的類
創建的Foo類,有一個屬性是Logger。當系統運行時,需要實例化一個Foo類時,會執行LoggingModule中的代碼,為該Logger屬性賦值。
4.測試代碼:
上圖中我們創建一個容器,注入需要的組件,並獲取一個Foo類的實例,執行Bar方法,運行到
var foo=container.Resolve<IFoo>()代碼時,我們設置一個端點,如下圖:
當IFoo需要被Resolve的時候,執行該方法。
現實中很多時候不管是業務方面還是基礎代碼功能方面都可能需要用到這個方法。希望對使用Autofac的小伙伴們有點幫助。