如果我有一个类有很多依赖项,例如:
public ClassWithManyDependencies(IDependencyA a, IDependencyB b,
IDependencyC c, IDependencyD d,
IDependencyE e, IDependencyF f,
IDependencyG g, IDependencyH h): IClassWithManyDependencies
{
// constructor code...
}
当我想注入一个不同的实现,只有一个的依赖(说IDependencyH) -我想依赖于IDependencyH在其他类使用默认实现-我目前这样做:
var specialVersionH = new DecoratedDependencyH();
For<IClassWithManyDependencies>().Use(c => new ClassWithManyDependencies(
c.GetInstance<IDependencyA>(),
c.GetInstance<IDependencyB>(),
c.GetInstance<IDependencyC>(),
c.GetInstance<IDependencyD>(),
c.GetInstance<IDependencyE>(),
c.GetInstance<IDependencyF>(),
c.GetInstance<IDependencyG>(),
specialVersionH));
是否有一种更简洁的方法来配置structuremap,以使用每个依赖项的默认版本,除了指定的一个?
这是2.6版本。
ForConcreteType<ClassWithManyDependencies>()
.Configure.Ctor<IDependencyH>()
.Is<DecoratedDependencyH>();
For<IClassWithManyDependencies>().Use(ctx => ctx.GetInstance<ClassWithManyDependencies>());
我进行了一个"简化"测试,似乎有效。