我的编程空间,编程开发者的网络收藏夹
学习永远不晚

.NET中IoC框架Autofac用法讲解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

.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用法讲解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

.NET中IoC框架Autofac用法讲解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

.NET中的MassTransit分布式应用框架详解

MassTransit是一款优秀的分布式应用框架,可作为分布式应用的消息总线,也可以用作单体应用的事件总线,这篇文章主要介绍了.NET中的MassTransit分布式应用框架,需要的朋友可以参考下
2022-11-13

怎么理解.NET三层架构应用中的十层框架

这篇文章给大家介绍怎么理解.NET三层架构应用中的十层框架,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。凡是接触.net开发的,***要理解的就是三层架构的重要思想。关于三层架构的概述 我就不多说了,相信大家都早已明白
2023-06-17

Python的Flask框架中配置多个子域名的方法讲解

Flask子域名 一般用于数量比较少的子域名,一个模块对应一个子域名。先看下面一个例子: modules.py:from flask import Blueprintpublic = Blueprint('public', __name__
2022-06-04

举例讲解Android应用开发中OTTO框架的基本使用

OTTO是一个EventBus类型的事件传输总线,它可以提供“存储转发”的功能,让你APP中各个组件的交流更加便利,让你的程序分层更加清晰。 使用场景 OTTO基于Observer设计模式。它有发布者,订阅者这两个主要对象。OTTO的最佳实
2022-06-06

Android中XUtils3框架使用方法详解(一)

xUtils简介 xUtils 包含了很多实用的android工具。xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...xUitls 最低兼容android
2022-06-06

讲解Python的Scrapy爬虫框架使用代理进行采集的方法

1.在Scrapy工程下新建“middlewares.py”# Importing base64 library because we'll need it ONLY in case if the proxy we are going to
2022-06-04

实例解析Python的Twisted框架中Deferred对象的用法

Deferred对象结构 Deferred由一系列成对的回调链组成,每一对都包含一个用于处理成功的回调(callbacks)和一个用于处理错误的回调(errbacks)。初始状态下,deffereds将由两个空回调链组成。在向其中添加回调时
2022-06-04

详解Python的Twisted框架中reactor事件管理器的用法

铺垫 在大量的实践中,似乎我们总是通过类似的方式来使用异步编程:监听事件事件发生执行对应的回调函数回调完成(可能产生新的事件添加进监听队列)回到1,监听事件因此我们将这样的异步模式称为Reactor模式,例如在iOS开发中的Run Loop
2022-06-04

从源码解析Python的Flask框架中request对象的用法

from flask import request Flask 是一个人气非常高的Python Web框架,笔者也拿它写过一些大大小小的项目,Flask 有一个特性我非常的喜欢,就是无论在什么地方,如果你想要获取当前的request对象,只
2022-06-04

Python的Django框架中forms表单类的使用方法详解

Form表单的功能自动生成HTML表单元素检查表单数据的合法性如果验证错误,重新显示表单(数据不会重置)数据类型转换(字符类型的数据转换成相应的Python类型)Form相关的对象包括Widget:用来渲染成HTML元素的工具,如:form
2022-06-04

详解Spring 框架中切入点 pointcut 表达式的常用写法

自从使用 AspectJ 风格切面配置,使得 spring 的切面配置大大简化,但是 AspectJ 是另外一个开源项目,其规则表达式的语法也稍稍有些怪异。下面给出一些常见示例的写法,例如,下面是一个对 Service 包上所有方法的切面配
2023-05-31

Flask框架中密码的加盐哈希加密和验证功能的用法详解

密码加密简介 密码存储的主要形式:明文存储:肉眼就可以识别,没有任何安全性。加密存储:通过一定的变换形式,使得密码原文不易被识别。密码加密的几类方式:明文转码加密:BASE64, 7BIT等,这种方式只是个障眼法,不是真正的加密。对称算法加
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录