2011-03-03 21 views

回答

1

在我用辛格爾頓爲SessionFactory和HybridHttpOrThreadLocalScoped會話的Web應用程序: 這是我structuremap註冊表:

public class NhibernateRegistry: Registry 
{ 
    public NhibernateRegistry() 
    { 
     For<ISessionFactory>() 
     .Singleton() 
     .Use(new NHibernateSessionFactory(connectionString).SessionFactory); 

     For<ISession>() 
     .HybridHttpOrThreadLocalScoped() 
     .Use(o => o.GetInstance<ISessionFactory>().CurrentSession); 
    } 
} 

我NHibernateSessionFactory類似於書中使用SessionProvider類。 一切都被設置在請求(Web應用程序)結束:

protected void Application_EndRequest(object sender, EventArgs e) 
{ 
    ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects(); 
} 

我使用一個通用存儲庫:

public class GenericRepository<T> : IGenericRepository<T> where T : class 
{ 
    private readonly ISession _session; 

    public GenericRepository(ISession session) 
    { 
     _session = session; 
    } 

    public T Load(Guid Code) 
    { 
     return (_session.Load<T>(Code)); 
    } 

} 

,但你可以很容易地用自己的實現改變它。 我在這裏註冊知識庫:

public class RepositoriesRegistry : Registry 
{ 
    public RepositoriesRegistry() 
    { 
     For <Data.IRepository<Domain.Reminder, Guid>>() 
      .HybridHttpOrThreadLocalScoped() 
      .Use<Data.NH.Repository<Domain.Reminder, Guid>>(); 
    } 
}