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. 玩转云端|演唱会一票难求?快用天翼云边缘安全加速平台AccessOne!

    本文分享自天翼云开发者社区<玩转云端|演唱会一票难求?快用天翼云边缘安全加速平台AccessOne!>,作者:天翼云社区官方账号 Super Idol的笑容虽然非常甜 无数粉丝宝宝的心里却 ...

  2. Centos7下oracle12c的安装与配置

    一.硬件资源配置(虚拟机) CentOS7@VMware Workstation 10 Pro,分配资源:CPU:2颗,内存:4GB,硬盘空间:20GB+30GB 二.软件环境配置 软件上传 xshe ...

  3. spring的事务管理有几种方式实现

    一.事务的4个特性:   原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做.   一致性:数据不会因为事务的执行而遭到破坏.   隔离性:一个事务的执行,不受其他事务 ...

  4. 同事PPT又拿奖了?偷偷用这AI工具,3步做出老板狂赞的年度报告

    大家好,我是六哥,今天为大家分享一款PPT辅助神器,年底汇报必备神器!就是Napkin AI ! 这是一款超级酷的工具,它能把你写的文字一秒钟转化为各种炫酷的视觉效果,比如图表.流程图.信息图啥的.如 ...

  5. 怎么证明二元函数的极限是多少?& 怎么证明二元函数的极限不存在?

    怎么证明二元函数的极限是多少:https://zhaokaifeng.com/16589/ 怎么证明二元函数的极限不存在:https://zhaokaifeng.com/16600/

  6. Hadoop - [01] 概述

    Hadoop官网:https://hadoop.apache.org/ Hadoop下载:https://archive.apache.org/dist/hadoop/common/ 一.Hadoop ...

  7. Python基础笔记-while、字符串格式化、运算符、基础概念与数据类型

    前言 !!!注意:本系列所写的文章全部是学习笔记,来自于观看视频的笔记记录,防止丢失.观看的视频笔记来自于:哔哩哔哩武沛齐老师的视频:2022 Python的web开发(完整版) 入门全套教程,零基础 ...

  8. DeepSeek 开源周回顾「GitHub 热点速览」

    上周,DeepSeek 发布的开源项目用一个词形容就是:榨干性能!由于篇幅有限,这里仅列出项目名称和简介,感兴趣的同学可以前往 DeepSeek 的开源组织页面,深入探索每个项目的精彩之处! 第一天 ...

  9. AI与.NET系列文章之三:在.NET中使用大语言模型(LLMs)

    引言 在技术迅猛发展的今天,大语言模型(Large Language Models, LLMs)已成为人工智能领域的核心驱动力之一.从智能对话系统到自动化内容生成,LLMs的应用正在深刻改变我们的工作 ...

  10. javascript快速初始化数组

    编写代码中通常会有快速初始化数组的需求,例如我们需要一个类似matlab里的zeros函数,假如这里我们需要生成一个0-23的数组用于表示一天24小时. 最基本的做法如下: function(){ l ...