我有一个asp.net进程,该进程也使用来自servicebus(MassTransit)的消息。对于webrequests,我的数据库 session 以PerWebRequest生活方式解决。
但是,当该进程使用来自MassTransit的消息时,由于没有HttpContext可用,我需要数据库 session 具有另一种生活方式。
我做了这个:
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;
}
}
谁能告诉我,这是否是正确的方法?如果不是,那是什么?
谢谢。
编辑:我刚刚用一些似乎可以正常工作的代码更新了问题(未经测试)。从温莎的角度来看,我仍然很想知道这是否安全和合理。
最佳答案
尝试使用hybrid lifestyles之一。