nHibernate と統合された Castle Windsor の完全な例を見たい場合は、Sharp Architectureをチェックしてください。
Sharp は「ベスト プラクティス」のテンプレート プロジェクトの試みであり、多数の技術 (Castle および nHibernate を含む) を利用しています。それが行うことのいくつかはあなたの好みに合わないかもしれませんが、すべてを組み合わせることができる方法の1つを明確に示します.
シャープがプリコンパイルされたテンプレート プロジェクトで独自の基本クラスを使用しているため、低レベルで何が起こっているかを確認したい場合は、GitHub のソース リポジトリを探しに行く必要があるかもしれません (まだオープン ソースなので、必要に応じて何が起こっているかを参照してください)。
自分のアーキテクチャをまとめていたとき、これは私にとってかけがえのない助けでした。率直に言って、Castle と nHibernate が進むべき道であると言えます。したがって、あなたは非常に正しい方向に進んでいます。
コメント1の編集:おそらく私はここで少し混乱しています。キャッスルノートによると
施設は、コンテナを拡張する主な方法です。機能を使用して、コンテナーを WCF や NHibernate などの外部フレームワークと統合し、イベント ワイヤリング、トランザクション サポートなどの新しい機能をコンテナーに追加したり、コンポーネント (同期、開始可能なセマンティクスなど) に追加したりできます。
私の知る限りでは、Castle Nhibernate Facilities と Castle NhibernateIntegration は両方とも Facility であり、コンテナに基づいている必要があります。
コンテナーなしで作業したい場合は、何らかの形式の Singleton Factory を使用して SessionFactory を管理する必要があります。ここにその例があります。
トランザクションを制御する属性に関しては、これがシャープのやり方です (こちらを参照)。このコードを再利用して、NHibernateSession を自分のシングルトンのような独自のシングルトンに置き換えることで、うまくいくかもしれません。
nHibernate が効果的にこれを行っているため、UnitOfWork を実装する必要はありません。本当に必要なのは、単一の制御ポイント (Singleton) でトランザクションを管理でき、すべてのリポジトリで利用できるアーキテクチャです。