虽然构造函数参数注入是将值传递给正在构造的组件的首选方法,但您也可以使用属性或方法注入来提供值。
属性注入使用可写属性而不是构造函数参数来执行注入。方法注入通过调用一个方法来设置依赖关系。
属性注入
如果组件是一个lambda表达式组件,请使用对象初始值设定项:
builder.Register(c => new A { B = c.Resolve<B>() });
要支持循环依赖性,请使用激活的事件处理程序:
builder.Register(c => new A()).OnActivated(e => e.Instance.B = e.Context.Resolve<B>());
如果组件是反射组件,请使用PropertiesAutowired()
修饰符来注入属性:
builder.RegisterType<A>().PropertiesAutowired();
如果你有一个特定的属性和值来连接,你可以使用WithProperty()
修饰符:
builder.RegisterType<A>().WithProperty("PropertyName", propertyValue);
方法注入
调用方法来设置组件的最简单方法是使用lambda表达式组件,并在激活器中处理方法调用权:
builder.Register(c => {
var result = new MyObjectType();
var dep = c.Resolve<TheDependency>();
result.SetTheDependency(dep);
return result;
});
如果你不能使用注册lambda,你可以添加一个激活事件处理程序:
builder
.Register<MyObjectType>()
.OnActivating(e => {
var dep = e.Context.Resolve<TheDependency>();
e.Instance.SetTheDependency(dep);
});