using System.Configuration; using System.Data; using System.Reflection; using System.Windows; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using NeoSmart.Caching.Sqlite; using Sln.Wcs.Repository; using Sln.Wcs.Serilog; using ZiggyCreatures.Caching.Fusion.Serialization.NewtonsoftJson; using ZiggyCreatures.Caching.Fusion; using Com.Ctrip.Framework.Apollo; using SqlSugar; namespace Sln_Wpf { /// /// Interaction logic for App.xaml /// public partial class App : Application { public static IServiceProvider? ServiceProvider = null; // 应用程序启动时调用 protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); var services = new ServiceCollection(); ConfigureServices(services); ServiceProvider = services.BuildServiceProvider(); ServiceProvider.UseSerilogExtensions(); } public void InitializeServices(IServiceProvider serviceProvider) { ServiceProvider = serviceProvider; // 可以在这里进行其他依赖注入相关的初始化 var sqlSugarClient = ServiceProvider.GetService(); // 其他初始化逻辑... } protected override void OnExit(ExitEventArgs e) { // 释放资源 base.OnExit(e); } private static void ConfigureServices(IServiceCollection services) { var basePath = AppContext.BaseDirectory; ApolloConfigureServices(services, ref basePath, out IConfiguration apolloConfiguration); services.AddSingleton(typeof(SerilogHelper)); services.AddSqlSugarSetup(); services.AddFusionCache() .WithSerializer( new FusionCacheNewtonsoftJsonSerializer() ) .WithDistributedCache(new SqliteCache(new SqliteCacheOptions { CachePath = apolloConfiguration["cachePath"] })); } private static void ApolloConfigureServices(IServiceCollection services, ref string basePath, out IConfiguration apolloConfiguration) { var localConfiguration = new ConfigurationBuilder() .SetBasePath(basePath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); var apolloConfigSection = localConfiguration.GetSection("apollo"); services.AddSingleton(localConfiguration); var configurationBuilder = new ConfigurationBuilder() .SetBasePath(basePath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddApollo(apolloConfigSection) .AddDefault(); apolloConfiguration = configurationBuilder.Build(); services.Remove(new ServiceDescriptor(typeof(IConfiguration), localConfiguration)); services.AddSingleton(apolloConfiguration); } } }