这可以用模块来完成,例如,
class InjectPropertiesByDefaultModule : Autofac.Module {
protected override void AttachToComponentRegistration(
IComponentRegistration registration,
IComponentRegistry registry) {
registration.Activating += (s, e) => {
e.Context.InjectProperties(e.Instance);
};
}
}
然后:
builder.RegisterModule<InjectPropertiesByDefaultModule>();
我想你可能会误解true
paramerter到PropertiesAutowired
- 它决定如何依赖圆形的支持,并应可能保持false
。要模拟true
设置,您可以将其附加到Activated
而不是上面的Activating
。
但是,如果可能的话,即使对于“可选”依赖项(如ILog
)也要使用构造函数注入。它导致更清洁的组件(例如,字段可以被制造为readonly
)并且依赖关系更易于理解(它们都在构造器中,并且没有关于单独属性的含义的猜测)。
只有在存在时才考虑使用属性注入是应用程序的多种配置,并且在某些配置中,依赖关系将确实不存在。
即使在这些情况下,“空对象”模式通常更合适。
另外 - 如果你正在整合Log4Net,请看看:http://code.google.com/p/autofac/wiki/Log4NetIntegration :) – 2010-08-02 22:50:20
Nic。在你的代码中,“e”来自哪里? – Simon 2010-08-03 02:38:29
谢谢西蒙 - 应该是“注册” - 现在已经修复。 – 2010-08-03 05:59:50