我有一个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之一。

10-06 14:30