【问题标题】:StructureMap configuration helpStructureMap 配置帮助
【发布时间】:2011-08-09 14:31:26
【问题描述】:

我有一个名为 IRepository 的接口,它有两个实现:

  • SqlRepository

  • SqlDualWriterRepository

第一个实现是 T 类型对象的常规 SQL 持久性实现。它依赖于 SqlConnectionStringProvider 的实例(顾名思义,它提供连接字符串,并将连接字符串名称作为构造函数参数)。

第二个是另一个内部使用两个 SQLRepository 依赖项的实现:

public class SqlDualWriterRepository<T> : IRepository<T>
{
    private readonly IRepository<T> _primaryRepository;
    private readonly IRepository<T> _secondaryRepository;

    public SqlDualWriterRepository(
        IRepository<T> primaryRepository,
        IRepository<T> secondaryRepository)
    {
        _primaryRepository = primaryRepository;
        _secondaryRepository = secondaryRepository;
    }

}

我想要实现的是配置 StructureMap 以便在请求 IRepository 实例时,它将:

  1. 将 IRepository 解析为 SqlDualWriterRepository 的实例
  2. 将两个内部存储库解析为 SqlRepository 类型
  3. 对于在步骤 2 中实例化的两个 SqlRepository 对象,我需要以不同的方式解析 SqlConnectionStringProvider(在构造函数中提供不同的字符串参数)

我不知道如何实现这一点。 有没有办法使用属性或其他类型的配置来做到这一点?

我正在使用 StructureMap 2.6.2.0。

【问题讨论】:

    标签: c# c#-4.0 dependency-injection structuremap


    【解决方案1】:

    我找到了两个解决方案:

    1. 使用 lambda 告诉 StructureMap 如何构建将解决 IRepository 依赖关系的 SqlDualWriterRepository 实例:

      x.For<IRepository<Type>>().Use(
              ()=> new SqlDualWriterRepository<Type>(
                  NewPrimaryRepositoryInstance<Type>(),
                  NewSecondaryRepositoryInstance<Type>()));
      
    2. 使用 .Ctor() 显式指定每个构造函数依赖项要实例化的内容:

      x.For<IRepository<Type>>().Use<SqlDualWriterRepository<Type>>()
              .Ctor<IRepository<Type>>("primaryRepository").Is(NewPrimaryRepositoryInstance<Type>())
              .Ctor<IRepository<Type>>("secondaryRepository").Is(NewSecondaryRepositoryInstance<Type>());
      

    在上述两个示例中,NewPrimaryRepositoryInstance() 和 NewSecondaryRepositoryInstance() 方法使用适当的 SqlConnectionStringProvider 配置创建主 SqlRepositories 和辅助 SqlRepositories。

    可能有更好的方法来实现这一点,但这些解决方案现在可以做到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2011-10-26
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      相关资源
      最近更新 更多