06、NetCore2.0依赖注入(DI)之整合Autofac
06、NetCore2.0依赖注入(DI)之整合Autofac
除了使用NetCore2.0系统的依赖注入(DI)框架外,我们还可以使用其他成熟的DI框架,如Autofac、Unity等。只要他们支持IServiceProvider接口规范。我们这次尝试使用Autofac来替代系统DI框架。
------------------------------------------------------------------------------------------------------------
写在前面:这是一个系列的文章,总目录请移步:NetCore2.0技术文章目录
------------------------------------------------------------------------------------------------------------
一、安装支持NetCore2.0的Autofac包
使用VS2017创建一个空的MVC项目,准备在这个项目中整合Autofac
1.安装核心包
install-package autofac
2.安装扩展包
install-package Autofac.Extensions.DependencyInjection
就是它支持了IServiceProvider接口规范:
using System;
using Microsoft.Extensions.DependencyInjection; namespace Autofac.Extensions.DependencyInjection
{
public class AutofacServiceProvider : IServiceProvider, ISupportRequiredService
{
public AutofacServiceProvider(IComponentContext componentContext);
public object GetRequiredService(Type serviceType);
public object GetService(Type serviceType);
}
}
二、在Web应用中整合Autofac
系统DI框架入口是Startup.ConfigureServices方法:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IRun, Run>(); return services.BuildServiceProvider();
}
我们可以看出,这个方法配置了IServiceProvider的实现。那么,我们的整合方法就是用Autofac实现的IServiceProvider对象,替换系统的IServiceProvider。
public IContainer ApplicationContainer { get; private set; } public IServiceProvider ConfigureServices(IServiceCollection services)
{
var builder = new ContainerBuilder(); // 注入方式1:autofac将全盘接收
services.AddSingleton<IRun, Run>(); // 注入方式2: autofac自行注册
//builder.RegisterType<Run>().As<IRun>(); builder.Populate(services);
this.ApplicationContainer = builder.Build(); return new AutofacServiceProvider(this.ApplicationContainer);
}
可以看出,既可以用原有的方式注册服务,也可以用Autofac方式注册,最后Autofac会全盘接收管理。其中自定义的接口如下:
interface IRun
{
string Show();
} public class Run : IRun
{
public string Show()
{
return "奔跑吧,兄弟";
} }
下面我们在业务中调用这个接口,看是否成功。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.Run(async (context) =>
{
await context.Response.WriteAsync(app.ApplicationServices.GetService<IRun>().Show());
});
}
运行效果是ok的^_^,不难体会到,接口的对扩展开放特点。
06、NetCore2.0依赖注入(DI)之整合Autofac的更多相关文章
- 05、NetCore2.0依赖注入(DI)之Web应用启动流程管理
05.NetCore2.0依赖注入(DI)之Web应用启动流程管理 在一个Asp.net core 2.0 Web应用程序中,启动过程都做了些什么?NetCore2.0的依赖注入(DI)框架是如何管理 ...
- 07、NetCore2.0依赖注入(DI)之生命周期
07.NetCore2.0依赖注入(DI)之生命周期 NetCore2.0依赖注入框架(DI)是如何管理注入对象的生命周期的?生命周期有哪几类,又是在哪些场景下应用的呢? -------------- ...
- Yii2.0 依赖注入(DI)和依赖注入容器的原理
依赖注入和依赖注入容器 为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Serv ...
- .Net Core3.0依赖注入DI
构建ASP.NET Core应用程序的时候,依赖注入已成为了.NET Core的核心,这篇文章,我们理一理依赖注入的使用方法. 不使用依赖注入 首先,我们创建一个ASP.NET Core Mvc项目, ...
- .netCore2.0 依赖注入
依赖注入(ID)是一种实现对象及其合作者或者依赖想之间松散耦合的技术对于传统的方法来说,获取类的方法通常用new如下 public class DIController : Controller { ...
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
ADO.NET 一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data → DataTable, ...
- 依赖注入(DI)和Ninject
[ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject 本文目录: 1.为什么需要依赖注入 2.什么是依赖注入 3.使用NuGet安装库 4.使用Ninject的一般步骤 5. ...
- 控制反转(Ioc)和依赖注入(DI)
控制反转IOC, 全称 “Inversion of Control”.依赖注入DI, 全称 “Dependency Injection”. 面向的问题:软件开发中,为了降低模块间.类间的耦合度,提倡基 ...
- 控制反转IOC与依赖注入DI【转】
转自:http://my.oschina.net/1pei/blog/492601 一直对控制反转.依赖注入不太明白,看到这篇文章感觉有点懂了,介绍的很详细. 1. IoC理论的背景我们都知道,在采用 ...
随机推荐
- 后台运行之[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]
// 正常程序退出后,会在几秒内停止工作: // 要想申请更长的时间,需要用到 // beginBackgroundTaskWithExpirationHandler // endBackground ...
- 数据库 --> 5种关系型数据库比较
5种关系系数据库比较 目前,商品化的数据库管理系统以关系型数据库为主导产品,技术比较成熟.面向对象的数据库管理系统虽然技术先进,数据库易于开发.维护,但尚未有成熟的产品.国际国内的主导关系型数据库管理 ...
- 配置Hibernate的二级缓存
1.在applicationContex.xml文件里面添加二级缓存配置: <!-- 配置hibernate的sessionFactory --> <bean id="se ...
- freemarker 类型转换
操作字符串函数 1. substring(start,end)从一个字符串中截取子串 start:截取子串开始的索引,start必须大于等于0,小于等于endend: 截取子串的长度,end必须大 ...
- 基于bootstrap的表格数据展示
一.导入bootstrap文件 二.前端html代码 对应的是前台条件查询和js数据获取 js数据获取部分在第四段 三.后台数据 total为集合总数 int类型 rows为前台需要展示的数据集合 ...
- Java基础学习笔记一 Java介绍
java语言概述 Java是sun公司开发的一门编程语言,目前被Oracle公司收购,编程语言就是用来编写软件的. Java的应用 开发QQ.迅雷程序(桌面应用软件) 淘宝.京东(互联网应用软件) 安 ...
- TED - How To Get Better At The Things You Care About
TED01 - How To Get Better At The Things You Care About 昨天我发布了攻克英语口语的宣言,今天就行动.TED是我们学习口语的好地方,本着学以致用的原 ...
- 201621123062《java程序设计》第三周作业总结
1.本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用 将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系.步骤如下: 1.1写出你认为本周学 ...
- Scrum 冲刺 总结
Scrum 冲刺 总结 冲刺阶段链接 Scrum冲刺第一天 Scrum冲刺第二天 Scrum冲刺第三天 Scrum冲刺第四天 Scrum冲刺第五天 Scrum冲刺第六天 Scrum冲刺第七天 冲刺阶段 ...
- 小草手把手教你LabVIEW串口仪器控制—安装使用仪器现有驱动
声明:很多仪器是没有驱动的.所以,具体问题具体分析.另外声明:所谓的驱动,也就是封装好的底层的串口通信程序,也是程序而已,只不过别人帮你做成了子 VI,让自己容易用.所以:不要弄混淆了概念.国外的很多 ...