官方文档:http://docs.autofac.org/en/latest/register/prop-method-injection.html

Autofac 属性和方法注入

虽然构造函数参数注入是为组件传递值的首选方法,你也可以使用属性或方法注入提供值。
属性注入使用可写入的属性,而不是构造函数的参数进行注入。方法注入通过调用一个方法设置依赖关系。

1、属性注入

如果是一个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);

2、方法注入

调用一个方法来设置一个组件的值的最简单的方法是,使用一个lambda表达式组件和正确的调用激活处理方法。
builder.Register(c => {
var result = new MyObjectType();
var dep = c.Resolve<TheDependency>();
result.SetTheDependency(dep);
return result;
});
如果你不能使用一个lambda表达式注册,你可以添加一个激活事件处理程序(activating event handler
builder
.Register<MyObjectType>()
.OnActivating(e => {
var dep = e.Context.Resolve<TheDependency>();
e.Instance.SetTheDependency(dep);
});

最新文章

  1. hdu3437 划分树 区间内小于第K大的值得和
  2. mysql的安装以及基本操作
  3. Python &amp; Django 学习笔记
  4. C# - JSON操作
  5. jmeter随笔(5)--断言中正则表达式的特殊字符问题和中文乱码显示问号的问题
  6. 调皮的转义之addslashes
  7. 惠普 Compaq 6520s 无线开关打不开
  8. EEPlat 的 后台业务处理模型
  9. C++模板:qsort
  10. Codeforces Round #306 (Div. 2) C
  11. TCP/IP协议头部结构体(网摘小结)(转)
  12. 遇到ANDROID “call to opengl es api with no current context”错误
  13. 笔记:Spring Cloud Ribbon 客户端负载均衡
  14. PHP 5 SimpleXML 函数
  15. SDL2源代码分析1:初始化(SDL_Init())
  16. Ubuntu LNMP系统搭建Zabbix监控
  17. eclipse maven项目下载jar包失败解决办法
  18. 如何选择合适的 DDoS 防御服务
  19. linux系统压缩\解压命令详解
  20. SQL查询数据总结

热门文章

  1. HTML+JavaScript画函数图像
  2. asp.net core 集成 Prometheus
  3. 小知识点 之 JVM -XX:MaxGCPauseMillis 与 -XX:GCTimeRatio
  4. VUE中,@click后边( ) 有无括号的区别
  5. Spring中的Mybatis
  6. 微信小程序 下拉刷新
  7. oracle 游标相关资料
  8. pycharm执行报错: unprintable file name [Errno 2] No such file
  9. Nmap学习使用指南
  10. Mysql 存储过程(变量、定义条件、处理程序、光标、流程控制构造)