次のような StructureMap 構成があります。
cfg.For<ICacheOrder>().Use<CacheOrder>().Ctor<int>().Is(context => LoginHelper.LoginID);
cfg.For<ICacheProduct>().Use<CacheProduct>().Ctor<int>().Is(context => LoginHelper.LoginID);
cfg.For<ISQLOrder>().Use<SQLOrder>().Ctor<int>().Is(context => LoginHelper.LoginID);
cfg.For<ISQLProduct>().Use<SQLProduct>().Ctor<int>().Is(context => LoginHelper.LoginID);
コンストラクター インジェクションを介して、作成時に決定される int LoginID を必要とするオブジェクトのチェーンを作成できます。静的 LoginHelper が LoginID を決定します。
現在、私の設定では、作成されたすべてのオブジェクトに対して LoginHelper が呼び出されます。おそらく StructureMap の IContext を介して、LoginID を「記憶」し、一連の作成の中で一度だけ決定する方法はありますか?
StructureMap が構築してキャッシュできる ILogin インターフェイス/コンクリートをリファクタリングして作成できることはわかっていますが、さまざまなレイヤーが単純な int LoginID のみに関係することをお勧めします。