Autofac之依赖注入
这里主要学习一下Autofac的依赖注入方式
默认构造函数注入
class A
{
public B _b; public A()
{ }
public A(B b)
{
this._b = b;
}
} class B { }
builder.RegisterType<A>();
builder.RegisterType<B>();
using (var container = builder.Build())
{
//A的构造方法需要参数b,但是这里不需要做更多地操作,如果不注册类型B,这里a._b=null
var a = container.Resolve<A>();
}
如果类型A和类型B都注册到了autofac中,那么在通过autofac解析获取A时,autofac会检测到A的构造方法中是要一个参数B,而类型B是已经注册到autofac中的,所以autofac会自动创建b参数,然后传入A的构造方法中的。这样,autofac就自动帮我们完成了构造注入的工作
属性注入
属性注入的所有注入方式都是在注册时定义的,不像构造注入那般,可以在Resolve时传参注入。构造器注入是默认行为,不需要设置,默认会去检查,而属性注入并不是默认行为。但是我们可以通过设置,让属性注入也成为自动注入。
通过反射,使用PropertiesAutowired()修饰符注入属性
builder.RegisterType<A>().PropertiesAutowired();
builder.RegisterType<B>(); using (var container = builder.Build())
{
var a = container.Resolve<A>();
}
使用PropertiesAutowired也只是能指定某个类会自动进行属性注入,没有一键设置所有类型都会自动注入属性的设置。而且还需要注意一点,设置了自动属性注入后,也不代表所有属性都会自动注入,只有注册到Autofac中的类型才能自动注入。PropertiesAutowired方式会自动注入所有可以注入的属性(在容器中已注册的类型中寻找),但是如果只想注入指定几个属性,可以使用除PropertiesAutowired以外的几种注入方式
如果预先知道属性的名字和值,可以使用:WithProperty,此时类型B是可以不被注册的,因为在WithProperty方法中进行了实例化
builder.RegisterType<A>().WithProperty("_b", new B());
using (var container = builder.Build())
{
var a = container.Resolve<A>();
}
lambda表达式
builder.Register(c => new A { _b = c.Resolve<B>() });
builder.RegisterType<B>();
using (var container = builder.Build())
{
var a = container.Resolve<A>();
}
方法注入
使用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<A>();
}
SetInject为A的一个方法,并且它需要一个类型为B的参数,我们在外部通过方法的方式将B传入,这就是方法注入
使用Activating Handler 一行代码解决
builder.Register<A>(c => new A()).OnActivating(e => e.Instance.SetInject(new B()));
using (var container = builder.Build())
{
var a = container.Resolve<A>();
}
Autofac之依赖注入的更多相关文章
- NopCommerce使用Autofac实现依赖注入
NopCommerce的依赖注入是用的AutoFac组件,这个组件在nuget可以获取,而IOC反转控制常见的实现手段之一就是DI依赖注入,而依赖注入的方式通常有:接口注入.Setter注入和构造函数 ...
- Web API(六):使用Autofac实现依赖注入
在这一篇文章将会讲解如何在Web API2中使用Autofac实现依赖注入. 一.创建实体类库 1.创建单独实体类 创建DI.Entity类库,用来存放所有的实体类,新建用户实体类,其结构如下: us ...
- NET Core源代码通过Autofac实现依赖注入
查看.NET Core源代码通过Autofac实现依赖注入到Controller属性 阅读目录 一.前言 二.使用Autofac 三.最后 回到目录 一.前言 在之前的文章[ASP.NET Cor ...
- 查看.NET Core源代码通过Autofac实现依赖注入到Controller属性
一.前言 在之前的文章[ASP.NET Core 整合Autofac和Castle实现自动AOP拦截]中,我们讲过除了ASP.NETCore自带的IOC容器外,如何使用Autofac来接管IServi ...
- 【AutoFac】依赖注入和控制反转的使用
在开始之前首先解释一下我认为的依赖注入和控制反转的意思.(新手理解,哪里说得不正确还请指正和见谅) 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的 ...
- WebAPi使用Autofac实现依赖注入
WebAPi依赖注入 使用记录 笔记 1.NuGet包安装 2.控制器加入构造函数 3.Global.asax ----Application_Start 应用程序启动时 using Autofa ...
- Autofac 泛型依赖注入
using Autofac;using Autofac.Extensions.DependencyInjection;using Hangfire;using Microsoft.AspNetCore ...
- 五:.net core(.NET 6)使用Autofac实现依赖注入
Autofac的简单使用: 由于将来可能引用很多包,为了保持统一队形,我们再新建一个类库项目Wsk.Core.Package,当做包的引用集合: 删掉Class1,把Wsk.Core.Wsk.Core ...
- 转 Autofac怎么依赖注入ASP.NET MVC5类的静态方法
之前我有介绍过怎么在ASP.NET mvc5中实现的Controller的依赖注入.一般是通过Contrller的构造函数的参数或者属性来注入,但是这有一个共同点就是调用这个类的方法一般都是实例方法, ...
随机推荐
- MySql常见约束
含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性. 分类:六大约束 1.NOT NULL :非空,用于保证该字段的值不能为空.例如学生表的学生姓名及学号等等. 2.DEFAULT: ...
- SQL Server Change Tracking
1 概述 “更改跟踪”和“变更数据捕获”捕获和记录用户表的DML更改(插入.更新和删除操作),为某些有特殊需求的应用程序服务. 1.1 更改跟踪 更改跟踪捕获表的数据行更改这一行为,但不会捕获更改的具 ...
- Excel 恢复默认行高、列宽
操作系统:Windows 10 x64 工具1:Excel 乱糟糟的! 选中需要调整的区域,选择菜单:开始 > 格式 > 自动调整行高 选中需要调整的区域,选择菜单:开始 > 格式 ...
- HTTP Status 500 - java.lang.reflect.InvocationTargetException
type Exception report message java.lang.reflect.InvocationTargetException description The server enc ...
- django第三天
从后台传入一层的字典数据 后台代码 前台代码一 浏览器结果 前台代码二 前台代码三 前台代码四 注意 默认遍历为KEY .values .keys .items 都不加括号
- java开发学生信息管理系统的实现(简洁易懂),适合计算机专业学生参考,课程设计、毕业论文设计参考等
编写一个简单的学生管理信息系统. 在oracle中设计一张学生表,以学号作为关键字. 其他学生信息有:姓名.手机号. 在进入系统时,显示如下菜单: ************************** ...
- drop、truncate和delete的区别
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源 ...
- 咸鱼入门到放弃6--jsp<一>三指令
JSP全称是Java Server Pages 它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...
- Selenium切换窗口,警告框处理,调用JavaScript代码
多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作. WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切 ...
- eclipse下启动tomcat访问网址报404错误
问题: 解决步骤 首先检查一遍自己tomcat的相关配置,如果无误,则继续下面的操作 1.打开server视图,双击tomcat进入编辑页面 选择其中的第二个选项,并且修改Server path中的内 ...