【发布时间】:2016-03-29 19:15:50
【问题描述】:
我的层次结构看起来像:
public class SomeBaseClass { }
public class Child1: SomeBaseClass { }
public class Child2: SomeBaseClass { }
//Objects hierarchy
public class A
{
public A(B b, SomeBaseClass sbc) { }
}
public class B
{
public B(C c) { }
}
public class C
{
public B(C c, SomeBaseClass sbc) { }
}
...
public class X
{
public X(SomeBaseClass sbc) { }
}
class Program
{
static void Main()
{
var builder = new ContainerBuilder();
builder.RegisterInstance(new Child1()).As<SomeBaseClass>();
var container = builder.Build();
container.Resolve<A>();
//Some work here.
}
}
有时我想使用Child2 而不是Child1 实例,并在所有层次结构依赖项中使用它。有没有办法在不构建新容器的情况下做到这一点?最好有类似的东西:
public A ResolveWithBinding(IComponentContext cc, SomeBaseClass sbc)
{
return cc.Resolve<A>().WithRegistered<SomeBaseClass>(sbc);
}
UPD:我找到了某种解决方法:
//Registration code
var factory = new SomeBaseClassAncFactory();
builder.Register(() => factory.GetCurrentInstance()).As<SomeBaseClass>();
//Resolve code
public SomeBaseClass GetCurrentInstance()
{
if(StaticClass.SomeProperty=="A")
return new Clild1();
return new Clild2();
}
恐怕这不是真正的线程安全方式。似乎使用静态属性不是“最佳实践”。我希望,还有另一种解决方案。
【问题讨论】:
标签: c# dependency-injection autofac