• 《深入浅出.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 ....
    
    • 1

    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();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

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

    依赖注入的生命周期

    Singleton

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

    Scoped

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

    Transient

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

    依赖注入

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

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

    实现批量服务注册

    • 创建一个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();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    (免费分享)java基于SSM的进销存管理系统设计与实现
    Linux: command: cpio
    使用脚本定时备份MySql数据库文件
    go实战学习——context包学习理解笔记
    基于springboot实现数据资产管理系统 项目【项目源码+论文说明】
    Linux之(5)账户和shell基础知识
    Java项目:39 springboot007大学生租房平台的设计与实现
    finally执行语句的注意和小陷阱
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    练习-Java输入输出之字符缓冲IO流之移除文件中的注释
  • 原文地址:https://blog.csdn.net/Oneal5354/article/details/133997042