私は2つのクラスがあり、それぞれSingletonWorker
とScopedWorker
をSingletonとScopedのライフスタイルに登録してみましょう。どちらもコンストラクタ内のIMetricSubmitter
に依存しています。ワーカーはIMetricSubmitter
を使用してロジックの一部としてメトリックを送信します。私はSingletonWorker
がDefaultMetricSubmitter
で終わるだろうとScopedWorker
はDefaultMetricSubmitter
を飾るEnrichMetricsDecorator
で終わるだろうということなScopedWorker
依存、目的のためにEnrichMetricsDecorator
を飾るのが好きDefaultMetricSubmitter
呼ばIMetricSubmitter
のシングルトン実装では、あります。今日SimpleInjectorを使用してそのような登録を作成する方法はありますか?Simple Injectorを使用して消費者のライフスタイルに基づいて条件付きでデコレータを登録する方法は?
オブジェクトグラフは基本的に次のようになります。それはデコレータを登録する方法であるRegisterDecorator
で、消費者を知っている述語を有し、RegisterConditional
を組み合わせるように見える私には
var singleton = new SingletonWorker(
new DefaultMetricSubmitter());
var scoped = new ScopedWorker(
new EnrichMetricsDecorator(
new DefaultMetricSubmitter()));
が、私は2つを組み合わせる方法を知らない。理想的には、消費コンストラクタの依存関係として要求されたときにアクティブなスコープがあるかどうかに基づいてデコレータを登録し、その場合はそのアクティブスコープのデコレータインスタンスを作成します。議論の目的のために、範囲はLifetimeScope
であると仮定することができる。
文書によると、この登録は 'を持っていません。 EnrichMetricsDecorator'がシングルトン 'DefaultMetricsSubmitter'を装飾しています、間違っていますか? – Eldar
申し訳ありませんが、よく読んでいませんでした。私が必要とするものを正確に見て、それをチェックします。ありがとう:) – Eldar
こんにちはスティーブン、あなたの提案が働いたが、私はもう少し複雑なオブジェクトのグラフが失敗した。上記の例を続けると、 'DefaultMetricSubmitter'は常にシングルトン' CachingMetricSubmitterDecorator'で装飾され、 'CachingMetricSubmitterDecorator'は消費者が' Scoped'ライフスタイルを持つという条件に基づいて 'EnrichMetricsDecorator'で装飾されるべきです。したがって、 'SingletonWorker'は' DefaultMetricsSubmitter'を装飾する 'CachingMetricSubmitterDecorator'を受け取るべきです。私はこれにどのようにアプローチすべきですか? – Eldar