博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Autofac之依赖注入
阅读量:6573 次
发布时间:2019-06-24

本文共 1970 字,大约阅读时间需要 6 分钟。

这里主要学习一下Autofac的依赖注入方式

默认构造函数注入

class A{    public B _b;    public A()    {    }    public A(B b)    {        this._b = b;    }}class B { }

如果类型A和类型B都注册到了autofac中,那么在通过autofac解析获取A时,autofac会检测到A的构造方法中是要一个参数B,而类型B是已经注册到autofac中的,所以autofac会自动创建b参数,然后传入A的构造方法中的。这样,autofac就自动帮我们完成了构造注入的工作

属性注入

属性注入的所有注入方式都是在注册时定义的,不像构造注入那般,可以在Resolve时传参注入。构造器注入是默认行为,不需要设置,默认会去检查,而属性注入并不是默认行为。但是我们可以通过设置,让属性注入也成为自动注入。

通过反射,使用PropertiesAutowired()修饰符注入属性

使用PropertiesAutowired也只是能指定某个类会自动进行属性注入,没有一键设置所有类型都会自动注入属性的设置。而且还需要注意一点,设置了自动属性注入后,也不代表所有属性都会自动注入,只有注册到Autofac中的类型才能自动注入。PropertiesAutowired方式会自动注入所有可以注入的属性(在容器中已注册的类型中寻找),但是如果只想注入指定几个属性,可以使用除PropertiesAutowired以外的几种注入方式

如果预先知道属性的名字和值,可以使用:WithProperty,此时类型B是可以不被注册的,因为在WithProperty方法中进行了实例化

lambda表达式

builder.Register(c => new A { _b = c.Resolve() });builder.RegisterType();using (var container = builder.Build()){    var a = container.Resolve();}

 方法注入

使用Activator:注意,使用这种方法,类里必须要有这个方法

class A{    public B _b;    public A()    {    }    public A(B b)    {        this._b = b;    }    public void SetInject(B b)    {        _b = b;    }}
builder.Register(c =>{    var _a = new A();    _a.SetInject(new B());    return _a;});using (var container = builder.Build()){    var a = container.Resolve();}

 SetInject为A的一个方法,并且它需要一个类型为B的参数,我们在外部通过方法的方式将B传入,这就是方法注入

使用Activating Handler 一行代码解决

转载于:https://www.cnblogs.com/GnailGnepGnaw/p/10753619.html

你可能感兴趣的文章
【?】codeforces721E Road to Home(DP+单调队列)
查看>>
MySQL 仅保留7天、一个月数据
查看>>
OGG 11g Checkpoint 详解
查看>>
PHP中使用socket通信响应速度慢的原因与解决办法
查看>>
Win7下安装Mysql(解压缩版)
查看>>
UVA 11992 Fast Matrix Operations (降维)
查看>>
Asp.net core Identity + identity server + angular 学习笔记 (第一篇)
查看>>
暂时不想读研的几点理由
查看>>
增加临时表空间组Oracle11g单实例
查看>>
Diff Two Arrays
查看>>
stark组件(1):动态生成URL
查看>>
169. Majority Element
查看>>
大整数加法
查看>>
下拉菜单
查看>>
[清华集训2014]玛里苟斯
查看>>
Doctype作用?严格模式与混杂模式如何区分?它们有何意义
查看>>
0029-求最小的数
查看>>
【MVC+EasyUI实例】对数据网格的增删改查(上)
查看>>
第三章:如何建模服务
查看>>
EF CodeFirst下数据库更新
查看>>