.NET Core DI 处理的 NHibernate SessionFactory
NHibernate SessionFactory handled by .NET Core DI
尝试将 NHibernate SessionFactory 设为单例并将 Session 设为作用域,所有这些都由 .NET Core 依赖注入处理。我在 Startup.cs 中配置了这些:
services.AddSingleton<NHibernate.ISessionFactory>(factory =>
{
return Fluently
.Configure()
.Database(() =>
{
return FluentNHibernate.Cfg.Db.MsSqlConfiguration
.MsSql2012
.ShowSql()
.ConnectionString(ConnectionString);
})
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Model>())
.BuildSessionFactory();
});
services.AddScoped<NHibernate.ISession>(factory =>
factory
.GetServices<NHibernate.ISessionFactory>()
.First()
.OpenSession()
);
我的问题是 - 我如何准确地传递 Session 或 SessionFactory 实例,例如,在存储库 class 中?
只需将 ISession 对象作为参数传递给存储库构造函数。
public class Repository {
private readonly ISession session;
public Repository(NHibernate.ISession session) {
this.session = session;
}
public void DoSomething() {
this.session.SaveOrUpdate(...);
}
}
当您从 ServicesCollection (DI) 请求存储库实例时,ISession 将自动解析。
尝试将 NHibernate SessionFactory 设为单例并将 Session 设为作用域,所有这些都由 .NET Core 依赖注入处理。我在 Startup.cs 中配置了这些:
services.AddSingleton<NHibernate.ISessionFactory>(factory =>
{
return Fluently
.Configure()
.Database(() =>
{
return FluentNHibernate.Cfg.Db.MsSqlConfiguration
.MsSql2012
.ShowSql()
.ConnectionString(ConnectionString);
})
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Model>())
.BuildSessionFactory();
});
services.AddScoped<NHibernate.ISession>(factory =>
factory
.GetServices<NHibernate.ISessionFactory>()
.First()
.OpenSession()
);
我的问题是 - 我如何准确地传递 Session 或 SessionFactory 实例,例如,在存储库 class 中?
只需将 ISession 对象作为参数传递给存储库构造函数。
public class Repository {
private readonly ISession session;
public Repository(NHibernate.ISession session) {
this.session = session;
}
public void DoSomething() {
this.session.SaveOrUpdate(...);
}
}
当您从 ServicesCollection (DI) 请求存储库实例时,ISession 将自动解析。