1

私は Nancy Web アプリを構築しており、DB アクセスに OrmLite を使用しています。すべてのリクエストが新しい DB 接続を開き、それを閉じないことに気付きました。OrmLiteConnection クラスを Application コンテナに登録すればアプリケーションスコープになると思っていたのですが、何か抜けているようです。

ここに私のコードがあります(でConfigureApplicationContainer):

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

2 に答える 2

0

登録にスコープを追加する必要があります。

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();;

私の知る限り、これにより、インスタンスがスコープの最後で確実に破棄されます。したがって、それ以上のことを行う必要がある場合はDispose()、その時点で実行できるデリゲートを提供する何らかの方法を見つける必要があるかもしれません。

于 2016-12-19T11:40:59.600 に答える