如何在Autofac中使用Property注入解析键控实例?
builder.RegisterType<ClassA>.As<IService>().Keyed<IService>("serviceA");
builder.RegisterType<ClassB>.As<IService>().Keyed<IService>("serviceB");
使用Autofac.Extras.Attributed lib我尝试以下
public class OtherService {
[WithKey("serviceA")]
public IService service {set; private get;}
}
我只看过[WithKey]与Constructor参数一起工作的例子,但Property注入似乎很尴尬。我错过了什么或不支持吗?
谢谢!
答案 0 :(得分:2)
您可以在Activated事件处理程序中连接组件,如下所示:
builder
.Register<OtherService>()
.OnActivated(e => e.Instance.Service = e.Context.ResolveKeyed<IService>("serviceA"));
您不希望通过使用WithKey属性在服务中引入显式基础结构依赖项,例如Autofac。
上面的代码假定OtherService.Service属性setter是public。如果绝对需要私有setter,可以使用Reflection API进行设置。
答案 1 :(得分:0)
目前,属性过滤器仅适用于构造函数参数。
事实上,WithKeyAttribute
标有[AttributeUsage(AttributeTargets.Parameter)]
来强制执行,因此我不确定您是如何使用它标记属性并将其编译的。我必须检查一下。