AutoFac实现Demo1

1、创建一个工作台(.NET Core)程序AutofacDemo1,nuget引入AutoFac,搜索第一个就是

2、创建输出接口IOutput及实现ConsoleOutput

using System;
using System.Collections.Generic;
using System.Text; namespace AutofacDemo1
{
public interface IOutput
{
void Write(string content);
}
}
using System;
using System.Collections.Generic;
using System.Text; namespace AutofacDemo1
{
public class ConsoleOutput : IOutput
{ public void Write(string content)
{
Console.WriteLine(content);
}
}
}

3、创建一个接口IDateWrite及实现类TodayWriter

using System;
using System.Collections.Generic;
using System.Text; namespace AutofacDemo1
{
public interface IDateWriter
{
void WriteDate();
}
}
using System;
using System.Collections.Generic;
using System.Text; namespace AutofacDemo1
{
public class TodayWriter : IDateWriter
{
public IOutput _output;//将输出接口通过构造方法依赖注入
public TodayWriter(IOutput output)
{
this._output = output;
}
public void WriteDate()
{
this._output.Write(DateTime.Today.ToShortDateString());
}
}
}

4、在Program里做注册,依赖实例解析和创建

推荐从生命周期中解析服务,因为从根容器中解析组件(从根容器解析组件,组件的生命周期会和根容器的生命周期一致,迟迟得不到dispose,造成内存泄漏),有可能会导致内存泄露

using Autofac;
using System; namespace AutofacDemo1
{
class Program
{
//创建一个容器属性,待会儿我们会用到
private static IContainer Container { get; set; }
static void Main(string[] args)
{
Console.WriteLine("Hello Autofac!");
//ContainerBuilder容器创建对象
var builder = new ContainerBuilder();
//做相关的依赖注册
builder.RegisterType<ConsoleOutput>().As<IOutput>();
builder.RegisterType<TodayWriter>().As<IDateWriter>();
//ContainerBuilder的Build()方法可以创建容器
Container = builder.Build(); WriteDate();
}
//生命周期作用域 //生命周期作用域是可释放的并且追踪组件的释放, 因此确保你总是调用了 “Dispose()”" 或者把它们包裹在 “using” 语句
public static void WriteDate()
{
//调用 BeginLifetimeScope() 方法来创建另一个生命周期作用域
using (var scope = Container.BeginLifetimeScope())
{
//用生命周期作用域解析获取IDateWriter对应的依赖对象实例
var writer = scope.Resolve<IDateWriter>();
writer.WriteDate();
}
}
}
}

5、执行过程解读

  1. WriteDate方法创建一个生存周期期作用域,从中可以解析依赖项。它这样做是为了避免任何内存泄漏-如果IDateWriter或其依赖项是一次性的,那么在释放作用域时,它们将自动被释放。
  2. WriteDate方法从生存期范围手动解析IDateWriter。
    • Autofac看到IDateWriter映射到TodayWriter,因此开始创建TodayWriter
    • Autofac发现TodayWriter在其构造函数中需要一个IOutput。(这是“构造函数注入”。)
    • Autofac看到IIOutput映射到ConsoleOutput,因此创建一个新的ConsoleOutput实例。
    • Autofac使用新的ConsoleOutput实例来完成构建TodayWriter。
    • Autofac返回完全构造的TodayWriter供WriteDate使用。
  3. 对writer.WriteDate()的调用转到全新的TodayWriter.WriteDate()
  4. 释放Autofac生命周期作用域。在该生命周期作用域解析的项目也将被释放回收

AutoFac学习Demo1——官网Demo的更多相关文章

  1. Java 银联支付官网demo测试及项目整合代码

    注:原文来源与 < Java 银联支付官网demo测试及项目整合代码  > 银联支付(网关支付B2C) 一.测试官网demo a)下载官网开发包,导入eclipse等待修改(下载的开发包没 ...

  2. jqgrid--api,官网demo,编辑

    api参考: http://blog.csdn.net/hurryjiang/article/details/7551477 官网demo: http://www.trirand.com/blog/j ...

  3. webpack官网demo起步中遇到的问题

    在webpack官网demo一开始搭建中 

  4. SpringBoot使用JSP(官网Demo)

    最开始接触java的时候,前端页面基本都是用jsp来写,最近公司项目要使用SpringBoot重构,查看SpringBoot文档,发现SpringBoot不建议使用JSP,因为jsp在使用内嵌serv ...

  5. 苹果官网 demo The Elements 阅读随笔

    The Elements https://developer.apple.com/library/ios/samplecode/TheElements/Introduction/Intro.html# ...

  6. 学习 altera官网 之 timequest

    1.如果启动沿(launch)和锁存沿(latch)是同一时钟域则,latch比launch晚一个时钟周期. 2.数据到达时间 3.时钟到达时间.如果启动沿(launch edge)和锁存沿(latc ...

  7. pytorch 迁移学习[摘自官网]

    迁移学习包含两种:微调和特征提取器. 微调:对整个网络进行训练,更新所有参数 特征提取器:只对最后的输出层训练,其他层的权重保持不变 当然,二者的共性就是需要加载训练好的权重,比如在ImageNet上 ...

  8. Datatable 导出到execl 官网demo

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...

  9. 学习ceph官网的ceph块设备命令(一)

    一)存储池命令 1.列出存储池 #ceph osd lspools #ceph osd pool ls 2.创建存储池 # ceph osd pool create yhcpool 512 pool ...

  10. knockout——官网demo

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

随机推荐

  1. CBR云备份与恢复管控简介

    本文分享自天翼云开发者社区<CBR云备份与恢复管控简介>,作者:c****n 1.CBR云备份与恢复介绍 CBR (Cloud Backup & Restore)是一般云厂商提供的 ...

  2. 冠军!天翼云在国际AI顶会大模型挑战赛中拔得头筹!

    6月7日,国际人工智能顶会CVPR 2023举办的第一届大模型挑战赛(CVPR 2023 Workshop on Foundation Model:1st foundation model chall ...

  3. THUSC2024 & APIO2024 游记

    第二次联赛以上的比赛. Day-n lxs 突然通知:从五月七日开始要去镇海中学集训(这也意味着 THUSC-APIO 中间出去玩的时间没了 ),很神秘.这是属于高二那一届考的联考连通块,不知道为什么 ...

  4. 【忍者算法】从照片旋转到矩阵变换:探索图像旋转问题|LeetCode 48 旋转图像

    从照片旋转到矩阵变换:探索图像旋转问题 生活中的旋转 在这个自拍时代,我们经常需要调整照片的方向.有时拍出来的照片歪了,需要旋转90度:有时想要换个角度看看效果,来回旋转照片.这种旋转操作不仅存在于我 ...

  5. Linux使用堡垒机

    一.linux系统使用 1. 安装 puttygen sudo apt-get install putty 2. 进入 pem 所在文件执行转换命令 puttygen mykey.pem -o myk ...

  6. flutter-TextField垂直居中

    decoration: InputDecoration( contentPadding: EdgeInsets.symmetric(vertical: 0), // border: InputBord ...

  7. 13. Docker-compose容器编排(详解说明)

    13. Docker-compose容器编排(详解说明) @ 目录 13. Docker-compose容器编排(详解说明) 1. Docker-compose容器编排概述 2. Docker-Com ...

  8. 从“技术宅”到"机器人教父",那个用机器人改变世界的年轻人

    写在前面 随着民营企业座谈会的召开,有一位年轻的企业家王兴兴映入了我们的视野.没错就是那个让机器人从实验室走向舞台中央的年轻人. 大家对今年春晚的机器人扭秧歌应该都还印象深刻吧,它就出自于王兴兴创办的 ...

  9. IDEA - 文件上方的文档注释如何自定义

    1.在设置中打开文件和代码模板,根据描述中的参考信息进行自定义配置 File > Settings > Editor > File and Code Templates 2.配置完成 ...

  10. Archlinux 更新失败之驱动与 Xorg 配置错误

    Archlinux系统更新是滚动更新,所以更新失败又被叫做"滚挂了" 此次滚挂发生在1月27日,过了那么久了才想起来该记录了-- 现象 滚挂的现象是,能够进系统,但是笔记本电脑自带 ...