Dot-Net
為什麼使用 ImportingConstructor 屬性?
我試圖了解什麼時候
[ImportingConstructor]比用[import]. 是個人喜好,還是允許由其他 DI 容器建構類的東西,或者有什麼好處[import]?我認為,如果您不想公開公共屬性,但 MEF 也會解析私有欄位,那麼再次,好處在哪裡?
using 的問題
[Import]在於它將對象的創建分為兩個不同且可觀察的階段:創建和初始化。Where[ImportingConstructor]允許它像其他所有 .Net 對像一樣保持為單個階段。這種差異可以通過多種方式觀察到
- 在欄位上添加新
[Import]的會更改類型的邏輯契約。然而,它不會改變公共或使用契約。這意味著即使對象依賴項發生了變化(想想單元測試),之前編譯的任何程式碼都將繼續編譯。這需要編譯時錯誤並使其成為執行時錯誤。- 如果您有
[Import]. 契約驗證引擎正確辨識所有欄位都可以作為null值存在,並且在每次使用欄位之前都需要進行檢查。- 即使您的對像在邏輯上可以具有在初始化時設置並且之後永遠不會重置的欄位,您也不能
readonly像使用普通 C# 對像那樣表達這一點。