0

Я следующую конфигурацию:Servicestack NHibernate Auth Repo Нет CurrentSessionContext сконфигурировано

_container = new WindsorContainer(); 
var factory = new SessionFactoryManager().CreateSessionFactory(); 
_container.Register(Component.For<NHibernate.ISessionFactory>().Instance(factory)); 

А потом в другом месте у меня есть:

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)! 

любых получил какую-либо улику gwarn в?

[UPDATE]

В моем AppHost.Configure методе я добавил следующее:

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

Чтобы без толку - я понятия не имею, как я бы распоряжаться, что: р

также Я запутался, так как ISessionFactory вводится как любая другая часть моего приложения:

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

Значит, это должно быть всего работы?

ответ

1

Да, вы должны явно связать текущую сессию в контексте:

CurrentSessionContext.Bind(session); 

После построили сеанс. Не забудьте также избавиться от него, когда вам это больше не нужно.

+0

Arrr ok, так что это называется формой auth, которая находится в DLL, а остальная часть моего приложения с радостью создает сеанс, когда это необходимо. Хорошо ли это делать в фильтрах запросов/ответов? даже если он используется только для файлов auth? – iwayneo

+0

Я добавил обновление @Ricardo Peres – iwayneo

Смежные вопросы