【问题标题】:Injecting Correct ISessionFactory Into IRepository Using Castle Windsor and NHibernate Facility使用 Castle Windsor 和 NHibernate 工具将正确的 ISessionFactory 注入 IRepository
【发布时间】:2011-06-01 21:25:33
【问题描述】:

我有三个 SQL Server 数据库,单个应用程序从中检索数据。我正在使用 NHibernate 从不同的数据库中检索数据。我设置了一些东西,以便每个数据库在自己的程序集中都有自己的存储库和类映射。在我的 castle.config 文件中,我使用 Castle NHibernate Facility 设置了数据库连接:

<?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<>));

使用一个数据库可以正常工作。当我将第二个数据库添加到组合中时,相同的 ISessionFactory 被注入到所有存储库中。我的问题是处理这个问题的最佳方法是什么?我可以手动指定应该将哪个 ISessionFactory 注入到哪个 Repository 但我似乎找不到关于此的文档。最好的方法是,如果我可以这样说:对于程序集 DAL.DatabaseOne 中的所有类映射,始终注入对应于 databaseone.factory 的 ISessionFactory;并且对于程序集 DAL.DatabaseTwo 中的所有类映射,始终注入与 databasetwo.factory 对应的 ISessionFactory。

想法或建议?

【问题讨论】:

    标签: nhibernate castle-windsor facilities windsor-nhfacility windsor-facilities


    【解决方案1】:

    这在this post by Fabio Maulo 的末尾“为多个数据库配置 DAO/存储库”标题下进行了解释。

    他为每个域类单独映射工厂,但您也可以在您的案例中对每个域程序集使用反射来注册适当的工厂。

    【讨论】:

    • 成功了。我能够使用 NHibernate Facility 而不是使用 uNhAddIn MultiSessionFactoryProvider。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    相关资源
    最近更新 更多