我爲我的Nhibernate數據訪問方法創建了工作單元包裝。我在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的Session的工廠爲空。
我確定我在這裏錯過了一些東西。有人能幫我理解在Ninject中使用靜態構造函數的正確方法是什麼?
感謝
您不需要將您的工作單元設置爲靜態。它應該沒有靜態關鍵字 – OrcusZ
如果我沒有將它設置爲靜態,使用我當前的Ninject綁定配置,則會導致Ninject IOC爲每個分辨率創建單獨的會話工廠。 – Dinny