NhibernateのデータアクセスメソッドのためにUnit Unit of Workerを作成しました。 UnitOfWorkクラスの静的コンストラクタ内でセッションファクトリを初期化します。これは、一度しか初期化されないことを望みます。ninjectを作成する静的コンストラクタでの依存関係
public class UnitOfWork : IUnitOfWork
{
private static readonly ISessionFactory _sessionFactory;
static UnitOfWork()
{
var oracleConfiguration = OracleDataClientConfiguration.Oracle10.ConnectionString(ConfigurationManager.ConnectionStrings[Constants.CONNECTION_STRING].ConnectionString);
_sessionFactory = Fluently.Configure()
.Database(oracleConfiguration)
.Mappings(m => m.FluentMappings.Add<MyMap>())
.BuildSessionFactory();
}
}
私はその後、私のアプリケーションの起動時にNinjectのカーネルでこのUnitOfWorkの依存性を結合した後、Ninjectは私のデータアクセスリポジトリのコンストラクタでそれを解決することを期待。 (コンストラクタインジェクションを使用しています)。
public class Module : NinjectModule
{
public override void Load()
{
Bind<IUnitOfWork>().To<UnitOfWork>();
}
}
しかし解像度の後、私はNHibernateのセッションファクトリがnullである静的コンストラクタ内のコードは、オブジェクトの作成時に実行されなかったことを、結果として理解することができました。
ここに何か不足していると確信しています。 Ninjectで静的コンストラクタを使用する正しい方法が何であるか理解してくれる人がいますか?あなたのUOWのコンストラクタは、このようにあなたはそれが静的と宣言され、一度だけ実行したい
おかげ
作業単位を静的に設定する必要はありません。静的キーワードなしで動作するはずです – OrcusZ
現在のNinject Binding Configurationを使用して静的に設定しないと、Ninject IOCが各解像度ごとに個別のセッションファクトリを作成します。 – Dinny