AutoFac学习Demo1——官网Demo
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、执行过程解读
- WriteDate方法创建一个生存周期期作用域,从中可以解析依赖项。它这样做是为了避免任何内存泄漏-如果IDateWriter或其依赖项是一次性的,那么在释放作用域时,它们将自动被释放。
- WriteDate方法从生存期范围手动解析IDateWriter。
- Autofac看到IDateWriter映射到TodayWriter,因此开始创建TodayWriter
- Autofac发现TodayWriter在其构造函数中需要一个IOutput。(这是“构造函数注入”。)
- Autofac看到IIOutput映射到ConsoleOutput,因此创建一个新的ConsoleOutput实例。
- Autofac使用新的ConsoleOutput实例来完成构建TodayWriter。
- Autofac返回完全构造的TodayWriter供WriteDate使用。
- 对writer.WriteDate()的调用转到全新的TodayWriter.WriteDate()
- 释放Autofac生命周期作用域。在该生命周期作用域解析的项目也将被释放回收
AutoFac学习Demo1——官网Demo的更多相关文章
- Java 银联支付官网demo测试及项目整合代码
注:原文来源与 < Java 银联支付官网demo测试及项目整合代码 > 银联支付(网关支付B2C) 一.测试官网demo a)下载官网开发包,导入eclipse等待修改(下载的开发包没 ...
- jqgrid--api,官网demo,编辑
api参考: http://blog.csdn.net/hurryjiang/article/details/7551477 官网demo: http://www.trirand.com/blog/j ...
- webpack官网demo起步中遇到的问题
在webpack官网demo一开始搭建中
- SpringBoot使用JSP(官网Demo)
最开始接触java的时候,前端页面基本都是用jsp来写,最近公司项目要使用SpringBoot重构,查看SpringBoot文档,发现SpringBoot不建议使用JSP,因为jsp在使用内嵌serv ...
- 苹果官网 demo The Elements 阅读随笔
The Elements https://developer.apple.com/library/ios/samplecode/TheElements/Introduction/Intro.html# ...
- 学习 altera官网 之 timequest
1.如果启动沿(launch)和锁存沿(latch)是同一时钟域则,latch比launch晚一个时钟周期. 2.数据到达时间 3.时钟到达时间.如果启动沿(launch edge)和锁存沿(latc ...
- pytorch 迁移学习[摘自官网]
迁移学习包含两种:微调和特征提取器. 微调:对整个网络进行训练,更新所有参数 特征提取器:只对最后的输出层训练,其他层的权重保持不变 当然,二者的共性就是需要加载训练好的权重,比如在ImageNet上 ...
- Datatable 导出到execl 官网demo
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...
- 学习ceph官网的ceph块设备命令(一)
一)存储池命令 1.列出存储池 #ceph osd lspools #ceph osd pool ls 2.创建存储池 # ceph osd pool create yhcpool 512 pool ...
- knockout——官网demo
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
随机推荐
- 玩转云端|演唱会一票难求?快用天翼云边缘安全加速平台AccessOne!
本文分享自天翼云开发者社区<玩转云端|演唱会一票难求?快用天翼云边缘安全加速平台AccessOne!>,作者:天翼云社区官方账号 Super Idol的笑容虽然非常甜 无数粉丝宝宝的心里却 ...
- Centos7下oracle12c的安装与配置
一.硬件资源配置(虚拟机) CentOS7@VMware Workstation 10 Pro,分配资源:CPU:2颗,内存:4GB,硬盘空间:20GB+30GB 二.软件环境配置 软件上传 xshe ...
- spring的事务管理有几种方式实现
一.事务的4个特性: 原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做. 一致性:数据不会因为事务的执行而遭到破坏. 隔离性:一个事务的执行,不受其他事务 ...
- 同事PPT又拿奖了?偷偷用这AI工具,3步做出老板狂赞的年度报告
大家好,我是六哥,今天为大家分享一款PPT辅助神器,年底汇报必备神器!就是Napkin AI ! 这是一款超级酷的工具,它能把你写的文字一秒钟转化为各种炫酷的视觉效果,比如图表.流程图.信息图啥的.如 ...
- 怎么证明二元函数的极限是多少?& 怎么证明二元函数的极限不存在?
怎么证明二元函数的极限是多少:https://zhaokaifeng.com/16589/ 怎么证明二元函数的极限不存在:https://zhaokaifeng.com/16600/
- Hadoop - [01] 概述
Hadoop官网:https://hadoop.apache.org/ Hadoop下载:https://archive.apache.org/dist/hadoop/common/ 一.Hadoop ...
- Python基础笔记-while、字符串格式化、运算符、基础概念与数据类型
前言 !!!注意:本系列所写的文章全部是学习笔记,来自于观看视频的笔记记录,防止丢失.观看的视频笔记来自于:哔哩哔哩武沛齐老师的视频:2022 Python的web开发(完整版) 入门全套教程,零基础 ...
- DeepSeek 开源周回顾「GitHub 热点速览」
上周,DeepSeek 发布的开源项目用一个词形容就是:榨干性能!由于篇幅有限,这里仅列出项目名称和简介,感兴趣的同学可以前往 DeepSeek 的开源组织页面,深入探索每个项目的精彩之处! 第一天 ...
- AI与.NET系列文章之三:在.NET中使用大语言模型(LLMs)
引言 在技术迅猛发展的今天,大语言模型(Large Language Models, LLMs)已成为人工智能领域的核心驱动力之一.从智能对话系统到自动化内容生成,LLMs的应用正在深刻改变我们的工作 ...
- javascript快速初始化数组
编写代码中通常会有快速初始化数组的需求,例如我们需要一个类似matlab里的zeros函数,假如这里我们需要生成一个0-23的数组用于表示一天24小时. 最基本的做法如下: function(){ l ...