私はCaliburn-Micro SilverlightアプリケーションのコンテナとしてCastle-Windsorを使用しています。私のViewModelオブジェクトは、WCFサービスや他のものを呼び出すので、かなりチャンクです。したがって、ウィンドウが閉じられるとき、私はcontainer.Release(viewModel)を呼び出して、Castleが設定されたさまざまなライフサイクル(this postで概説されている)を尊重して、廃棄/廃棄プロセス全体を管理できるようにします。私AppBootstrapperでCaliburn MicroとCastle WindsorでViewModelsを処理する
次のように私はでGetInstanceをオーバーライドしています
protected override object GetInstance(Type serviceType, string key)
{
if (string.IsNullOrEmpty(key)) return container.Resolve(serviceType);
return container.Resolve(key, serviceType);
}
をしかし、私はcontainer.Release(viewModel)
を呼び出すのきれいな/エレガントな方法を考え出すのに苦労しています。これに利用可能なフックがないようです。
Caliburn MicroアプリケーションでViewModelLocatorから返されたViewModelオブジェクトを解放する最も簡単な方法は何ですか?
ありがとう@サイモン。私はOnDeactivateルートを探検していたところです。はい、長いコンストラクタパラメータリストを持つVMを持っている場合、Castleはそのコンポーネントのコンストラクタのすべての依存関係を満たします。次に、コンポーネントがRelease()になると、それぞれのライフスタイルに応じて、すべての依存関係が解放されます。ここで重要なことは、Vms自身がクリーンアップ作業のいずれにも責任を負わないことです。それはすべて自動です。 –
VM自体に責任を委ねることはできますが、VMがライフサイクルの責任で汚染され始める可能性があるので、私は本当にそれを避けたいと考えています。理想的には、Releaseの責任はResolveの責任で生きていなければなりません。つまり、ブートストラップやコンテナ自体のコールスタックを上げてください。 –
VMタイプを設定した場合の例です。 (これまで城でマップされていたもの)のライフサイクル、そのタイプのインスタンスを次に要求したときに、コンテナはすでに使用されているために使用されたインスタンスを解放するだけです。 。 –