如果我在一个具有相同接口类型的类中有两个属性,并且我想为每个类型注入两种不同的conrete类型,我如何使用属性或构造函数注入autofac来执行此操作。
例如
class A : IA
{
public IB PropertyB { get; set; }
public IB PropertyC { get; set; }
public A(IB b, IB c)
{
PropertyB = b;
PropertyC = c;
}
public void PrintB()
{
PropertyB.Print();
}
public void PrintC()
{
PropertyC.Print();
}
}
我已经尝试过了,但当然我只是在两个属性中都注入了C
var builder = new ContainerBuilder();
builder.RegisterType<B>().As<IB>();
builder.RegisterType<C>().As<IB>();
builder.RegisterType<A>().As<IA>();
var container = builder.Build();
var a = container.Resolve<IA>();
或者结果相同:
builder.RegisterType<B>().As<IB>();
builder.RegisterType<C>().As<IB>();
builder.RegisterType<A>().As<IA>().PropertiesAutowired();
var container = builder.Build();
var a = container.Resolve<IA>();
有没有办法告诉autofac我想要PropertyB中的B和PropertyC中的C?
答案 0 :(得分:2)
使用属性注入,您可以执行以下操作:
builder.RegisterType<A>()
.As<IA>()
.OnActivating(e =>
{
e.Instance.PropertyB = e.Context.Resolve<BImpl1>();
e.Instance.PropertyC = e.Context.Resolve<BImpl2>();
});