为什么我不能再使用ActionFilterAttribute绑定到HttpContext?

时间:2014-09-05 16:00:11

标签: c# nhibernate asp.net-web-api fluent-nhibernate

我正在使用ASP.NET MVC 4 Web API以及AutoFac和Fluent NHibernate。在过去,我已经没有问题让以下代码工作:

public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
    if (!CurrentSessionContext.HasBind(SessionFactory))
    {
        CurrentSessionContext.Bind(SessionFactory.OpenSession());
    }

    var session = SessionFactory.GetCurrentSession();
    session.BeginTransaction();
}

突然间,当我尝试检查CurrentSessionContext是否绑定时,看起来CurrentSessionContext为null。我尝试了多种设置方法,例如以下流畅的配置:

SessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.Is(@"connectionStringHere")))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>())
            .CurrentSessionContext<WebSessionContext>()
            .BuildSessionFactory();

以及:

SessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.Is(@"connectionStringHere")))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>())
            .CurrentSessionContext("web")
            .BuildSessionFactory();

不幸的是,由于System.Web.Http.Controllers.HttpActionContext没有公开HttpContext,因此从未设置过CurrentSessionContext。这似乎是MVC 4 API行为的改变,因为这个确切的代码以前在过去的项目中工作过。

为了解决这个问题,我考虑过创建一个自定义的CurrentSessionContext类,但看起来可能需要一些带有ReflectiveHttpContext类的伏都教 - 不知道我会怎么做。

任何建议都将不胜感激。

谢谢!

0 个答案:

没有答案