2017-12-10 65 views
0

NHibernate SessionFactory를 싱글 톤으로 만들고 Session을 범위로 만들기 위해 노력하고 있습니다.이 모든 것은 .NET 핵심 의존성 주입으로 처리됩니다. 나는 같은 Startup.cs 사람들을 구성 :.NET 핵심 DI가 처리하는 NHibernate SessionFact

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

내 질문입니다 - 어떻게 정확히 저장소 클래스, 인스턴스의 세션 또는 SessionFactory를 인스턴스를 통과합니까?

답변

1

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이 자동으로 확인됩니다.