如果你想看到溫莎城堡與NHibernate的集成一個完整的例子,然後我想看看Sharp Architecture
夏普是一個「最佳實踐」模板項目的嘗試,並利用一些高科技的(城堡和NHibernate的包括在內)。雖然它所做的一些事情可能不符合你的口味,但它會清楚地向你展示它可以融合在一起的其中一種方式。
如果你想查看底層發生了什麼,你可能需要去GitHub的源代碼倉庫中搜索,因爲夏普在模板項目中使用它自己的基類,這些基類是預編譯的(它仍然是開放的源,所以你可以看到發生了什麼,如果你想)。
當我將我的架構放在一起時,這對我來說是無價的幫助,我可以誠實地說,Castle和nHibernate是要走的路,所以您非常適合正確的道路。
編輯點評1:也許我在這裏有點困惑。根據城堡筆記
設施是擴展容器的主要方式。使用設施 可以將容器與外部框架(如WCF或NHibernate)集成,爲容器(如事件接線,事務支持...或組件(同步,可啓動 語義...))添加新功能。
據我所知,城堡Nhibernate設施和城堡NhibernateIntegration是設施,必須基於一個容器。
如果你想在沒有容器的情況下工作,那麼你需要使用某種形式的Singleton Factory來管理SessionFactory。有一個這樣的例子here。
就控制交易的屬性而言,這就是夏普的做法(參見here)。你可能會重新使用這段代碼,並用你自己的Singleton替代NHibernateSession,如theirs。
你不需要實現UnitOfWork,因爲nHibernate實際上是爲你做的。您真正需要的是一種架構,允許您在單一控制點(單例)中管理事務,並在每個存儲庫中都可用。
我不能使用IoC容器,我的項目不允許使用它。我需要實現一些沒有IoC的東西。你知道我該怎麼做,我的意思是,只使用模式控制交易,我認爲UnitOfWork模式會很好,但我不知道如何才能阻止它。謝謝! –