在NancyFX应用程序中请求结束后,DB连接未关闭



我正在构建Nancy Web应用程序,并使用Ormlite进行数据库访问。我注意到每个请求都打开了新的DB连接,并且不会关闭它。我以为在应用程序容器中注册OrmliteConnection类会使应用程序划分,但看起来我缺少某些内容。

这是我的代码(在ConfigureApplicationContainer中):

container.Register<OrmLiteConnectionFactory>(new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider));
container.Register<OrmLiteConnection>(
            (cContainer, overloads) => (OrmLiteConnection) cContainer.Resolve<OrmLiteConnectionFactory>().Open());

您需要在注册中添加范围:

container
    .Register<OrmLiteConnectionFactory>(new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider))
    .AsSingleton(); // I think this is by default, but sometimes being explicit is good.
container
    .Register<OrmLiteConnection>(
        (cContainer, overloads) => (OrmLiteConnection) cContainer.Resolve<OrmLiteConnectionFactory>().Open())
    .AsPerRequestSingleton();;

afaik,这将确保在范围的结尾处置这些实例。因此,如果您需要做的超过Dispose(),那么您可能需要找到某种可以在当时执行的代表的方式。

我将OrmLiteConnection的注册移至ConfigureRequestContainer。然后我覆盖RequestStartup并添加:

pipelines.AfterRequest += (ctx) => {
    //close the connection
    container.Resolve<OrmLiteConnection>().Dispose();
};

相关内容

  • 没有找到相关文章

最新更新