.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();