.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 将自动解析。