使用Castle Windsor和NHibernate设施将正确的ISessionFactory注入IRepository
我有三个SQL Server数据库,单个应用程序从中检索数据。我正在使用NHibernate从不同的数据库检索数据。我已经进行了一些设置,以便每个数据库在其自己的程序集中都有自己的存储库和类映射。在我的castle.config文件中,我使用castle NHibernate工具设置了数据库连接:使用Castle Windsor和NHibernate设施将正确的ISessionFactory注入IRepository,nhibernate,castle-windsor,facilities,windsor-nhfacility,windsor-facilities,Nhibernate,Castle Windsor,Facilities,Windsor Nhfacility,Windsor Facilities,我有三个SQL Server数据库,单个应用程序从中检索数据。我正在使用NHibernate从不同的数据库检索数据。我已经进行了一些设置,以便每个数据库在其自己的程序集中都有自己的存储库和类映射。在我的castle.config文件中,我使用castle NHibernate工具设置了数据库连接: <?xml version="1.0" encoding="utf-8" ?> <castle> <facilities> <facility i
<?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>
DAL.DatabaseOne
数据库二
数据库三
我的所有存储库都有一个构造函数,该构造函数将ISessionFactory作为参数:
public MyRepository<T> : IRepository<T>
{
public MyRepository(ISessionFactory factory)
{
//Do stuff here
}
}
公共MyRepository:IRepository
{
公共MyRepository(ISessionFactory工厂)
{
//在这里做事
}
}
我有一个安装程序类,我想在其中定义各种存储库:
//In install method of IWindsorInstaller
container.register(Component.For(typeof(IRepository<>)).ImplementedBy(typeof(MyRepository<>));
//在IWindsorInstaller的安装方法中
容器.register(Component.For(typeof(IRepository)).ImplementedBy(typeof(MyRepository));
使用一个数据库可以很好地工作。当我将第二个数据库添加到混合数据库中时,相同的ISessionFactory被注入到所有存储库中。我的问题是处理此问题的最佳方法是什么?我可以手动指定应将哪个ISessionFactory注入到哪个存储库中,但我似乎找不到有关此的文档。可能是第一种方法是,如果我可以这样说:对于程序集DAL.DatabaseOne中的所有类映射,总是注入与DatabaseOne.factory相对应的ISessionFactory;对于程序集DAL.DatabaseTwo中的所有类映射,总是注入与DatabaseTwo.factory相对应的ISessionFactory
想法或建议?在结尾的标题“为多个数据库配置DAO/存储库”中对此进行了解释
他为每个域类分别映射工厂,但您也可以在您的案例中使用每个域程序集上的反射来注册相应的工厂。这在结尾的标题“为多个DB配置DAO/存储库”下进行了解释
他为每个域类分别映射工厂,但您也可以在案例中的每个域程序集上使用反射来注册相应的工厂。这样做了。我可以使用NHibernate工具,而不是使用Unaddin MultiSessionFactoryProvider。这样做了。我可以使用NHibernate工具,而不是使用未添加的MultiSessionFactoryProvider。