框架必知必会——Autofac概述及应用

Autofac概述

Autofac 是一个依赖注入框架,它遵循控制反转(Inversion of Control, IoC)原则,通过构造函数注入、属性注入等方式来管理对象的依赖关系。它的核心原理是将对象的创建和生命周期管理交给容器,而不是在代码中手动管理。

Autofac的作用主要有以下几点

  • 解耦:通过依赖注入,将组件的创建和依赖关系从业务逻辑中分离,使代码更加模块化和可维护。
  • 管理生命周期:可以控制对象的生命周期,例如单例、瞬时等,从而优化资源管理。
  • 提高测试性:使单元测试更加容易,因为依赖项可以轻松地替换为模拟对象

 所以主要用到如下几个场景

1)大型项目

2)模块化开发的时候

3)要做单元测试的时候

使用案例

以下介绍一下在WPF中,我们该如何使用这个框架;(如果是其他的MVVM框架,可能已经使用了该框架)

假设我们有一个接口及其实现

public interface IMessageService
{string GetMessage();
}public class MessageService : IMessageService
{public string GetMessage(){return "Hello, Autofac!";}
}

 WPF的使用案例

1)在app.xaml.cs中配置Autofac

public partial class App : Application{private IContainer _container;protected override void OnStartup(StartupEventArgs e){var builder = new ContainerBuilder();// 注册类型builder.RegisterType<MessageService>().As<IMessageService>();_container = builder.Build();// 启动主窗口var mainWindow = _container.Resolve<MainWindow>();mainWindow.Show();}}

 其中,如果要对这个接口做生命周期管理的话,有

// 注册为单例 builder.RegisterType<SingletonService>().As<IService>().SingleInstance(); // 注册为瞬时 builder.RegisterType<TransientService>().As<IService>().InstancePerDependency();

 

// 注册对象在IoC容器中的生命周期触发事件
 builder.RegisterType<MessageService >().As<IMessageService >()
     .OnRegistered(e => Console.WriteLine("在注册的时候调用!"))
     .OnPreparing(e => Console.WriteLine("在准备创建的时候调用!"))
     .OnActivating(e => Console.WriteLine("在创建之前调用!"))
     .OnActivated(e => Console.WriteLine("创建之后调用!"))
     /// 
     .OnRelease(e => Console.WriteLine("在释放占用的资源之前调用!"));

那我们注入接口的原因为,当我们实现需要更改的时候,我们就不需要再次更改引用这个接口的类,而是只需要去更改实现这个接口的类即可。这样子就可以很好的解耦掉代码,不影响其他部门。

当我们要应用的时候——》

using System.Windows;namespace WpfApp
{public partial class MainWindow : Window{private readonly IMessageService _messageService;public MainWindow(IMessageService messageService)//依赖于接口,而不是实现{InitializeComponent();_messageService = messageService;MessageBox.Show(_messageService.GetMessage());}}
}

其他用到此框架的大同小异,到时候我们看到也就知道啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.6.9周报

目录 摘要 ABSTRACT 一、文献阅读 1、相关信息 2、摘要 3、文献解读 1、Introduction 2、文章主要贡献 3、模型架构 4、实验 4、结论 二、代码实现 总结 摘要 本周我阅读了一篇题目为《Unlocking the Potential of Transformers in Time Series Forecasting with …

如何理解与学习数学分析——第二部分——数学分析中的基本概念——第8章——可微性

第2 部分&#xff1a;数学分析中的基本概念 (Concepts in Analysis) 8. 可微性(Differentiability) 本章讨论梯度(gradients)/斜率(slopes)和切线(tangent)&#xff0c;指出常见的误解并解释如何避免这些误解。将可微性的定义与图形表示联系起来&#xff0c;展示如何将其应用…

【2024】零基础Python 快速入门篇

2023年是AI的元年&#xff0c;AI的爆火不仅推动了科技领域的进步&#xff0c;更让 Python 语言成为了这一变革中的关键角色。 Python 语言简单易懂&#xff0c;语法清晰明了&#xff0c;懂一点英语的都能学得会。很适合在职场摸爬滚打多年的前端组长作为捅破天花板的语言&…

SASS模块化与组织文件

在前端开发中&#xff0c;CSS预处理器已经成为我们不可或缺的工具&#xff0c;其中Sass是最受欢迎的之一。如果你想要提升你的Sass代码的可维护性、可重用性和可读性&#xff0c;下面的最佳实践将帮助你更好地组织和模块化你的Sass。 1. 文件组织与模块化 Sass允许我们将样式…

Linux服务器扩容及磁盘分区(LVM和非LVM)

Linux扩容及磁盘分区&#xff08;LVM和非LVM&#xff09; 本文主要介绍了阿里云服务器centos的扩容方法&#xff1a;非LVM分区扩容方法&#xff08;系统盘&#xff09;&#xff0c;以及磁盘改LVM并分区&#xff08;数据盘&#xff09;。主要是ext4文件系统及xfs磁盘scsi MBR分…

【轻量化】YOLOv10: Real-Time End-to-End Object Detection

论文题目&#xff1a;YOLOv10: Real-Time End-to-End Object Detection 研究单位&#xff1a;清华大学 论文链接&#xff1a;http://arxiv.org/abs/2405.14458 代码链接&#xff1a;https://github.com/THU-MIG/yolov10 推荐测试博客&#xff1a;YOLOv10最全使用教程&#xff0…

现代密码学-X.509认证业务

X.509的基础式公钥密码体制和数字签名。 证书 证书的格式 证书由可信的认证机构CA建立并由CA或者用户自己将其放入目录&#xff0c;以供其他用户方便访问。目录服务器本身并不负责为用户建立公钥证书&#xff0c;仅仅为用户访问公钥提供方便。 x.509证书格式 证书的获取 其…

微前端基于qiankun微前端应用间通信方案实践

【qiankunvue】微前端子应用之间的通信方式总结 ------------------------------------------------------------------补充--------------------------------------------------------- 什么是微前端&#xff1f; 微前端 微前端是一种多个团队通过独立发布功能的方式来共同构…

全局路径规划之4.5:Kinodynamic A*算法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言Kinodynamic A*算法1、前端kinodynamic A*算法动力学路径搜索的功能2、步骤一:进行实时采样,离散的获得一些轨迹点(节点point_set,即创建open_l…

【Linux】用户和组的管理、综合实训

目录 实训1&#xff1a;用户的管理 实训2:组的管理 实训3:综合实训 实训1&#xff1a;用户的管理 (1)创建一个新用户userl&#xff0c;设置其主目录为/home/user 1。 (2)查看/etc/passwd 文件的最后一行&#xff0c;看看是如何记录的。 (3)查看文件/etc/shadow文件的最后一…

NLP入门——数据预处理:编码规范化

编码规范化 在计算机中&#xff0c;我们需要将字符与字节序列之间建立起映射关系&#xff0c;这个过程被称为编码。有许多不同的编码方式&#xff0c;例如 ASCII、UTF-8、UTF-16 和 GBK 等。这些编码方式会将每个字符编码为一个或多个字节&#xff0c;以便于在计算机、网络和其…

使用ipdb来在终端上面进行debug

在终端上使用 ipdb 进行调试是一个非常强大的方式&#xff0c;可以帮助你在Python代码中设置断点&#xff0c;检查变量值&#xff0c;逐步执行代码等。以下是一个基本的教程&#xff0c;介绍如何在Python代码中使用 ipdb 进行调试&#xff1a; 安装 ipdb 首先&#xff0c;你需…

封装了一个仿照抖音评论轮播效果的iOS轮播视图

效果图 原理 就是我们在一个视图里面有两个子视图&#xff0c;一个是currentView, 一个是willShowView,在一次动画过程中&#xff0c;我们改变current View的frame&#xff0c;同时改变willShowView的frame&#xff0c;同时&#xff0c;需要改变currentVIew 的transform.y不然…

软件管理、rpm安装、yum安装、源码编译安装

目录 一、Windows安装/卸载 二、软件的卸载&#xff1a; 三、Linux的软件安装和卸载 3.1rpm安装 第一步&#xff1a;挂在光盘 第二步&#xff1a;查看/mnt 第三步&#xff1a;切换到/mnt/Packages 第四步&#xff1a;安装 3.2yum安装&#xff08;使用关盘作为yum源&…

Facechain系列: constants.py文件解读

在根目录下还有个facechain目录&#xff0c;其中的constants.py文件中定义了代码控制的重要参数。 1.姿态控制 在应用代码进行推理&#xff08;见这里Facechain系列: 通过代码进行推理&#xff09;中&#xff0c;如果将以下代码 use_pose_model False 修改为 use_pose_mo…

低代码专题 | 低代码开发平台一般都有哪些功能和模块?

在上一篇文章中&#xff0c;我们已经对低代码开发平台的概念进行了初步的探讨&#xff0c;认识到了低代码开发平台提高开发效率、降低技术门槛方面的巨大潜力。 然而&#xff0c;要真正掌握并应用低代码开发平台&#xff0c;还需要深入了解其背后的功能与模块构成。这篇就对低…

【数据结构】平衡二叉树(AVL树)

目录 前言 一、AVL树概念 二、AVL树节点定义 三、AVL树插入 1. 按照二叉搜索树的方式插入新节点 2. 维护节点的平衡因子与调整树的结构 a. 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 b. 新节点插入较高右子树的右侧---右右&#xff1a;左单旋 c. 新节点插入…

IIS 服务器,下载APK 文件,用于发布更新最新的APK包

IIS 默认情况下无法下载 .apk 文件&#xff0c;需要对 IIS 服务进行设置 1、打开 IIS 对应的应用 选中MIME 类型 右键 打开功能 2、右键添加 文件扩展名&#xff1a;.apk MIME 类型输入&#xff1a;application/vnd.android.package-archive 3、重启应用 4、浏览器访问 服务地…

OpenMV学习笔记4——二维码识别

一、示例程序 按照下图顺序点击&#xff0c;即可打开官方在IDE中准备好的二维码实例程序&#xff1a; # QRCode Example # # This example shows the power of the OpenMV Cam to detect QR Codes # using lens correction (see the qrcodes_with_lens_corr.py script for hig…

SRE养成计划(持续更新)

SRE&#xff08;Site Reliability Engineering&#xff0c;网站可靠性工程师&#xff09;是一种实践&#xff0c;旨在将软件工程的方法和工具应用于运维领域&#xff0c;以提高大型复杂系统的可靠性、可扩展性和性能。SRE工程师不仅负责保持系统的高可用性和性能&#xff0c;还…