Castle Windsor使用错误的组件来满足依赖

时间:2010-06-09 15:41:28

标签: c# castle-windsor ioc-container

我在Windsor xml中有以下组件映射:

<component
  id="dataSession.DbConnection"
  service="System.Data.IDbConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
  type="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
  lifestyle="custom"
  customLifestyleType="MyCompany.Castle.PerOperationLifestyle.PerOperationLifestyleManager, MyCompany.Castle">
  <parameters>
    <connectionString>server=(local);database=MyCompany;trusted_connection=true;application name=OperationScopeTest;</connectionString>
  </parameters>
</component>

<component
  id="dataSession.DataContext"
  service="System.Data.Linq.DataContext, System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"
  type="MyCompany.BusinessLogic.MyCompanyDataContext, MyCompany.BusinessLogic"
  lifestyle="custom"
  customLifestyleType="MyCompany.Castle.PerOperationLifestyle.PerOperationLifestyleManager, MyCompany.Castle">
  <parameters>
    <connection>${dataSession.DbConnection}</connection>
  </parameters>
</component>

但是,当我向容器询问DataContext时,它实际上使用了需要连接字符串的构造函数,尽管${dataSession.DbConnection}IDbConnection

为什么会这样,以及如何让Windsor使用正确的构造函数?

1 个答案:

答案 0 :(得分:3)

据我所知,没有办法让Windsor在不同的构造函数之间解析,这些构造函数具有相同数量的具有相同名称但不同类型的参数。这里的问题是所有DataContext构造函数都有一个具有相同名称的参数。

在我工作的地方,我们通过从DataContext派生一个类来解决这个问题,该类只有一个Windsor可以满足的构造函数,从而消除了这个问题。

public class MyCompanyDataContextAdapter : MyCompanyDataContext
{
    public MyCompanyDataContextAdapter(IDbConnection connection)
        : base(connection)
    { }
}