1

私は簡単な答えではないと簡単な質問をしました。実行時にアセンブリ/エンティティを円滑にマップする

Wordpressのようなプロジェクトを考えてみましょう。 Wordpressの基盤は素晴らしいですし、開発者はウィジェットやプラグインなどで拡張するようにビルドしました。

今、NHibernateは特にFluent Mappingsと考えています。

これらをまとめて、素晴らしい安定した「ベース」システムを持っていますが、外部アセンブリから提示されたマッピングをどのように読み込むのですか?リフレクションを使用してアセンブリをオンザフライでロードする必要がありますが、nHibernate、Fluentlyを最初に実行して、これらのアセンブリから追加のエンティティがロードされることを認識するにはどうすればよいですか?どのようにそれらを参照していますか?

私はあなたができることを知っていますが、設定が完了した後に実行時にマッピングを追加すると、よくSessionFactoryを再作成する必要があります。このため、実行時に必要なエンティティをすべてロードする必要があります。

私はこれもDependancy Injectionでいくらか達成できることを知っていますが、私はそのルートに行くこともそれに付属する極端な荷物も望んでいません。

プレーンな古いnHiberante設定ファイルを変更し、新しいエンティティを反映するために実行時に参照できる場合、私はそれをFluentで行う方法があると仮定できます。

また、答えに基づいて:基本プロジェクトまたはDATA ACCESSアセンブリから構成を行いますか?

ありがとうございました。

+0

「それに付随する極端な荷物」私はあなたが参照する極端な荷物を尋ねることができますか?たぶん、IoCコンテナの理解を助けることができます。 –

+0

私は確かにそれらをよりよく理解したいと思います。そこにあるドキュメントの多くは、よく知られているものではなく、ソフトウェアの専門家のために設計されています。彼らは基本的な知識に戻ったり、必要な中間コードを取り除いたりしません。私はそれをお願い申し上げます。私は城で回り込んだことがありましたが、ドキュメントが完成していないので、2日ほどかかりました。私の意図したプロジェクトで城を使うことはできませんでした。私はそれのジストを得て、なぜそれがメガ有用であるのですか?私はそれが過度なプロジェクトのために恐れています。 – Anthony

答えて

4

NHibernate ConfigurationオブジェクトをFluently.Configure()に渡すことができます。そうすれば、設定を更新できます。あなたが言ったように、セッションファクトリを再作成する必要があります。

あなたは(そして

Assembly.GetExportedTypes() 
     .Any(x => x.IsClass 
       && !x.IsAbstract 
       && typeof(IMappingProvider).IsAssignabledFrom(type)) 

または類似を確認し、Assembly.Load)およびアセンブリを追加流暢マッピングクラスを含むアセンブリ用のbinフォルダにアセンブリをスキャンすることができます。すべてのアセンブリがスキャンされると、(再)セッションファクトリを作成します。

私は書いた拡張可能なアプリケーションフレームワークで似たようなことをしています(ただし、Fluent NHibernateからコードでNHibernateマッピングに移行しましたが、原則は同様です)。

+0

"NHibernate mapping by code"の意味を説明できますか?これはFluentに似ていますか? – Anthony

+0

NHibernate 3.2には、XML /属性の代わりにコードを使用してクラスをマッピングする方法と、慣例によって自動的にクラスをマッピングする方法が組み込まれています。その目的はFluentNHibernateに似ていますが、構文は少し異なります。私はそれが必ずしも良いとは言いませんが、私はNH 3.2に移行し、外部依存関係の数を減らしたいと考えました。 FNHはNHの後ろに少しあり、現在NH 3のみをサポートしています。1(正式に)。 http://stackoverflow.com/questions/5777898/docs-examples-for-nhibernate-3-2-mapping-by-code –

+0

を参照してください。私はFluentで始めることを考慮して検討することがあります。上記のように私の最初のクエリを同様の方法で行うことができますか?これは私のケースでは基本プロジェクト、Webアプリケーションから行うことも、例えばデータアクセスアセンブリなどの「中間」アセンブリから行うこともできます。 – Anthony

関連する問題