背景:

AutoFac是解决项目耦合的比较不错的框架.是构建大型项目上的一把利器.这里就记录一下安装以及使用的过程以及心得.方便新手尽快上手

使用过程:

1.安装:

2.引入命名空间:

3.两个部分,注册+使用:

        ///注册容器public Autofac.ContainerBuilder servers{get; set;}///从容器中获取服务的方式public Autofac.IContainer container{get; set;}

4.创建实用案例:

封装AutoFac; 创建接口 IAnimation->抽象类 AnimationBase ->三个实现类LineAnimation,SinAnimation,CosinAnimation; 以及 测试类 AnimationTest

实现如下:

   public interface IAnimation{string Name{get;set;}void PrintF(string str);}public abstract class AnimationBase : IAnimation{public string Name{get;set;}public virtual void PrintF(string str){}}public class LineAnimation : AnimationBase{public LineAnimation():base(){Name = "LineServer";}public override void PrintF(string str){Console.WriteLine($"{Name}: {str}");}}public class SinAnimation : AnimationBase{public SinAnimation() : base(){Name = "SinServer";}public override void PrintF(string str){Console.WriteLine($"{Name}: {str}");}}public class CosinAnimation : AnimationBase{public CosinAnimation() : base(){Name = "CosinServer";}public SinAnimation ISinServer{get;set;}public override void PrintF(string str){ISinServer?.PrintF("属性注入之: Sin");Console.WriteLine($"{Name}: {str}");}}public class IOC{public Autofac.ContainerBuilder servers{get; set;}public Autofac.IContainer container{get; set;}public IOC(){servers = new ContainerBuilder();}/// <summary>/// 添加服务并注入./// </summary>public virtual void InitServersAction(Action action){if (servers == null) servers = new ContainerBuilder();{action();}container = servers.Build();}public IServer GetServer<IServer>(){return container.Resolve<IServer>();}}public class AnimationTest{public AnimationTest(IAnimation IAniFace){gAnimation = IAniFace;}public AnimationTest(){}private IAnimation gAnimation{get;set;}public void SetIAniamtion(IAnimation? IAniFace){gAnimation = IAniFace;}public void PrintInfo(){gAnimation?.PrintF("测试服务");}}

5:实例讲解,以及使用方式

5.1,默认为构造函数注入,属性注入,函数注入

 IOC gIoc = new IOC();gIoc.InitServersAction(()=> {//通过实例注入.
gIoc.servers.RegisterType<LineAnimation>().As<IAnimation, LineAnimation>().InstancePerLifetimeScope().PreserveExistingDefaults();gIoc.servers.RegisterType<SinAnimation>().As<IAnimation, SinAnimation>().InstancePerLifetimeScope();  //这个方式好,同时替代上面三行代码//属性注入CosAnimation
gIoc.servers.RegisterType<CosinAnimation>().PropertiesAutowired();gIoc.servers.RegisterType<AnimationTest>().InstancePerLifetimeScope();//方式一 ok 常用.});

5.2 调用:

 AnimationTest Test = gIoc.GetServer<AnimationTest>();首先,这服务默认最后注册的SinAnimation,做为服务.Test.PrintInfo();更新服务.Test.SetIAniamtion(gIoc.GetServer<LineAnimation>());Test.PrintInfo();///获取Cosin服务,查看里面是否通过属性注入了Sin服务.var ConsServer = gIoc.GetServer<CosinAnimation>();ConsServer.PrintF("Cos: ");//成功,里面的属性Sin服务,注册成功.

5.3 输出结果:

5.4: 内部的实现原理简单总结为:

因为AutoFac里面的内部实现基本是DIctionary<Type,T>,或者 MultyDictionary<...>,这样的一个集合,所以,我们要保证通过接口注册的,使用接口获取服务,通过实例注册的,通过实例获取服务. 否则容易造成获取不到服务.

AutoFac使用笔记以及操作技巧(保姆级操作)相关推荐

  1. FastText词向量训练、使用及可视化操作【保姆级教程(包含藏文处理方法)】

    目录 一.前言 二.FastText词向量训练 2.1 数据输入格式 2.2词向量训练 三.词向量使用 一.前言 本文是word2vec词向量篇的姊妹篇.fasttext是静态词向量构建方法的一种,本 ...

  2. Word2Vec词向量训练、使用及可视化操作【保姆级教程(包含藏文处理方法)】

    目录 一.前言 二.Word2Vec词向量训练 2.1 数据输入格式 2.2词向量训练 三.词向量使用 四.词向量可视化 一.前言 word2vec是静态词向量构建方法的一种,本文将介绍word2ve ...

  3. Julia 学习笔记(五) | 模块开发 - 保姆级教程

    唠唠闲话 今年参与了 OSPP'22 的 Julia 开源项目,期间学习了 Julia 模块从开发到测试的完整过程.借这个机会,整理这段时间学习到的知识.Julia 在开发提供的工具便捷丰富,且对新人 ...

  4. c盘满了怎么办【保姆级操作】

    1 C盘属性 C盘→右键属性→磁盘清理 特别是把"历史系统"安装之类的删掉 2 C盘中的视频.图片之类的删掉或转移 把每个文件夹打开看一下,不要的就删掉或转移 3 360安全卫士查 ...

  5. 高校疯传!法国TOP双硕算法专家匠心打造一套保姆级AI学习笔记并公开(保姆级/20G高清/PPT/代码)...

    AI 显然是最近几年非常火的一个新技术方向,从几年前大家认识到 AI 的能力,到现在产业里已经在普遍的探讨 AI 如何落地了. 我们可以预言未来在很多的领域,很多的行业,AI 都会在里边起到重要的作用 ...

  6. Ros cartographer 搭载 landmark 保姆级操作上手教程

    前言: 之前跑的bag中偶然发现在msg的bag包中,有Landmark数据的发布和订阅.Landmark在cartographer中作为定位为避免定位丢失,从而使之增加定位精度,和重定位,看完所有网 ...

  7. Linux CentOS 7分配的磁盘空间不足,空间扩展方法,保姆级操作

    前言:在学习java的过程中电脑里面的项目,镜像越来越多之前装系统的时候分配的空间太小导致Linux系统空间不足,应该怎么办呢,lets go 跟着我来将centOS 7扩容吧. 1.关闭虚拟机,在V ...

  8. 3.mysql的中文问题,database级操作,表级操作,数据CRUD,分组操作,时间和日期,字符串相关函数,表的约束

     1 连接MYSQL服务器:mysql–uroot –p123456 查看中文问题 show variables like 'character%'; 2 修改mysql的字符集,退出mysql提 ...

  9. Excel表格操作技巧——查找引用操作(INDEX+MATCH函数)

    查找引用操作 在使用电子表格的时候,我们经常会遇到这样的问题:将某一列的内容复制到另外一列,并且需要按照某种对应关系进行复制. 例如,表格 1 中有姓名和成绩有两列,我们要将成绩复制到表格 2 中,但 ...

最新文章

  1. c语言make编译器,cmake 指定编译器
  2. KVM创建虚拟机(六)
  3. 到底什么是IT服务管理
  4. 工作336:uni-ele-el-table修改宽度问题
  5. 【加法笔记系列】逻辑门、半加器、全加器、波纹进位加法器
  6. 孢子社群:今日推荐人工智能微信群:TensorflowNews.com 9群
  7. 软件测试度量分析,软件测试缺陷度量分析
  8. 我们距离构建一个逼真的虚拟世界还有多远
  9. 2015/10/17偶得
  10. ruoyi数据权限设置
  11. Linux安装软件、python开发环境
  12. 【聆思CSK6视觉AI开发套件试用】AI手势检测识别+编译Helloworld示例
  13. 率土之滨鸿蒙之初,实用主义大菜刀攻略:从赛季初到赛季末
  14. 最全的TV视频应用合集,包含50多款客户端,有丰富直播点播
  15. 知名互联网公司的职级划分与薪资待遇
  16. 简书新版 app 发布会,Right!Write!
  17. 测试用例该包含哪些部分
  18. solidity 数组2
  19. 市场调研-全球与中国在线工作协助软件市场现状及未来发展趋势
  20. matlab griddata nan,请教Matlab的griddata的用法

热门文章

  1. 基于WebGL架构的3D可视化平台—停车场管理系统
  2. Stanford NLP2
  3. 保研经历分享--夏令营(续)
  4. CUG中国地质大学(武汉)现代软件国际会议用例图活动图状态图
  5. Java/JS 日语全半角,平片假名转换
  6. js判断是否微信PC端打开内置浏览器
  7. 薄积薄发的国内BlogNetwork
  8. 编程实现RSA数字签名
  9. Andorid-20k+的面试题
  10. 2009年中国综合布线市场的增长