我有一个名为IRepository的接口,有两个实现:
SqlRepository
SqlDualWriterRepository
第一个实现是针对类型为T的对象的常规SQL持久性实现。它依赖于SqlConnectionStringProvider的实例(提供连接字符串,顾名思义并将构造函数参数作为连接字符串名称)。 / p>
第二个是内部使用两个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实例时,它将:
我不知道如何实现这一目标。 有没有办法用属性或其他类型的配置来做?
我正在使用StructureMap 2.6.2.0。
答案 0 :(得分:1)
我找到了两个解决方案:
使用lambda告诉StructureMap如何构建将解决IRepository依赖关系的SqlDualWriterRepository实例:
x.For<IRepository<Type>>().Use(
()=> new SqlDualWriterRepository<Type>(
NewPrimaryRepositoryInstance<Type>(),
NewSecondaryRepositoryInstance<Type>()));
使用.Ctor&lt;&gt;()显式指定要为每个构造函数依赖项实例化的内容:
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。
可能有更好的方法来实现这一目标,但这些解决方案目前都是这样做的。