当前位置: 首页 > news >正文

《深入浅出.NET框架设计与实现》阅读笔记(一)

.NET CLI概述

命令说明
dotnet add将包或引用添加到.NET项目中
dotnet build构建.NET项目,并编译为IL二进制文件
dotnet clean清理.NET项目的构建输出
dotnet help显示命令行帮助
dotnet list罗列项目中的yinyong
dotnet publish发布项目,用于部署
dotnet sln修改解决方案文件

Service Create(sc)

用于服务管理的命令行工具,可以用于添加新服务,也可以用于查询、修改、启动、停止和删除现有服务。命令行中使用如下:

sc.exe create ....

WebAPI托管为Windows服务

需要修改WebAPI项目的program.cs文件,创建一个WebApplicationOptions对象,并且将ContentRootPath属性设置为AppContext.BaseDirectory.

WebApplicationOptions opt = new ()
{ContentRootPath=AppContext.BaseDirectory,Args = args
};
var builder = WebApplication.CreateBuilder(opt);
builder.Host.UseWindowsService();

项目发布后,在Windows服务器上使用sc命令行工具创建Windows服务,服务的名字为WebAPIService

sc.exe create WebAPIService binpath=发布的文件夹地址

依赖注入的生命周期

Singleton

单例生命周期,在整个程序运行周期内,只会创建一次对象。

Scoped

作用域生命周期,在每个Http请求期间创建一次对象。

Transient

瞬时生命周期,每次接口的调用都会创建一个新的对象。

依赖注入

通过WebAppliactionBuilder对象的Services去注册服务

builder.Services.AddTransient<Ixxx,xxx>();

实现批量服务注册

  • 创建一个ServiceCollection对象
  • 通过Assembly对象的Load扩展方法加载指定的程序集
  • 通过string.EndWith方法来匹配接口和方法
  • 使用AddSingleton方法注册服务
  • 调用BuildServiceProvider方法获取ServiceProvider依赖注入容器对象
var services = new ServiceCollection();
var assembly = Assembly.Load("想要指定的程序集名字");
List<Type> typeList = assembly.GetTypes().where(t=> !t.IsInterface && !t.IsAbstract && t.Name.EndsWith("自己想要自动录入的名字后缀").ToList();
var dic = new Dictionary<Type,Type[]>();
foreach(var type in typeList)
{var interfaces = type.GetInterfaces();dic.Add(type,interfaces );
}
if(dic.Keys.Count > 0)
{foreach(var instanceType in dic.Keys){foreach(var interfaceType in dic[instanceType ]){services.AddSingleton(interfaceType ,instanceType );}}
}
services.BuildServiceProvider();

相关文章:

《深入浅出.NET框架设计与实现》阅读笔记(一)

.NET CLI概述 命令说明dotnet add将包或引用添加到.NET项目中dotnet build构建.NET项目&#xff0c;并编译为IL二进制文件dotnet clean清理.NET项目的构建输出dotnet help显示命令行帮助dotnet list罗列项目中的yinyongdotnet publish发布项目&#xff0c;用于部署dotnet sln修…...

Flutter 类似onResume 监听,解决入场动画卡顿(2)

接着完善上一篇内容&#xff0c;上一篇我们是能监听到初次进入路由页面节点&#xff0c;往往还想监听从当前路由跳转到其他路由后&#xff0c;再返回到当前路由页面&#xff0c;上一篇内容就无法满足当前需求了&#xff0c;不过我们完全可以按照上一篇的原理实现这个需求。 直…...

rabbitmq-3.8.15集群、集群镜像模式安装部署

目录 一、环境 1、映射、域名、三墙 2、Erlang和socat安装&#xff08;三台服务器都实行&#xff09; 二、部署三台rabbitmq-3.8.15实例 1、rabbitmq官网下载地址 &#xff1a; 2、解压rabbitmq 3、添加系统变量 4、启动web插件、启动rabbitmq 5、在rabbitmq1上添加用…...

import导入顺序杂乱的问题

我们经常会遇到项目中的import语句顺序混乱的问题。这不仅会影响代码的可读性&#xff0c;还可能使我们代码在提交的时候产生不必要的冲突。 解决方案 eslint-plugin-import 开始我调研了一下eslint-plugin-import插件。这款插件的排序逻辑是这样&#xff1a; builtin: 这代…...

Hadoop3教程(二十六):(生产调优篇)NameNode核心参数配置与回收站的启用

文章目录 &#xff08;143&#xff09;NameNode内存配置&#xff08;144&#xff09;NN心跳并发配置&#xff08;145&#xff09;开启回收站参考文献 &#xff08;143&#xff09;NameNode内存配置 每个文件块&#xff08;的元数据等&#xff09;在内存中大概 占用150byte&…...

PaddleX场景实战:PP-TS在电压预测场景上的应用

时间序列是按照时间发生的先后顺序进行排列的数据点序列&#xff0c;简称时序。时间序列预测即运用历史的多维数据进行统计分析&#xff0c;推测出事物未来的发展趋势。时间序列预测是最常见的时序问题之一&#xff0c;在很多行业都有其应用&#xff0c;且通常时序预测效果对业…...

pdf误删恢复如何恢复?分享4种恢复方法!

如何将pdf误删恢复&#xff1f;使用电脑的时候&#xff0c;经常会需要使用到pdf文件&#xff0c;但是有时候&#xff0c;因为一些操作上的失误&#xff0c;我们会丢失一些重要的文件。如果你不小心将pdf误删了&#xff0c;该如何进行恢复呢&#xff1f; PDF文件丢失的原因可以…...

简析新能源汽车充电桩设计与应用

叶根胜 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;本文针对新能源汽车充电桩建设工作进行探究&#xff0c;采用案例分析法、文献查阅法&#xff0c;指出了新能源汽车充电桩建设存在的问题&#xff0c;阐述了充电桩建设与优化的对策。研究表明&#xff1a;目前…...

Java零基础入门-算术运算符

本文旨在帮助零基础的读者快速了解Java中的算术运算符&#xff0c;包括基本的加减乘除运算符、取余运算符、自增自减运算符等常见的数学运算符。 在学习本文前&#xff0c;需要先掌握基本的Java语法&#xff0c;包括数据类型、变量、赋值语句等。 前言 在编写Java程序时&…...

java实现hbase数据导出

1. HBase-client方式实现 1.1 依赖 <!--HBase依赖坐标--><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>1.2.6</version></dependency><dependency><group…...

Unity之ShaderGraph如何实现旋涡效果

前言 今天我们来通过ShaderGraph来实现一个旋涡的效果 如下图所示&#xff1a; 主要节点 Distance&#xff1a;返回输入 A 和输入 B 的值之间的欧几里德距离。除了其他方面的用途&#xff0c;这对于计算空间中两点之间的距离很有用&#xff0c;通常用于计算有符号距离函数 (…...

【分布式】: 幂等性和实现方式

【分布式】: 幂等性和实现方式 幂等&#xff08;idempotent、idempotence&#xff09;是一个数学与计算机学概念&#xff0c; 常见于抽象代数中。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数&#xff0c;或幂等方法&#xff0c;是…...

idea 设置serlvet 类模板(快捷生成servlet类)

我的版本是idea2020.3.4&#xff0c;博客中有相应安装教程&#xff0c;其他版本设置类似&#xff1a; 1.选择文件-->设置 2.选择编辑器-->文件和代码模板-->其他 3.选择Web-->Servlet Annotated Class.java-->复制相应模板&#xff0c;下面顺便设置了注释模板 …...

SpringBoot自动配置原理解析 | 京东物流技术团队

1: 什么是SpringBoot自动配置 首先介绍一下什么是SpringBoot&#xff0c;SpringBoost是基于Spring框架开发出来的功能更强大的Java程序开发框架&#xff0c;其最主要的特点是&#xff1a;能使程序开发者快速搭建一套开发环境。SpringBoot能将主流的开发框架&#xff08;例如Sp…...

AOP 笔记

AOP【面向切面编程】 作用&#xff1a;在不惊动原始设计的基础上进行功能增强。 无侵入式编程 连接点&#xff1a;程序执行的任意位置&#xff0c;SpringAOP中&#xff0c;理解为方法的执行。 切入点&#xff1a;匹配连接点的式子,要追加功能的方法 通知&#xff08;写在通…...

微信小程序导航退回及跳转 传参(navigateBack,navigateTo)

一、uniapp navigateBack 退回上一级 当前页面-传递参数 uni.$emit(update, params)uni.navigateBack({delta: 1});退回的页面-接收参数 可以写在 onLoad 和 onShow 里面 onLoad(o) {uni.$on(update, function(e) {//参数e}}onShow() {}返回前两级 uni.navigateBack({delta: 2}…...

python实例代码介绍python基础知识

TODO: 知识点仍有待整理 import 使用 import 关键字可以让你选择性地导入所需的模块&#xff0c;而不必导入整个模块库。这样可以减少内存占用和加载时间&#xff0c;尤其是当你只需要使用模块中的某些功能时。 同时&#xff0c;使用 import 可以提高代码的可读性和可维护性&…...

【每日一题】掷骰子等于目标和的方法数

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;动态规划 写在最后 Tag 【动态规划】【数组】 题目来源 1155. 掷骰子等于目标和的方法数 题目解读 你手里有 n 个一样的骰子&#xff0c;每个骰子都有 k 个面&#xff0c;分别标号 1 到 n。给定三个整数 n&#xff0…...

霸王条款惹品牌争议,京东双11站在商家对立面?

作者 | 江北 来源 | 洞见新研社 双11活动第一天&#xff0c;京东就站上了风口浪尖。 与烘焙烤箱品牌海氏的话题接连登上微博热搜&#xff0c;海氏控诉京东滥用市场竞争地位&#xff0c;破坏市场竞争秩序。在海氏的声明中&#xff0c;京东的行为让吃瓜群众大开眼界&#xff1a…...

深度神经网络为何成功?其中的过程、思想和关键主张选择

LeNet&#xff08;1989&#xff09;在小数据集上取得了很好的效果&#xff0c;但是在更大、更真实地数据集上训练卷积神经网络地性能和可行性还有待研究。 与神经网络竞争的是传统机器学习方法&#xff0c;比如SVM&#xff08;支持向量机&#xff09;。这个阶段性能比神经网络方…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...