使用默认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 ...
随机推荐
-
[转]as3中的SharedObject的保存路径
SharedObject的保存路径 Windows XP 网络访问: C:\Documents and Settings\[你的用户名]\Application Data\Macromedia\Fla ...
-
Operating System Memory Management、Page Fault Exception、Cache Replacement Strategy Learning、LRU Algorithm
目录 . 引言 . 页表 . 结构化内存管理 . 物理内存的管理 . SLAB分配器 . 处理器高速缓存和TLB控制 . 内存管理的概念 . 内存覆盖与内存交换 . 内存连续分配管理方式 . 内存非连 ...
-
RedHat7上安装PHP
编译安装PHP 下载PHP# wget http://cn2.php.net/distributions/php-7.0.0.tar.gz 解压缩PHP# tar -zxvf php-7.0.0.ta ...
-
通过Web Api 和 Angular.js 构建单页面的web 程序
通过Web Api 和 Angular.js 构建单页面的web 程序 在传统的web 应用程序中,浏览器端通过向服务器端发送请求,然后服务器端根据这个请求发送HTML到浏览器,这个响应将会影响整个的 ...
-
html代替submit按钮的图片代码
代替submit按钮的图片代码格式是 <input type="image" name="..." src="..." onClick ...
-
ThreadLocal源码解析
主要用途 1)设计线程安全的类 2)存储无需共享的线程信息 设计思路 ThreadLocalMap原理 1)对象存储位置-->当前线程的ThreadLocalMap ThreadLocalMap ...
-
【ES】ElasticSearch初体验之使用Java进行最基本的增删改查~
好久没写博文了, 最近项目中使用到了ElaticSearch相关的一些内容, 刚好自己也来做个总结. 现在自己也只能算得上入门, 总结下自己在工作中使用Java操作ES的一些小经验吧. 本文总共分为三 ...
-
django下命令行工具
django-admin.py是Django的一个用户管理任务的命令行工具,manage.py是对django-admin.py的简单包装,每个Django Project里面都包含一个manage. ...
-
IoC和AOP的理解
spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...
-
leetcode刷题11. 盛最多水的容器
做题连接https://leetcode-cn.com/problems/container-with-most-water/submissions/ 本题分为两种方法: 暴力法: int maxAr ...