【发布时间】:2017-09-06 19:57:56
【问题描述】:
我为我的 Nhibernate 数据访问方法创建了一个工作单元包装器。我在 UnitOfWork 类的静态构造函数中初始化了我的会话工厂,希望它只初始化一次。
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();
}
}
然后,我在应用程序启动期间将此 unitOfWork 依赖项与 Ninject Kernel 绑定,然后期望 Ninject 在我的数据访问存储库的构造函数中解决它。 (我正在使用构造函数注入)。
public class Module : NinjectModule
{
public override void Load()
{
Bind<IUnitOfWork>().To<UnitOfWork>();
}
}
但在解决之后,我可以理解静态构造函数中的代码在对象创建期间从未执行过,因此我的 Nhibernate Session 工厂为空。
我确信我在这里遗漏了一些东西。有人能帮我理解在 Ninject 中使用静态构造函数的正确方法是什么吗?
谢谢
【问题讨论】:
-
您无需将工作单元设置为静态。它应该在没有静态关键字的情况下工作
-
如果我不将其设置为静态,使用我当前的 Ninject 绑定配置,它会导致 Ninject IOC 为每个分辨率创建单独的会话工厂。
标签: c# nhibernate ninject