使用默认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注入的更多相关文章

  1. ASP.NET Core 依赖注入(DI)

    ASP.NET Core的底层设计支持和使用依赖注入.ASP.NET Core 应用程序可以利用内置的框架服务将服务注入到启动类的方法中,并且应用程序服务也可以配置注入.由ASP.NET Core 提 ...

  2. ASP.NET Core 依赖注入(DI)简介

    ASP.NET Core是从根本上设计来支持和利用依赖注入. ASP.NET Core应用程序可以通过将其注入到Startup类中的方法中来利用内置的框架服务,并且应用程序服务也可以配置为注入. AS ...

  3. # ASP.NET Core依赖注入解读&使用Autofac替代实现

    标签: 依赖注入 Autofac ASPNETCore ASP.NET Core依赖注入解读&使用Autofac替代实现 1. 前言 2. ASP.NET Core 中的DI方式 3. Aut ...

  4. ASP.NET Core依赖注入解读&使用Autofac替代实现【转载】

    ASP.NET Core依赖注入解读&使用Autofac替代实现 1. 前言 2. ASP.NET Core 中的DI方式 3. Autofac实现和自定义实现扩展方法 3.1 安装Autof ...

  5. Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)

    QuartzHostedService  是一个用来在Asp.Net Core 中实现 Quartz 的任务注入依赖的nuget 包: 基本示例如下: using System; using Syst ...

  6. 全面理解 ASP.NET Core 依赖注入

    DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET  Core的DI实现以及对实例 ...

  7. ASP.NET Core 依赖注入

    一.什么是依赖注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它? 初学者特别容易对控制反转IOC(Iversion of Control) ...

  8. 【转载】ASP.NET Core 依赖注入

    本文转自:http://www.jessetalk.cn/2017/11/06/di-in-aspnetcore/ 为什么要写这个博客 DI在.NET Core里面被提到了一个非常重要的位置, 这篇文 ...

  9. 【转】ASP.NET Core 依赖注入

    DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET  Core的DI实现以及对实例 ...

  10. ASP.NET Core依赖注入

         一.什么是依赖注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它? 初学者特别容易对控制反转IOC(Iversion of Con ...

随机推荐

  1. mysql数据库工具

    1.navicat12 中文版及破解 链接:https://pan.baidu.com/s/1TH8m6lduHJybUGhmjFPIAA 提取码:kwcd 2.旧版本mysql-front(连接可选 ...

  2. Xcode 6添加模板无效

    最近发现从Xcode 5拷贝来的模板在Xcode 6上是OK的,但是自己自定义的却不行,一直使用的是自定义的基类模板,最后发现原因是没有在 TemplateInfo.plist 中注册自定义的模板,注 ...

  3. 学习c++ofstream和ifstream

    定义数据流对象指针 对文件进行读写操作首先必须要定义一个数据流对象指针,数据流对象指针有三种类型,它们分别是: Ifstream:表示读取文件流,使用的时候必须包含头文件"ifstream& ...

  4. Spring1()

    目的: 降低Java开发的复杂性 使用策略: 基于POJO的轻量级和最小侵入式的编程 通过依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模版减少样式代码 依赖注入:由Sprin ...

  5. C++ Primer Plus学习:第九章

    C++第九章:内存模型与名称空间 C++在内存中存储数据方面提供了多种选择.可直接选择保留在内存中的时间长度(存储持续性)以及程序哪一部分可以访问数据(作用域和链接)等. 单独编译 程序分为三个部分: ...

  6. 按照事务类型分析 DB2 事物的性能

    概述 事务是数据库系统中的核心概念之一.作为数据库系统的逻辑工作单元(Unit of Work),事务必须具有四个属性,即原子性.一致性.隔离性和持久性(ACID).数据库系统往往通过锁机制保证事务的 ...

  7. DB2 UDB V8.1 管理

    在DB2中有关实例(Instance), 数据库(Database),表空间(TableSpace),容器(Container)等概念: 在一个操作系统中,DB2数据服务可以同时运行多个实例(有别于O ...

  8. 转 docker的下载与安装

    百度网盘下载地址:https://oomake.com/download/docker-windows 道客地址: https://link.jianshu.com/?t=https://get.da ...

  9. gearman参数说明

    -b, –backlog=BACKLOG 连接请求队列的最大值 -d, –daemon Daemon 守护进程化 -f, –file-descriptors=FDS 可打开的文件描述符数量 -h, – ...

  10. [C/C++] 快速幂讲解

    转自:http://www.cnblogs.com/CXCXCXC/p/4641812.html 快速幂这个东西比较好理解,但实现起来到不老好办,记了几次老是忘,今天把它系统的总结一下防止忘记. 首先 ...