0

나는 다음과 같은 구성을 구성 내 응용 프로그램의 나머지 부분에 대한Servicestack NHibernate에 인증 리포 없음의 CurrentSessionContext는

var authRepo = new NHibernateUserAuthRepository (_container.Resolve<NHibernate.ISessionFactory>()); 
_container.Register (Component.For<IAuthRepository>().Instance(authRepo)); 

public class SessionFactoryManager 
{ 
    public ISessionFactory CreateSessionFactory() 
    { 
     try { 
      var autoMap = AutoMap.AssemblyOf<Artist>() 
       .Where(t => typeof(Entity).IsAssignableFrom(t)) 
       .UseOverridesFromAssemblyOf<LocationMappingOverride>(); 

      return Fluently.Configure() 
       .Database(PostgreSQLConfiguration.PostgreSQL82.ConnectionString(c => c.FromConnectionStringWithKey("ConnectionString")).AdoNetBatchSize(50)) 
       .Mappings(m => m.AutoMappings.Add(autoMap)) 
       .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ServiceStack.Authentication.NHibernate.UserAuthMap>()) 
       .ExposeConfiguration(TreatConfiguration) 
       .BuildSessionFactory(); 
     } catch (Exception ex) { 
      var m = ex; 
     } 

     return null; 
    } 

    protected virtual void TreatConfiguration(NHibernate.Cfg.Configuration configuration) 
    { 
     configuration.SetProperty("generate_statistics", "true"); 
     configuration.SetProperty("current_session_context_class", "thread"); 
     var update = new SchemaUpdate(configuration); 
     update.Execute(false, true); 
    } 
} 

이 모든 일을하지만 난하려고 할 때 NH 인증 리포를 사용하려면 다음을 수행하십시오.

No CurrentSessionContext configured (set the property current_session_context_class)! 

누구나 단서가 있습니까?

[업데이트] 나는 다음과 같은 추가 한 내 AppHost.Configure 방법에서

:

this.GlobalRequestFilters.Add ((req, res, vm) => { 
    CurrentSessionContext.Bind(container.Resolve<NHibernate.ISession>()); 
}); 

아무 소용 - 나는 또한 내가 그 처분 얼마나 아무 생각이 없다 : P 또한

을 ISessionFactory가 내 앱의 다른 모든 부분과 같이 주입되면서 혼란 스럽습니다.

https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Authentication.NHibernate/NHibernateUserAuthRepository.cs#L20

그럼 반드시 일까요?

답변

1

예, 당신은 명시 적으로 컨텍스트에 현재 세션을 결합해야합니다

CurrentSessionContext.Bind(session); 

세션을 구축 한 후. 더 이상 필요하지 않을 때에도 폐기하는 것을 잊지 마십시오.

+0

Arrr 좋아요, 그래서 이것은 DLL에있는 auth stuff 형태로 불려지고 나머지는 제 앱이 필요할 때마다 즐겁게 세션을 만듭니다. 요청/응답 필터에서이 작업을 수행하는 것이 좋습니다. 심지어 인증 용도로만 사용됩니까? – iwayneo

+0

@Ricardo Peres 업데이트를 추가했습니다. – iwayneo