1

2 つのオブジェクト インスタンスを構造マップに構成しました

x.ForRequestedType<IStayOnTillAppDies>().TheDefaultIsConcreteType<StayOnTillAppDies>().CacheBy(InstanceScope.Singleton);

x.ForRequestedType<IDiesWhenRequestObjectDies>().TheDefaultIsConcreteType<DiesWhenRequestObjectDies>().CacheBy(InstanceScope.PerRequest);

ご覧のとおり、1 つはシングルトン/共有スコープ オブジェクトで、もう 1 つは PerRequest です。

シングルトン オブジェクト StayOnTillAppDies は、アプリが強制終了されるまで存続しますが、PerRequest オブジェクト DiesWhenRequestObjectDies は、要求元のスコープが終了したときにメモリからクリーンアップされることになっています。

StayOnTillAppDies でオブジェクト DiesWhenRequestObjectDies を使用する必要があるため、コンストラクター インジェクションを使用してそれに応じて注入されます。

public class StayOnTillAppDies : IStayOnTillAppDies 
{
  private readonly IDiesWhenRequestObjectDies   _diesWhenRequestObjectDies;

  public StayOnTillAppDies (IDiesWhenRequestObjectDies diesWhenRequestObjectDies)
  {                       
    _diesWhenRequestObjectDies = diesWhenRequestObjectDies;
  }

  ....
  ....
  ....
}

_diesWhenRequestObjectDies は StayOnTillAppDies の 1 つまたは 2 つの場所でのみ必要ですが、StayOnTillAppDies はシングルトン スコープであるため、ここでは注入されたオブジェクトは決して解放されません。

PerRequest オブジェクトが要求された期間のみ保持され、後で収集できる状態になるようにするには、これをどのように処理すればよいでしょうか?

4

1 に答える 1