2008-11-20 91 views
0

我試圖圍繞在我的依賴注入應用程序中使用IoC的最佳方式,但是我有一個小問題。IoC和用戶界面

我正在使用WPF應用程序的MVP模式的鬆散實現。實質上,演示者類被實例化,並且視圖和任務(例如EmployeePresenter的IEmployeeView和IEmployeeTask)被注入到演示者中。我想使用一個IoC容器(我嘗試了Unity,儘管我猜這也會發生在其他人如ninject或Structure Map),而不是手動注入這些實例,但是如果創建了演示者(或在一個異步委託調用從IoC容器解決),或一個事件線程(例如,不STA線程),然後創建一個WPF窗口的新實例拋出以下異常:

當前構建操作(建立關鍵 構建密鑰[名稱空間 .Window1,null]) 失敗:調用線程必須爲 STA,因爲許多UI c組件 需要這個。

現在,我知道新的窗口實例等需要STA,但是是否有可能使用IoC容器來執行依賴項注入,即使必須在STA線程上創建UI?

通過觀察這個問題,似乎這個類/類型來解決是在解析時實例,而不是當其註冊...

回答

2

我會說使用一個工廠來創建演示對象;這樣,您可以在STA線程的PresenterFactory中創建Presenter的通用實例,然後在需要時將其傳遞出去。

2

你的問題與IoC無關,WPF對象只能從創建它的同一個線程訪問 - 所以你必須在你的GUI的其他部分創建同一線程的主持人(而不僅僅是STA線程)。

使用Dispatcher.BeginInvoke在主線程中運行代碼並從那裏調用Ioc contianer。

+0

這是最有可能的原因,IoC容器在WPF中工作正常。 – Jab 2008-11-26 18:40:24