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