PropertyInjection上的Autofac [WithKey]

时间:2015-07-17 08:27:48

标签: autofac

如何在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注入似乎很尴尬。我错过了什么或不支持吗?

谢谢!

2 个答案:

答案 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)]来强制执行,因此我不确定您是如何使用它标记属性并将其编译的。我必须检查一下。