Autofac容器

IoC:注册、注入(解析)、生命周期

Autofac的基本使用

基本使用

需要在NuGet包安装Autofac---建议7.1.0版本

注册:

默认注册:
// 容器的初始化
ContainerBuilder builder = new ContainerBuilder();
// 注册需要解析的对象类型  -- 默认不是单例模式
builder.RegisterType<Person>();IContainer container = builder.Build();// 实现 --------
Person person = container.Resolve<Person>();
单例:需要传参:初始化这个对象

ExternallyOwned:告诉这个容器永远不会释放这个容器

builder.RegisterInstance<Person>(new Person()).ExternallyOwned();// 实现 ----------
Person person = container.Resolve<Person>();
Lambda表达式
泛型类
最基本的基于接口的注册:相同的接口类型,后面的注册会覆盖前面的

PreserveExistingDefaults:当前注册为非默认值

builder.RegisterType<Man>().As<IPerson>().PreserveExistingDefaults();// 实现  --------
IPerson person = container.Resolve<IPerson>();  
单接口多实现:
同过Named
builder.RegisterType<Man>().Named<IPerson>("Man");
builder.RegisterType<Woman>().Named<IPerson>("Woman");//  使用-------IPerson person = container.ResolveNamed<IPerson>("Man");
同过Keyed
builder.RegisterType<Man>().Keyed<IPerson>(PersonType.Man);
builder.RegisterType<Woman>().Keyed<IPerson>(PersonType.Woman);// 使用 ---------IPerson person = container.ResolveKeyed<IPerson>(PersonType.Man);
也是用Keyed,获取到所有的PersonType, IPerson的实例 ,然后同过字典的方式调用方法
builder.RegisterType<Man>().Keyed<IPerson>(PersonType.Man);
builder.RegisterType<Woman>().Keyed<IPerson>(PersonType.Woman);// 使用-----------
// ps就是所有接口的实现 
var ps = container.Resolve<IIndex<PersonType, IPerson>>();
ps[PersonType.Man].SayHello();
ps[PersonType.Woman].SayHello();
索引
构造函数选择:

UsingConstructor:使用构造函数的类型是什么

builder.RegisterType<Man>().As<IPerson>().UsingConstructor(typeof(string));// 使用 --------
// 通过 NamedParameter 进行传值 通过key value
IPerson person = container.Resolve<IPerson>(new NamedParameter("arg", "1111"));       

注入:和普通的IOC注入方式一样

基本注入
属性注入
方法注入

Resolve参数

对象释放

绑定事件

生命周期

builder.RegisterType<Man>().As<IPerson>().OnRegistered(e => Console.WriteLine("在注册的时候调用!")).OnPreparing(e => Console.WriteLine("在准备创建的时候调用!")).OnActivating(e => Console.WriteLine("在创建之前调用!")).OnActivated(e => Console.WriteLine("在创建之后调用!")).OnRelease(e => Console.WriteLine("在释放占用的资源之前调用!"));

MVVM应用中的使用

在MVVM应用中的ViewModelLocator中:

 public class ViewModelLocator{IContainer container;public ViewModelLocator(){// 注册ContainerBuilder builder = new ContainerBuilder();builder.RegisterType<MainViewModel>();container = builder.Build();}public MainViewModel MainViewModel { get => container.Resolve<MainViewModel>(); }}

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

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

相关文章

K8S部署MySQL5.7的主从服务

mysql-slave-0是master mysql-slave-1是slave 当mysql写的时候&#xff0c;找headless service中的 mysql-slave-0.mysql57-slave-headless&#xff1b;当mysql读的时候&#xff0c;找clusterip service中的mysql57-slave-read读&#xff0c;实现读写分离。 statefulset维护两个…

Linux操作系统常见面试题

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 分享常见的操作系统…

原创~尚未发表!基于改进秃鹰算法的多区域微网经济优化调度程序代码!

前言 随着光伏、风电等分布式电源的发展&#xff0c;配电网的供电模式得以改变&#xff0c;解决了传统火力发电带来的能源匮乏及环境污染问题&#xff0c;但其发电的随机性及波动性对配电网的稳定运行造成一定影响。以多个微电网组成的微电网群可有效消纳分布式电源&#xff0…

Anthropic公开Claude AI系统提示词

&#x1f989; AI新闻 &#x1f680; Anthropic公开Claude AI系统提示词 摘要&#xff1a;Anthropic公司近日公开了Claude AI模型的系统提示词&#xff0c;旨在提高AI模型对人类指令的理解。系统提示词设定了对话背景和行为规则&#xff0c;通常是为了防止模型出现不良行为。…

Python数据分析利器之groupby和pivot_table使用详解

概要 在数据分析的过程中,数据聚合与数据透视是两项非常重要的操作。Python的Pandas库提供了强大的工具——groupby和pivot_table,帮助我们高效地进行数据聚合和透视分析。本文将详细介绍如何使用这两个功能,并结合示例代码展示它们的实际应用,帮助更好地掌握数据分析的技…

PTA团体程序设计天梯赛

这次题目出得比前几次简单很多&#xff0c;但有几道题占用的时间太多&#xff0c;导致后面几题仓促写完&#xff0c;未能全部正确&#xff0c;还是得多练 目录 L1-2 九牛一毛 L1-3 小孩子才做选择&#xff0c;大人全都要 L1-5 试试手气 L1-6 打PTA L1-8 随机输一次 L2-…

C++ 类和对象 3

构造函数扩展 构造函数体内的赋值&#xff1a;构造函数一般是用于类对象的初始化的&#xff0c;但严谨来说并不是成员变量的初始化&#xff0c;内置类型的初始化是在生成的同时赋值而且仅有一次&#xff0c;但是在构造函数体内是能对成员变量进行多次赋值的。所以在函数体内的…

探索OpenCV:图像处理基础与实践

探索OpenCV&#xff1a;图像处理基础与实践 前言图像读取基础安装OpenCV库读取彩色与灰度图像 RGB颜色模型颜色通道解析单通道图像显示 感兴趣区域&#xff08;ROI&#xff09;图像处理进阶技巧图像打码图像组合图像缩放 结语 前言 在当今数字化时代&#xff0c;图像不仅是我们…

详谈进程等待

目录 前言1. 进程等待的必要性1.1 进程等待的定义 2. 如何进行进程等待2.1 wait 单进程2.2 wait 多进程2.3 status && 退出情况2.3.1 status 参数构成2.3.2 简证 status 参数构成2.3.3 进程等待失败2.3.4 宏调用查看退出信息 3. 进程等待的原理 前言 本篇文章继上一篇…

Hive SQL

一、基本数据类型 tinyint 1byte 有符号整数 smallint 2byte 有符号整数 int 4byte 有符号整数 bigint 8byte 有符号整数 boolean 布尔类型&#xff0c;true或者false float 单精度浮点数 double 双精度浮点数 decim…

C语言07---指针进阶

指针万能拆解法 char型指针 char型指针实质上跟别的类型的指针并无本质区别&#xff0c;但由于C语言中的字符串以字符数组的方式存储&#xff0c;而数组在大多数场合又会表现为指针&#xff0c;因此字符串在绝大多数场合就表现为char型指针。 定义&#xff1a; char *p &qu…

区块链国赛第六套样题(关于运维)

任务1-2&#xff1a;区块链系统部署与运维 围绕食品安全溯源区块链平台部署与运维需求&#xff0c;进行项目相关系统、节点以及管理工具的部署工作。通过监控工具完成对网络、节点服务的监控。最终利用业务需求规范&#xff0c;完成系统日志、网络参数、节点服务等系统结构的维…

Hadoop的HA配置与实现(ZooKeeper)

目录 一、Hadoop的HA架构二、配置实现Hadoop的HA三、效果 一、Hadoop的HA架构 集群规划 112&#xff1a;NameNode1 ResourceManager1 JournalNode1 113&#xff1a;NameNode2 ResourceManager2 JournalNode2 114&#xff1a;DataNode1 NodeManager1 115&#xff1a;DataNode2 N…

linux 云主机下载 rpm 包安装 oracle java jdk21 实录(华为云 EulerOS)

本来是想通过 yum install 相关的 openjdk 版本的, 但老是提示说找不到, 也不想去配置相关的仓库了, 所以改成去 oracle 官网下载 jdk21 的 rpm 包来安装. 云主机是华为云的 EulerOS , 具体为 Huawei Cloud EulerOS 2.0 标准版 64位(公共镜像), 相对于用的比较熟 centos, 差别…

学习之在window上安装MySQL server 并连接到Navicat

一、下载 下载地址&#xff1a;https://www.mysql.com/ 二、安装 1、双击软件安装2、点击yes

云计算实训36——mysql镜像管理、同步容器和宿主机时间、在容器外执行容器内命令、容器的ip地址不稳定问题、基础镜像的制作、镜像应用

一、线上考试系统的数据虚拟化技术部署 1.部署前段服务器 步骤一&#xff1a;将资源上传到服务器 将dist.zip上传给服务器 下载unzip的包 yum -y install unzip 解压 unzip dist.zip 步骤二&#xff1a;创建基础容器在服务器上 启动服务 systemctl start docker.servic…

用 Go 语言实现常见的十大排序算法(上)

十大常见的排序算法有&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09; 选择排序&#xff08;Selection Sort&#xff09; 插入排序&#xff08;Insertion Sort&#xff09; 希尔排序&#xff08;Shell Sort&#xff09; 归并排序&#xff08;Merge Sort&#xf…

<数据集>考场行为识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2192张 标注数量(xml文件个数)&#xff1a;2192 标注数量(txt文件个数)&#xff1a;2192 标注类别数&#xff1a;2 标注类别名称&#xff1a;[cheating, good] 序号类别名称图片数框数1cheating128214412good1067…

气膜建筑与装配式建筑的对比分析—轻空间

在现代建筑中&#xff0c;气膜建筑和装配式建筑都作为新型建筑形式受到关注。然而&#xff0c;在很多应用场景中&#xff0c;气膜建筑展现出了比装配式建筑更为明显的优势。以下将着重对比气膜建筑相较于装配式建筑的独特优势。 气膜建筑的突出优势 1. 更快的施工速度 气膜建筑…

在 Debian 上安装 IntelliJ IDEA 笔记

在 Debian&#x1f4a9; 上安装 IntelliJ IDEA &#x1f4a1; 笔记 下载安装 JDK17安装 IntelliJ IDEA Community添加桌面启动项&#xff08;快捷方式&#xff09; 参考资料 下载 两个包已经下好了&#xff0c;一个JDK17&#xff0c;一个IntelliJ IDEA Community 使用 wget ur…