Asp.Net Core 依赖注入默认DI,Autofac注入
使用默认DI
修改Startup类方法ConfigureServices如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//注册接口
services.AddTransient<IDbMovieService, DbMovieService>();
}
controller构造函数调用如下:
public readonly IDbMovieService _DbMovieService;
public HomeController(IDbMovieService dbMovieService)
{
_DbMovieService = dbMovieService;
}
public IActionResult Index()
{
_DbMovieService.MovieAnalysis();
return View();
}
瞬时
瞬时(Transient)生命周期服务在它们每次请求时被创建。这一生命周期适合轻量级的,无状态的服务。
作用域
作用域(Scoped)生命周期服务在每次请求被创建一次。
单例
单例(Singleton)生命周期服务在它们第一次被请求时创建(或者如果你在 ConfigureServices
运行时指定一个实例)并且每个后续请求将使用相同的实例。如果你的应用程序需要单例行为,建议让服务容器管理服务的生命周期而不是在自己的类中实现单例模式和管理对象的生命周期。
使用Autofac
首先,需要从nuget引用相关的包.
Autofac
Autofac.Extensions.DependencyInjection(这个包扩展了一些微软提供服务的类.来方便替换autofac)
然后,我们修改Startup中的ConfigureServices代码如下:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Add Autofac
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterModule<AutofacConfig>();
containerBuilder.Populate(services);
var container = containerBuilder.Build();
return new AutofacServiceProvider(container);
}
AutofacConfig.cs源码如下:
using Autofac;
using MG.AngleSharp;
using MG.AngleSharp.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace MG.Web.AutofacConfig
{
public class AutofacConfig: Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<DbMovieService>().As<IDbMovieService>();
}
}
}
加载程序集注册方式如下:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Add Autofac
var builder = new ContainerBuilder();
builder.Populate(services);
//加载程序集
// var assembly = this.GetType().GetTypeInfo().Assembly;
var assembly = Assembly.Load("MG.AngleSharp");//获取MG.AngleSharp 程序集
var baseType = typeof(IDependency);//IDependency 是一个接口
builder.RegisterAssemblyTypes(assembly)
.Where(m => baseType.IsAssignableFrom(m) && m != baseType)
.AsImplementedInterfaces().InstancePerLifetimeScope();
var container = builder.Build();
return new AutofacServiceProvider(container);
}
IDependency是一个空接口类,用于判断是否需要注册该接口。
调用方式推荐使用构造函数方式引用。
获取bin目录下所有程序集
//加载程序集
//var assembly1 = this.GetType().GetTypeInfo().Assembly;//获取当前程序集
var assemblys = AppDomain.CurrentDomain.BaseDirectory;
DirectoryInfo theFolder = new DirectoryInfo(assemblys);
foreach (var item in theFolder.GetFiles("*.dll"))
{
var assembly = Assembly.Load(item.Name.Replace(".dll", ""));//加载程序集
var baseType = typeof(IDependency);//IDependency 是一个接口
builder.RegisterAssemblyTypes(assembly)
.Where(m => baseType.IsAssignableFrom(m) && m != baseType)
.AsImplementedInterfaces().InstancePerLifetimeScope();
}
Asp.Net Core 依赖注入默认DI,Autofac注入的更多相关文章
- ASP.NET Core 依赖注入(DI)
ASP.NET Core的底层设计支持和使用依赖注入.ASP.NET Core 应用程序可以利用内置的框架服务将服务注入到启动类的方法中,并且应用程序服务也可以配置注入.由ASP.NET Core 提 ...
- ASP.NET Core 依赖注入(DI)简介
ASP.NET Core是从根本上设计来支持和利用依赖注入. ASP.NET Core应用程序可以通过将其注入到Startup类中的方法中来利用内置的框架服务,并且应用程序服务也可以配置为注入. AS ...
- # ASP.NET Core依赖注入解读&使用Autofac替代实现
标签: 依赖注入 Autofac ASPNETCore ASP.NET Core依赖注入解读&使用Autofac替代实现 1. 前言 2. ASP.NET Core 中的DI方式 3. Aut ...
- ASP.NET Core依赖注入解读&使用Autofac替代实现【转载】
ASP.NET Core依赖注入解读&使用Autofac替代实现 1. 前言 2. ASP.NET Core 中的DI方式 3. Autofac实现和自定义实现扩展方法 3.1 安装Autof ...
- Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)
QuartzHostedService 是一个用来在Asp.Net Core 中实现 Quartz 的任务注入依赖的nuget 包: 基本示例如下: using System; using Syst ...
- 全面理解 ASP.NET Core 依赖注入
DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET Core的DI实现以及对实例 ...
- ASP.NET Core 依赖注入
一.什么是依赖注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它? 初学者特别容易对控制反转IOC(Iversion of Control) ...
- 【转载】ASP.NET Core 依赖注入
本文转自:http://www.jessetalk.cn/2017/11/06/di-in-aspnetcore/ 为什么要写这个博客 DI在.NET Core里面被提到了一个非常重要的位置, 这篇文 ...
- 【转】ASP.NET Core 依赖注入
DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET Core的DI实现以及对实例 ...
- ASP.NET Core依赖注入
一.什么是依赖注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它? 初学者特别容易对控制反转IOC(Iversion of Con ...
随机推荐
- Android 对话框(Dialogs)
对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 1.对话框设计 如需了解有关如何设计对话框的信息(包括语言建议),请阅读对话框设 ...
- C++ STL 全排列
摘自爱国师哥博客https://www.cnblogs.com/aiguona/p/7304945.html 一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元 ...
- 汉诺塔python实现
下载汉诺塔ppt def move(n,A,B,C): if n == 1: print(A,'->',C) else: move(n-1,A,C,B) print(A,'->',C) m ...
- c# 加载图片 正在被占用问题
问题情境:图片文件加载到pdf中,程序没有退出,再次加载该图片文件,提示被占用. 解决办法: 1.加载文件会锁定该文件,fromfile方法会导致占用内存较大,不使用该方法. FileStream f ...
- 个人作业四:注册github
注册Github账户 账户名称:liurunhan Github地址:https://github.com/liurunhan
- 第二次c++作业
用c语言实现电梯问题的方法: 先用一堆变量存储各种变量,在写一个函数模拟电梯上下移动载人放人的过程. c++: 构造一个电梯的类,用成员函数实现电梯运作的过程. 对c和c++的理解太浅,并没有感觉到用 ...
- lintcode-436-最大正方形
436-最大正方形 在一个二维01矩阵中找到全为1的最大正方形 样例 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 返回 4 标签 动态规划 爱彼迎 脸书 思路 使用 ...
- Scala快速入门-函数组合
compose&andThen 两个函数组装为一个函数,compose和andThen相反 def f(test: String):String = { "f(" + te ...
- slf4j与logback的结合使用
参考:http://my.oschina.net/ydsakyclguozi/blog/412240 一.logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件.logbac ...
- 写在SVM之前——凸优化与对偶问题
SVM之问题形式化 SVM之对偶问题 SVM之核函数 SVM之解决线性不可分 >>>写在SVM之前——凸优化与对偶问题 本篇是写在SVM之前的关于优化问题的一点知识,在SVM中会用到 ...