2017-12-10 38 views
0

Der Versuch, die NHibernate-SessionFactory als Singleton und Session als Bereich zu definieren, wird durch die .NET Core-Abhängigkeitsinjektion gehandhabt. Ich baut die in der Startup.cs als solche:NHibernate SessionFactory von .NET Core DI behandelt

 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() 
     ); 

Meine Frage ist - wie kann ich genau die Session übergeben oder die Session Instanz, zum Beispiel in einer Repository-Klasse?

Antwort

1

Übergeben Sie einfach das ISession-Objekt als Parameter an den Repository-Konstruktor.

public class Repository { 
    private readonly ISession session; 

    public Repository(NHibernate.ISession session) { 
     this.session = session; 
    } 

    public void DoSomething() { 
     this.session.SaveOrUpdate(...); 
    } 
} 

Wenn Sie fragen Sie nach einer Repository-Instanz aus der ServicesCollection (DI), wird die ISession automatisch aufgelöst werden.

Verwandte Themen