3

私のアプリケーションは、リクエストの実装ごとにセッションでNHibernateを使用します。現在のnhibernateセッションにアクセスするためのスレッドセーフなシングルトンを提供するコアライブラリがあります。

そのシングルトンは、BeginRequestイベントとEndRequestイベントでWebアプリケーションから活用され、各リクエストでセッションを確実に開始および終了します。さらに、私のDataAccessレイヤーは同じシングルトンを使用してデータアクセスを実行するため、同じnhibernateセッションが利用されます。

実行時にNHibernateのコンテキスト情報、つまり接続文字列を推測できるように、方程式にNinjectを追加しました。どのデータベースにアクセスするかを示すWeb構成の値を変更したいと思います。問題は、これを行うために、そのプロパティの1つであるIConnectionStringProviderを推測できるシングルトン(上記)が必要なことです。

正しく配線されていますが、シングルトンにインスタンス化されたプロパティがないため、すべてが壊れます。

それで、私の質問に対して... Ninjectをシングルトンで動作させるにはどうすればよいですか、またはNinjectで動作するように実装を変更するにはどうすればよいですか?

4

2 に答える 2

2

たぶん、あなたはシングルトンをそのような定数にバインドしてみることができます

Bind<ISession>().ToConstant(SessionSingleton.Instance);

これは、SettingsオブジェクトのSettings.Defaultシングルトンを使用して行い(ほとんどの場合、設定を実際に試す時間ができるまでのパッチメソッドとして)、非常にうまく機能します。

于 2009-08-21T00:10:29.270 に答える
1

これは、多くの人がシングルトンで遭遇する一般的な問題です。NHibernateについて具体的にコメントすることはできませんが、シングルトンデザインパターンがあなたが説明する問題に苦しむ理由についてのMiskoの記事をチェックしてください。コメントとリンクされた記事を読んで、それについて何をすべきかを確認してください(またはグーグルで「すべてのシングルトンはどこに行ったのですか?」を検索してください)。

このトピックに興味がある場合は、「singleton-i-love-you-but-youre-bringing-me-down」をグーグルで検索することもできます。

うまくいけば、それは少し役立つでしょう。

于 2009-08-20T21:00:59.420 に答える