Autofac官方文档(五)【注册组件之属性和方法注入】

虽然构造函数参数注入是将值传递给正在构造的组件的首选方法,但您也可以使用属性或方法注入来提供值。

属性注入使用可写属性而不是构造函数参数来执行注入。方法注入通过调用一个方法来设置依赖关系。

属性注入

如果组件是一个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);
  });
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值