質問

依存関係の注入のためにアプリケーション内でIoCを使用する最良の方法に頭を包もうとしていますが、少し問題があります。

WPFアプリでMVPパターンの緩やかな実装を使用しています。基本的に、プレゼンタークラスがインスタンス化され、ビューとタスク(たとえば、EmployeePresenterのIEmployeeViewとIEmployeeTask)がプレゼンターに挿入されます。

これらのインスタンスを手動で注入する代わりに、IoCコンテナーを使用したい(Unityを試していますが、ninjectやStructure Mapなどでも発生するでしょう)が、プレゼンターが作成された場合(またはIoCコンテナから解決)非同期デリゲート呼び出し、またはイベントスレッド(たとえば、STAスレッドではない)で、WPFウィンドウの新しいインスタンスを作成すると、次の例外がスローされます。

  

現在のビルド操作(ビルドキー   ビルドキー[名前空間 .Window1、null])   失敗:呼び出しスレッドは   STA、多くのUIコンポーネント   これが必要です。

今、新しいウィンドウインスタンスなどがSTAである必要があることを知っていますが、UIをSTAスレッドで作成する必要がある場合でも、IoCコンテナーを使用して依存関係の注入を行うことは可能ですか?

この問題を見ると、解決されるクラス/タイプは、登録されたときではなく、解決時にインスタンス化されているように見えます...

役に立ちましたか?

解決

Factoryを使用して、Presenterオブジェクトを作成します。そのようにして、STAスレッドのPresenterFactory内からPresentersの汎用インスタンスを作成し、必要に応じて単純に渡すことができます。

他のヒント

あなたの問題はIoCとは何の関係もありません。WPFオブジェクトは、それを作成した同じスレッドからしかアクセスできません。スレッド)。

Dispatcher.BeginInvokeを使用してメインスレッドでコードを実行し、そこからIoc contianerを呼び出します。

Unityについて言及しましたが、Unityを使用するComposite Application Libraryの使用を検討しましたか? StockTraderサンプルアプリケーションは、Unityを使用して、プレゼンテーションモデルにビューを挿入します。実際にCALを使用したくない場合-詳細: ( http://msdn.microsoft.com/en-us/library/cc707890 .aspx または http://www.codeplex.com/CompositeWPF

あなたはまだ彼らが問題をどうやって回避したかを解決できるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top