• 《深入浅出.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
  • 相关阅读:
    【英雄哥六月集训】第 30天: 拓扑排序
    kubesphare 学习尚硅谷
    PHP 5 echo 和 print 语句
    【从零开始】Docker Desktop:听说你小子要玩我
    cobol-简介
    C++中调用matplotlibcpp.h画图测试笔记
    MFC中字符串string类型和CString类型互转方法
    计算机网络部分(一)
    阿里、美团、拼多多、网易大厂面试之Redis+多线程+JVM+微服务...
    WEB前端网页设计 HTML CSS 网页设计参数 - 【浏览器背景图片】
  • 原文地址:https://blog.csdn.net/Oneal5354/article/details/133997042