1 つのアプリケーションがデータを取得する 3 つの SQL Server データベースがあります。NHibernate を使用して、さまざまなデータベースからデータを取得しています。各データベースが独自のアセンブリに独自のリポジトリとクラス マッピングを持つようにセットアップしました。Castle.config ファイルでは、Castle NHibernate 機能を使用してデータベース接続をセットアップしています。
<?xml version="1.0" encoding="utf-8" ?>
<castle>
<facilities>
<facility id="factorysupport" type="Castle.Facilities.FactorySupport.FactorySupportFacility, Castle.Windsor" />
<facility id="nhibernate" isWeb="false" type="Castle.Facilities.NHibernateIntegration.NHibernateFacility, Castle.Facilities.NHibernateIntegration">
<factory id="databaseone.factory" alias="databaseone">
<settings>
<!--Settings Here -->
</settings>
<assemblies>
<assembly>DAL.DatabaseOne</assembly>
</assemblies>
</factory>
<factory id="databasetwo.factory" alias="databasetwo">
<settings>
<!--Settings Here -->
</settings>
<assemblies>
<assembly>DAL.DatabaseTwo</assembly>
</assemblies>
</factory>
<factory id="databasethree.factory" alias="databasethree">
<settings>
<!--Settings Here -->
</settings>
<assemblies>
<assembly>DAL.DatabaseThree</assembly>
</assemblies>
</factory>
</facility>
</facilities>
</castle>
私のすべてのリポジトリには、パラメーターとして ISessionFactory を取るコンストラクターがあります。
public MyRepository<T> : IRepository<T>
{
public MyRepository(ISessionFactory factory)
{
//Do stuff here
}
}
さまざまなリポジトリを定義したいインストーラー クラスがあります。
//In install method of IWindsorInstaller
container.register(Component.For(typeof(IRepository<>)).ImplementedBy(typeof(MyRepository<>));
1 つのデータベースを使用すると問題なく動作します。2 番目のデータベースをミックスに追加すると、同じ ISessionFactory がすべてのリポジトリに挿入されます。私の質問は、これを処理する最良の方法は何ですか? どの ISessionFactory をどの Repository<> に注入する必要があるかを手動で指定できますが、これに関するドキュメントが見つからないようです。最善の方法は、次のようなことを言うことができる場合です。アセンブリ DAL.DatabaseOne のすべてのクラス マッピングに対して、databaseone.factory に対応する ISessionFactory を常に注入します。また、アセンブリ DAL.DatabaseTwo のすべてのクラス マッピングに対して、databasetwo.factory に対応する ISessionFactory を常に注入します。
考えや提案はありますか?