我想问你关于在Web API中处理NHibernate会话的正确方法。使用我自己的OwinMiddleware是正确的方法,在管道的开始处解析会话并在最后处理如下:
public class NHibernateSessionMiddleware
{
public NHibernateSessionMiddleware(Func<IDictionary<string, object>, Task> next, Func<ISession> sessionFunc)
{
_next = next;
_sessionFunc = sessionFunc;
}
public async Task Invoke(IDictionary<string, object> environment)
{
using (_session)
{
await _next(environment);
}
}
private readonly Func<IDictionary<string, object>, Task> _next;
private readonly Func<ISession> _sessionFunc;
private ISession _session => _sessionFunc.Invoke();
}
public static class NHibernateSessionMiddlewareExtension
{
public static IAppBuilder UseNHibernateSessionPerRequest(this IAppBuilder app, HttpConfiguration config)
{
app.Use(typeof(NHibernateSessionMiddleware), config.DependencyResolver.GetService(typeof(Func<ISession>)));
return app;
}
}
我应该以{{1}}方法通过HttpConfiguration
并解决中间件内的会话:
Use