WindowsWorkflowFoundationの内部を理解しようとしています。そのため、いくつかのソフトウェアコンポーネントがあり、条件ベースのシーケンシャルワークフローまたはステートマシンワークフローのワークフローの形でそれらを絡み合わせています。今、私は(ここでは間違っているかもしれませんが)IoC +依存性注入(UnityまたはSpring.net経由)には同じことが当てはまらないと考えています。いつ何を使うの?私も正しいと思いますか?
2 に答える
質問をよく理解できていませんが、とにかく試してみます。
WF は IOC コンテナーを使用しません。ワークフロー ランタイム、サービス ロケーター、およびワークフロー アクティビティに依存関係を追加し、ワークフロー ランタイムからこれらのサービスを取得する ServiceLocator パターンを使用します。
ServiceLocator と IOC パターンは類似しており、依存関係を分離するという同じ目的を持っています。ServiceLocator を使用して依存関係を引き出すのに対し、IOC コンテナーでは依存関係をプッシュしますが、アプローチは異なります。
これがあなたの質問に答えてくれることを願っています。そうでない場合は、元の質問を言い換えてみます.
IOC コンテナーによって提供およびサービスされるコンポーネントをワークフローから使用する方法にも取り組んでいました。他の回答が述べているように、ワークフロー インスタンスは、依存関係を注入する代わりに、service-locator を使用してランタイムからサービスをプルしたいと考えています。
このギャップを埋める簡単な方法は、WF ランタイムをセットアップするときに IOC コンテナーから依存関係を取り除き、AddService を使用して依存関係をランタイムに配置することです。ワークフローは OnActivityExecutionContextLoad をオーバーライドし、サービス プロバイダーで GetService メソッドを使用して、ランタイムからそれらを取り出し、ワークフローの [NonSerialized] パブリック プロパティに挿入できます。その後、コード アクティビティなどからサービスにアクセスできます。
ワークフロー インスタンスがアクティブ化されたときに依存関係を注入するランタイム サービスを装備することもできます。