我之前提出過這個問題,但仍然在努力尋找一個能讓我頭腦發熱的例子(請不要只是告訴我看看沒有至少某些方向的S#arp Architecture項目)。如何在不依賴NHibernate的情況下實現每個請求的NHibernate會話?
到目前爲止,我已經在我的web項目中實現了近乎持久的無知。我的倉庫類(在我的數據項目)取一個ISession構造函數:
public class ProductRepository : IProductRepository
{
private ISession _session;
public ProductRepository(ISession session) {
_session = session;
}
在我的Global.asax我揭露當前會話和正在創建和的BeginRequest和endrequest配置會話(這是我有NHibernate的依賴):
public static ISessionFactory SessionFactory = CreateSessionFactory();
private static ISessionFactory CreateSessionFactory() {
return new Configuration()
.Configure()
.BuildSessionFactory();
}
protected MvcApplication() {
BeginRequest += delegate {
CurrentSessionContext.Bind(SessionFactory.OpenSession());
};
EndRequest += delegate {
CurrentSessionContext.Unbind(SessionFactory).Dispose();
};
}
最後我StructureMap註冊表:
public AppRegistry() {
For<ISession>().TheDefault
.Is.ConstructedBy(x => MvcApplication.SessionFactory.GetCurrentSession());
For<IProductRepository>().Use<ProductRepository>();
}
這似乎是我需要的ISession和我自己的通用實現ISessionFactory,我可以在我的web項目中使用並注入我的存儲庫?
所以只是爲了澄清 - 我在我的存儲庫層中使用NHibernate並希望使用會話 - 每 - (http)請求。因此,我正在將ISession注入到我的存儲庫構造函數中(使用結構圖)。目前爲了創建和處理每個請求中的會話,我必須從我的web項目中引用NHibernate。這是我想刪除的依賴項。
感謝, 本
NHibernate根據我不是一個壞的依賴。 – 2010-05-26 12:43:17
我的web項目與存儲庫進行通信,NHibernate是存儲庫的依賴項。如果不是因爲我希望session-per-request的事實,那麼我可以在資源庫層中打開我的會話。但是,我確實希望session-per-request,但我不希望我的web項目綁定到NHibernate。 – 2010-05-26 13:25:29
Will Marcouiller:這仍然是一個依賴。依賴關係是依賴關係。如果Ben想將他的應用移植到CouchDB或MongoDB或使用內存中的對象數據庫呢? – 2010-05-26 14:22:18