我为我的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