第一次問一個問題,很長時間的讀者。MEF,實體框架和構造函數注入
我們有一個新的應用程序,大量使用MEF和DI(通過構造函數參數注入)來處理對象實例化。我們正在努力的一個領域是創建EF上下文。要創建EF上下文,您需要一個conn字符串(例如,在app.config中)。但是我們的應用程序讓我們的用戶在啓動時提供服務器/數據庫(以及用戶名/密碼)。所以問題是我們如何使用MEF來使用默認的conn字符串實例化EF上下文,然後用用戶提供的值替換登錄後的conn字符串,然後在MEF容器中更新它?
我們目前處理它的唯一方法是在LoginViewModel中使用IoC.Get類型調用來將現有實體對象拉出容器,然後使用新值設置其連接字符串。然後MEF使用這個新字符串向前移動,並在我們將其注入應用程序時自動創建/配置上下文。
關注的是服務定位器的氣味(發生在組合根之外)以及其他問題,如MEF + DI +容器使用。許多評論者指出,盲目堅持一種模式是一種災難。問題是如果這是處理這種情況的適當方式?我們是否應該使用創建的抽象工廠,然後使用它來創建上下文?
如何在應用程序的引導部分中創建上下文時替換EF的連接字符串,並因此在登錄時提供新的conn字符串時已經實例化? MEF通常會重複創建/處理上下文 - 那麼如何設置新的連接字符串?我們使用共享策略創建上下文部分,理論上只有一個並且從不銷燬,因此只需更新連接字符串就可以工作。