Web API和OwinMiddleware中的NHibernate会话管理

时间:2016-09-08 09:17:56

标签: asp.net-web-api nhibernate owin unity-container owin-middleware

我想问你关于在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

0 个答案:

没有答案