using System; using System.Reflection; using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; using Com.Ctrip.Framework.Apollo; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using NeoSmart.Caching.Sqlite; using Sln.Wcs.Repository; using Sln.Wcs.Serilog; using Sln.Wcs.UI.ViewModels; using Sln.Wcs.UI.Views; using ZiggyCreatures.Caching.Fusion; using ZiggyCreatures.Caching.Fusion.Serialization.NewtonsoftJson; namespace Sln.Wcs.UI; public partial class App : Application { public override void Initialize() { AvaloniaXamlLoader.Load(this); } public override void OnFrameworkInitializationCompleted() { if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { // ---- 独立初始化 WCS 后端服务 ---- var services = new ServiceCollection(); // 1. Apollo 配置中心 var basePath = AppContext.BaseDirectory; var localConfig = new ConfigurationBuilder() .SetBasePath(basePath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); services.AddSingleton(localConfig); var apolloConfigSection = localConfig.GetSection("apollo"); var apolloConfig = new ConfigurationBuilder() .SetBasePath(basePath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddApollo(apolloConfigSection) .AddDefault() .Build(); // 替换为 Apollo 增强配置 services.Remove(new ServiceDescriptor(typeof(IConfiguration), localConfig)); services.AddSingleton(apolloConfig); // 2. 加载程序集并扫描注册 DI var assemblies = new[] { Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.Common.dll")), Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.Cache.dll")), Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.Repository.dll")), }; services.Scan(scan => scan.FromAssemblies(assemblies) .AddClasses() .AsImplementedInterfaces() .AsSelf() .WithTransientLifetime()); // 3. 注册日志 services.AddSingleton(typeof(SerilogHelper)); // 4. SqlSugar + FusionCache services.AddSqlSugarSetup(); services.AddFusionCache() .WithSerializer(new FusionCacheNewtonsoftJsonSerializer()) .WithDistributedCache(new SqliteCache(new SqliteCacheOptions { CachePath = apolloConfig["cachePath"]! })); // 5. 注册 ViewModel services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); var serviceProvider = services.BuildServiceProvider(); // ---- 启动后初始化 ---- // 启用 Serilog serviceProvider.UseSerilogExtensions(); var config = serviceProvider.GetRequiredService(); var log = serviceProvider.GetRequiredService(); log.Info($"系统启动成功,日志存放位置:{config["logPath"]}"); // 创建主窗口 desktop.MainWindow = new MainWindow(serviceProvider.GetRequiredService()); } base.OnFrameworkInitializationCompleted(); } }