我有一个 asp.net 进程,它也使用来自服务总线(MassTransit)的消息。对于 webrequests,我的数据库会话是通过 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;
}
}
谁能告诉我,如果这是正确的方法吗?如果不是,那是什么?
谢谢。
编辑:我刚刚用一些似乎有效的代码更新了这个问题(在它未经测试之前)。我仍然很想知道这——从温莎的角度来看——是否安全可靠。