【问题标题】:Castle Windsor problem温莎城堡问题
【发布时间】:2011-09-01 19:35:59
【问题描述】:

我的城堡核心有问题,我正在尝试向特定存储库注入两个不同的数据库连接。

public class Repository1 { 
  public Repository1(System.Data.Common.DbConnection conn) { } 
}
public class Repository2 { 
  public Repository2(System.Data.Common.DbConnection conn) { } 
}

例如,现在我想注入 Mysql 连接到 Repository1 和 Oracle 连接到 repository2。

【问题讨论】:

    标签: .net inversion-of-control castle-windsor


    【解决方案1】:

    类似这样的:

    container.Register(Component
        .For<DbConnection>()
        .ImplementedBy<MysqlConnection>()
        .Named("mysql"));
    container.Register(Component
        .For<DbConnection>()
        .ImplementedBy<OracleConnection>()
        .Named("oracle"));
    
    container.Register(Component
        .For<Repository1>()
        .ServiceOverrides(new { conn = "mysql" }));
    container.Register(Component
        .For<Repository2>()
        .ServiceOverrides(new { conn = "oracle" }));
    

    您可能需要调整 DbConnection 注册,因为我不知道确切的类名可能是什么,或者它们是否需要其他配置设置。

    【讨论】:

    • 当连接类型相同(即mysqlconnection)但配置不同(connectionString)时我应该怎么做。在这种情况下,windsor 注入第一个声明的连接。
    • 使用 DependsOn 方法为每个人提供不同的连接字符串。
    • 我必须在容器中注册连接字符串吗?
    • 不,使用DependsOn 方法并通过它提供它。
    • 不,像这样:DependsOn( new { conn = "myconnectionstring" }) 你知道,在 cmets 中发布代码并不容易,所以你可能要考虑提出一个 new 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多