実行時にマッピングを削除することはできますか?私は簡単に十分なものを追加することができます。実行時にStructureMapからデフォルトのインスタンスタイプを削除する
ObjectFactory.Configure(ce =>
ce.ForRequestedType<IDateAdjuster>().
TheDefaultIsConcreteType<DateAdjusterForTest>());
と私はマッピングが
ObjectFactory.Model.HasDefaultImplementationFor<IDateAdjuster>()
に存在するかどうかを確認することができますが、私はデフォルトのインスタンスタイプを削除するように見えることはできません。私はこれを試みた
var config = ObjectFactory.Model.PluginTypes
.FirstOrDefault(pt => pt.PluginType == typeof(IDateAdjuster));
if (config != null) {config.Default = null;}
しかし、これは動作しません。
DateTime.Now
とDateTime.Today
のプロパティを隠すことで、テスト中、特に統合やユーザーの受け入れ中に、現在の日付と時刻が表示されるようにシステムを構成できるようにします。私がやろうとした何
はその後、私はちょうどDateTime.Now
とDateTime.Today
を使用したいがあった場合、私はそれを作成し、呼びたい、インタフェースのデフォルトの実装があったかどうかをチェックし、もしなかったです私は構造体マップにデフォルトの型を削除するよう指示することはできないようですので、今度はインターフェイスの新しいデフォルトの実装を追加し、アクティブであるかどうかを示すプロパティを持つようにインターフェイスを拡張しました。デフォルト実装は、インタフェースがアクティブでないことを示します。今はいつもインスタンスを取得して、それを使いたいかどうかを確認できます。
システムには日付と時刻固有の動作がかなりあり、クライアントはさまざまな日時にシステムがどのように動作するかをテストする必要があります。彼らは管理セクションにログインし、適切な値に日付と時刻を設定してから、デフォルト実装を適切な調整を行うテスト実装に切り替えます。それは私はちょうど私がクライアント管理者がそれを設定するときに使用したい実装切り替え、その後、それらは実行時のIoCの設定を変更
これはうまくいくかもしれませんが、残念ながらその例はあまり明確ではありません。主な問題は、コンストラクタが必要なインスタンスを知らないため、ビルド方法がわからない場合です。 – baralong
決定を行うロジックの例を使用して質問を編集すると、それがこの構文にどのように適合するかを示唆しています。 –
条件付き建設に関するヒントを編集しましたか?それとももっと情報が必要ですか? – baralong