.NET中IoC框架Autofac用法讲解

1 前置阅读

在阅读本文章之前,你可以先阅读:

  • 什么是依赖注入

2 简介

Autofac与C#语言的结合非常紧密,并学习它非常的简单,也是.NET领域最为流行的IoC框架之一。

3 使用

首先,将Autofac的NuGet软件包安装到您的应用程序中。

Autofac

然后,我们通过创建ContainerBuilder来注册组件。

var builder = new ContainerBuilder();
builder.RegisterType<Knife>();
builder.RegisterType<Actor>();

接着,可以通过在一个已存在的生命周期上调用 BeginLifetimeScope() 方法来创建另一个生命周期作用域, 以根容器作为起始。生命周期作用域是可释放的并且追踪组件的释放, 因此确保你总是调用了 "Dispose()"" 或者把它们包裹在 "using" 语句内。

using (var scope = container.BeginLifetimeScope())
{
}

最后,在注册完组件并暴露相应的服务后, 你可以从创建的容器或其子生命周期中解析服务. 让我们使用 Resolve() 方法来实现:

using (var scope = container.BeginLifetimeScope())
{
    var actor = scope.Resolve<Actor>();
    actor.Kill();
}

让我们来看看完整代码:

using System;

namespace Autofac.ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<Knife>();
            builder.RegisterType<Actor>();

            var container = builder.Build();
            using (var scope = container.BeginLifetimeScope())
            {
                var actor = scope.Resolve<Actor>();
                actor.Kill();
            }

            Console.ReadKey();
        }
    }
}

让我们来看看输出结果:

小明用刀杀怪

4 在 Asp.Net Core 中使用

首先,将Autofac,Autofac.Extensions.DependencyInjection的NuGet软件包安装到您的应用程序中。

dotnet add package Autofac
dotnet add package Autofac.Extensions.DependencyInjection

然后,在Program.Main中增加.UseServiceProviderFactory(new AutofacServiceProviderFactory())

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        })
        .UseServiceProviderFactory(new AutofacServiceProviderFactory());

接着,在Startup.ConfigureServices中增加services.AddControllersWithViews();

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Autofac.WebApi", Version = "v1" });
    });

    services.AddControllersWithViews();
}

接着,在Startup.ConfigureContainer方法中,将Knife,Actor注册到Autofac中ContainerBuilder。

public void ConfigureContainer(ContainerBuilder builder)
{
    builder.RegisterType<Knife>();
    builder.RegisterType<Actor>();
}

最后,增加HomeController,执行actor.Kill。

using Microsoft.AspNetCore.Mvc;
using System;

namespace Autofac.WebApi.Controllers
{
    [Route("[controller]")]
    [ApiController]
    public class HomeController : Controller
    {

        private readonly Actor actor;
        public HomeController(Actor actor)
        {
            this.actor = actor ?? throw new ArgumentNullException(nameof(actor));
        }

        [HttpGet]
        public string Get()
        {
            return actor.Kill();
        }
    }
}

启动调试,让我们来看看输出结果:

小明用刀杀怪

到此这篇关于.NET中IoC框架Autofac用法讲解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 浅析依赖注入框架Autofac的使用

    下面通过代码给大家分享下依赖注入框架Autofac的使用,具体如下所示:  Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的. 1)解压它的压缩包,主要看到Autofac.dll,Autofac.Configuration.dll,这也是本篇文章重点使用的Autofac的类库. 2)创建一个控制台工程,并且引用以上的DLL文件.创建一个数据库操作接口IDatabase.cs: /// <summary

  • NET Core 3.0 AutoFac内置DI替换的新姿势分享

    .NET Core 3.0 和 以往版本不同,替换AutoFac服务的方式有了一定的变化,在尝试着升级项目的时候出现了一些问题. 原来在NET Core 2.1时候,AutoFac返回一个 IServiceProvider 参数注入到ConfigureServices .NET Core 服务中,基本大痣是这样做的. 首先我们需要一个重写 Autofac.Module 的方法,这将用于将我们 Register [数据访问层] 以及 Services [逻辑层] 的注册. public class

  • 谈一谈autofac组件的实例范围

    实例范围决定如何在请求之间共享服务. 原文地址:http://docs.autofac.org/en/latest/lifetime/instance-scope.html 每个依赖一个实例 使用这个选项,每次请求服务都会返回一个新实例.使用 InstancePerDependency() 指定.这是默认选项.下面的代码,第2行和第3行是等价的. var builder = new ContainerBuilder(); builder.RegisterType<Worker>(); buil

  • .Net Core中使用Autofac替换自带的DI容器的示例

    目录 项目创建 方案演示 .Net Core自带DI 不同的特性 批量注入 属性注入 存储并提取容器实例 为什么叫浅谈呢?就是字面上的意思,讲得比较浅,又不是不能用(这样是不对的)!!! Aufofac大家都不陌生了,说是.Net生态下最优秀的IOC框架那是一点都过分.用的人多了,使用教程也十分丰富,官网教程也比较详细(如果英文功底还不错的话). 那我为什么还要写这样一篇博客呢,一是用作学习笔记,二就是闲的. 废话不多说,开始正文 项目创建 云创建一个.Net Core Api项目,然后再添加一

  • .Net Core 之AutoFac的使用

    目录 Autofac介绍 组件的三种注册方式 生命周期 AutoFac 在asp .net core中的使用 本文不介绍IoC和DI的概念,如果你对Ioc之前没有了解的话,建议先去搜索一下相关的资料 这篇文章将简单介绍一下AutoFac的基本使用以及在asp .net core中的应用 Autofac介绍 组件的三种注册方式 1.反射 2.现成的实例(new) 3.lambda表达式 (一个执行实例化对象的匿名方法) 下面是一些简短的示例,我尽可能多的列出来一些常用的注册方式,同时在注释中解释下

  • .NET中IoC框架Autofac用法讲解

    1 前置阅读 在阅读本文章之前,你可以先阅读: 什么是依赖注入 2 简介 Autofac与C#语言的结合非常紧密,并学习它非常的简单,也是.NET领域最为流行的IoC框架之一. 3 使用 首先,将Autofac的NuGet软件包安装到您的应用程序中. Autofac 然后,我们通过创建ContainerBuilder来注册组件. var builder = new ContainerBuilder(); builder.RegisterType<Knife>(); builder.Regist

  • php中yar框架实例用法讲解

    RPC是在TCP协议上面的网络传输和远程服务调用,通过TCP来进行数据传输.底层都是tcp,更高层的封装.因此这就是应用间通信间不直接用TCP,而是选用RPC框架的原因,本章教学内容就是给大家带来rpc中yar框架的使用,内容简单明了,希望对每一位在学习php道路上的小伙伴都能得到掌握了解. 编译: /usr/local/php/bin/phpize 配置: extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-201707

  • php中PHPUnit框架实例用法

    本期给大家带来的框架是一个单元测试内容,本身不是很难的东西,大家觉得困难,可能是把自己框在了技术上,事实上,并非如此,我们没有设置好一个项目,不一定是自己的技术不达标,更多可能也许是对一个项目时间的安排的衡量和考虑并不全面,下面就大家遇到的一些问题,给大家编写以下内容,供大家参考. 安装: composer require --dev phpunit/phpunit 放置test目录: { "autoload": { "psr-4": { "Control

  • MySQL中Like概念及用法讲解

    Like中文解释为喜欢的意思,但当应用于MySQL数据库中,Like则是一种语句,用于模糊查询,主要是针对字符型字段的,在一个字符型字段列中检索包含对应子串的.本文向大家介绍MySQL中Like语句. 一.Like是什么意思 1.Like算作MySQL中的谓词,其应用与is.=.>和<等符号用法类似. 2.在sql结构化查询语言中,like语句有着至关重要的作用. 3.从某种意义上讲,Like可看作是一个精简的正则表达式功能. 二.Like作用 like语句的语法格式是 select * fr

  • php中yii框架实例用法

    Yii2框架在目前而言,网络上好评不断,最主要的原因,不管是新的框架,还是回顾旧的框架,总是有一个无法代替的优点,就是做事快,在性能使用上,也是一般框架无法媲美的,在php最好用的框架评选了,永远都是前三,就这么一个属性好用,集结各类优点的框架,一定是我们在学习框架时候的首先,了解是不可避免的. yii框架简单介绍 快速开发web应用程序 版本: 1.1和2.0,最经常使用的是2.0 优点: 1.yii2中gii比较方便,且yii2组件的耦合性也是最强的. 2.重量级框架,可以把代码运行发挥到极

  • python中if-elif-else语句实例用法讲解

    1.判断多个条件的语句,if为真则执行if后面的语句. 2.如果elif是真的,则执行elif,后面的代码块不执行. 3.如果if和elif不满意,执行else语句. 实例 if expression: statements... elif expression: statements... # 可以有1条或多条elif语句 else: statement... 知识点扩充: 有的时候,一个 if - else - 还不够用.比如,根据年龄的划分: 条件1:18岁或以上:adult 条件2:6岁

  • Java的Hibernate框架中的基本映射用法讲解

    Hibernate进行了分类整合发现其实Hibernate分为三大部分:核心对象.映射.HQL,这三大部分开发过程中最常使用,前几篇讨论了核心对象及对象之间的转换方法,接下来讨论Hibernate的映射使用方法.   Hibernate一个重要的功能就是映射,它能够在对象模型和关系模型之间转换,是面向对象编程思想提倡使用的,使用映射程序开发人员只需要关心对象模型中代码的编写.对象和关系数据库之间的映射通常是由XML文档来定义的.这个映射文档被设计为易读的,并且可以手动修改.这种映射关系我总结为下

  • PHP中str_split()函数的用法讲解

    PHP str_split() 函数 实例 把字符串 "Hello" 分割到数组中: <?php print_r(str_split("Hello")); ?> 定义和用法 str_split()函数把字符串分割到数组中. 语法 str_split( _string,length_ ) 实例 1 使用 length 参数: <?php print_r(str_split("Hello",3)); ?> 总结 以上就是这篇文

  • PHP中quotemeta()函数的用法讲解

    PHP quotemeta() 函数 实例 在预定义的字符前添加反斜杠: <?php $str = "Hello world. (can you hear me?)"; echo quotemeta($str); ?> 定义和用法 quotemeta()函数在字符串中某些预定义的字符前添加反斜杠. 预定义的字符: 句号(.) 反斜杠(\) 加号(+) 星号(*) 问号(?) 方括号([]) 脱字号(^) 美元符号($) 圆括号(()) 提示: 该函数可用于转义拥有特殊意义的

  • PHP中md5()函数的用法讲解

    PHP md5() 函数 实例 计算字符串 "Hello" 的 MD5 散列: <?php $str = "Hello"; echo md5($str); ?> 定义和用法 md5()函数计算字符串的 MD5 散列. md5()函数使用 RSA 数据安全,包括 MD5 报文摘要算法. 来自 RFC 1321 的解释 - MD5 报文摘要算法: MD5 报文摘要算法将任意长度的信息作为输入值,并将其换算成一个 128 位长度的"指纹信息"

随机推荐