サービスバス(MassTransit)からのメッセージも消費するasp.netプロセスがあります。Web リクエストの場合、データベース セッションは PerWebRequest ライフスタイルで解決されます。
しかし、プロセスが MassTransit からのメッセージを消費する場合、HttpContext を使用できないため、データベース セッションに別のライフスタイルを持たせる必要があります。
私はこれを作りました:
public class PerRequestLifeStyleManager : ILifestyleManager
{
readonly PerWebRequestLifestyleManager perWebRequestLifestyleManager;
readonly PerThreadLifestyleManager perThreadLifestyleManager;
public PerRequestLifeStyleManager()
{
perWebRequestLifestyleManager = new PerWebRequestLifestyleManager();
perThreadLifestyleManager = new PerThreadLifestyleManager();
}
public void Init(IComponentActivator componentActivator, IKernel kernel, ComponentModel model)
{
perWebRequestLifestyleManager.Init(componentActivator, kernel, model);
perThreadLifestyleManager.Init(componentActivator, kernel, model);
}
public object Resolve(CreationContext context)
{
return GetManager().Resolve(context);
}
public bool Release(object instance)
{
return GetManager().Release(instance);
}
public void Dispose()
{
GetManager().Dispose();
}
ILifestyleManager GetManager()
{
if (HttpContext.Current != null)
{
return perWebRequestLifestyleManager;
}
return perThreadLifestyleManager;
}
}
これが正しい方法であるかどうか、誰か教えてもらえますか? そうでない場合、何ですか?
ありがとう。
編集: 動作するように見えるコードで質問を更新しました (テストされていない前)。ウィンザーの観点から見て、これが安全で健全であるかどうか、私はまだ知りたがっています.