1. App 静态类
📝 模块更新日志
-
新特性
-
App.CompileCSharpClassCode(code)
动态编译类定义代码 4.8.8.7 ⏱️2023.04.30 fe1e8a1 -
App.GetServices(type)
和App.GetServices<T>()
获取服务实例集合 4.8.7.33 ⏱️2023.04.03 c3e9957 -
App.GetServiceLifetime(type)
获取服务注册生命周期类型 4.8.5.3 ⏱️2023.01.31 4a573a8 -
App.GetThreadId()
和App.GetTraceId()
获取线程Id
和请求TraceId
4.8.2.4 ⏱️2022.11.29 910fc1f -
App.GetExecutionTime(() => { /*Your Code*/ })
获取代码执行耗时 4.8.2.4 ⏱️2022.11.29 5ab4b19
-
-
问题修复
-
App.CompileCSharpClassCode(code)
运行时添加匿名程序集编译异常问题 4.8.8.8 ⏱️2023.05.04 322ea59
-
1.1 获取全局配置
var settings = App.Settings;
1.2 获取配置对象
// 获取 IConfiguration 对象
var configuration = App.Configuration;
var value = configuration["xxx:xxx"];
// 获取指定节点值并转成 T 类型
var data = App.GetConfig<TConfig>("key:key2");
// 重载/刷新配置
App.Configuration.Reload();
1.3 获取环境对象
var webHostEnvironment = App.HostEnvironment;
1.4 获取项目所有程序集
var assemblies = App.Assemblies;
1.5 获取项目所有有效类型
var types = App.EffectiveTypes;
1.6 获取 HttpContext
var httpContext = App.HttpContext;
1.7 获取登录的 User
对象
var contextUser = App.User;
// 获取 `Jwt` 存储的信息
var userId = App.User?.FindFirstValue("键");
注意引入 System.Security.Claims
命名空间
1.8 获取服务提供器
var serviceProvider = App.ServiceProvider;
// 获取根服务,通常用来解析单例,可优化性能
var rootService = App.RootServices;
1.9 解析服务
var service = App.GetService<TService>([IServiceProvider]);
var service2 = App.GetService(typeof(TService), [IServiceProvider]);
var service3 = App.GetRequiredService<TService>([IServiceProvider]);
var service4 = App.GetRequiredService(typeof(TService), [IServiceProvider]);
// Furion 4.8.7.33+ 支持
var services = App.GetServices<TService>([IServiceProvider]);
var services = App.GetServices(typeof(TService), [IServiceProvider]);
1.10 获取选项配置
var options = App.GetOptions<TOptions>([IServiceProvider]);
var options2 = App.GetOptionsMonitor<TOptions>([IServiceProvider]);
var options3 = App.GetOptionsSnapshot<TOptions>([IServiceProvider]);
1.11 打印数据到 MiniProfiler
App.PrintToMiniProfiler("分类", "状态", "要打印的消息");
1.12 获取应用名称
var applicationName = App.HostEnvironment.ApplicationName;
1.13 获取启动项目根目录
var webRootPath = App.HostEnvironment.ContentRootPath;
1.14 获取网站根目录 wwwroot
目录
var wwwroot = App.WebHostEnvironment.WebRootPath;
注意:可能个别操作系统获取值为 null
。
1.15 获取启动项目所在程序集
var webAssembly = Assembly.GetEntryAssembly();
1.16 获取启动项目 bin
目录
var binPath = AppContext.BaseDirectory;
1.17 获取环境变量名
var environmentName = App.HostEnvironment.EnvironmentName;
1.18 判断系统环境
// 判断是否开发环境
var isDevelopment = App.HostEnvironment.IsDevelopment();
// 判断是否生产环境
var isProduction = App.HostEnvironment.IsProduction();
// 判断是否 Stage 环境
var isStaging = App.HostEnvironment.IsStaging();
// 判断是否是特定环境,比如自定义测试环境
var isTest = App.HostEnvironment.IsEnvironment("TestEnvironment");
注意,需引用 Microsoft.Extensions.Hosting
命名空间
1.19 获取服务器信息
// 获取系统架构
var osArchitecture = RuntimeInformation.OSArchitecture; // => X64
// 获取系统名称
var osDescription = RuntimeInformation.OSDescription; // => Windows 10 企业版
// 获取进程架构
var processArchitecture = RuntimeInformation.ProcessArchitecture; // => X64
// 是否是64位操作系统
var is64BitOperatingSystem = Environment.Is64BitOperatingSystem; // => True
1.20 获取框架底层所有未托管对象
var objs = App.UnmanagedObjects;
1.21 手动释放非托管对象
App.DisposeUnmanagedObjects(); // 通常在非 `Web` 环境中手动处理释放时机
1.22 判断是否是单文件环境
版本说明
以下内容仅限 Furion 3.6.8 +
版本使用。
bool isSingleFileEnviroment = App.SingleFileEnvironment;
1.23 解析命令行参数
版本说明
以下内容仅限 Furion 4.4.5 +
版本使用。
var cmdConfig = App.GetCommandLineConfiguration(args);
cmdConfig.TryGet("参数", out var value);
1.24 获取当前线程 Id
版本说明
以下内容仅限 Furion 4.8.2.4 +
版本使用。
var threadId = App.GetThreadId();
1.25 获取当前请求 TraceId
版本说明
以下内容仅限 Furion 4.8.2.4 +
版本使用。
var traceId = App.GetTraceId();
1.26 获取代码执行耗时
版本说明
以下内容仅限 Furion 4.8.2.4 +
版本使用。
var elapsedMilliseconds = App.GetExecutionTime(() =>
{
Console.WriteLine("Hello, Furion");
});
1.27 获取服务注册生命周期类型
版本说明
以下内容仅限 Furion 4.8.5.3 +
版本使用。
var lifetime = App.GetServiceLifetime(typeof(IConfiguration)); // => ServiceLifetime.Singleton
var license = App.GetServiceLifetime(typeof(IRepository<Person>)); // => ServiceLifetime.Scoped
1.28 动态编译类定义代码
版本说明
以下内容仅限 Furion 4.8.8.7 +
版本使用。
var jobAssembly = App.CompileCSharpClassCode(@"
using Furion.Schedule;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace YourProject;
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}
public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation($""我是 Roslyn 方式创建的:{context}"");
await Task.CompletedTask;
}
}
");
// 生成运行时 MyJob 类型
var jobType = jobAssembly.GetType("YourProject.MyJob");
- 支持返回
MemoryStream
对象
// 返回内存
var memoryStream = App.CompileCSharpClassCodeToStream("C# 类定义代码");
// 转换成程序集
var assembly = Assembly.Load(memoryStream.ToArray());
- 支持保存为
dll
文件
// 保存为 .dll 文件并返回程序集
var assembly = App.CompileCSharpClassCodeToDllFile("C# 类定义代码");