using log4net; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Runtime.CompilerServices; using System.Threading.Tasks; using System.Windows; namespace NEIntelligentControl2 { /// <summary> /// 新能源智能发电集中控制系统 /// </summary> public partial class App : Application { /// <summary> /// 依赖注入 /// </summary> public static IServiceProvider ServiceProvider { get; set; } private ILog log = LogManager.GetLogger("File"); private void Application_Startup(object sender, StartupEventArgs e) { var serviceCollection = new ServiceCollection(); ConfigureServices(serviceCollection); ServiceProvider = serviceCollection.BuildServiceProvider(); var mainWindow = ServiceProvider.GetRequiredService<MainWindow>(); mainWindow.Show(); } private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { try { e.Handled = true; log.Error("应用程序出现重大错误,但可继续运行!", e.Exception); } catch (Exception ex) { log.Fatal("应用程序出现致命错误,已经结束运行!", e.Exception); } } /// <summary> /// 获取服务 /// </summary> /// <typeparam name="T">类型</typeparam> /// <returns>服务</returns> public static T GetService<T>() { return (T)ServiceProvider.GetService(typeof(T)); } /// <summary> /// 依赖注入 /// </summary> private void ConfigureServices(IServiceCollection services) { services.AddSingleton<Models.Pages.IPageAction, Models.Pages.PageManager>() .AddSingleton<Service.WebSocket.MessageBridge>() .AddSingleton<Models.Messages.WEBHelper>() .AddSingleton<Service.Windturbine.CacheManager>() .AddSingleton<Service.WebSocket.UrlManager>() .AddSingleton<Service.User.UserManager>() .AddSingleton<Service.Voice.VoiceManager>() .AddSingleton<Service.AGC.AGCManager>() .AddSingleton<Service.Alarm.AlarmManager>() .AddSingleton<Service.Windturbine.InfoManager>() .AddSingleton<Service.Windturbine.SuggestionManager>() .AddSingleton<Service.Windturbine.ControlManager>() .AddSingleton<Models.Pages.TagManager>() .AddSingleton<Service.Station.StationManager>() .AddSingleton<MainWindow>() .AddTransient<Windows.ConfirmWindow>() .AddTransient<Windows.WindturbineInfoWindow>() .AddTransient<Windows.UserWindow>() .AddTransient< Pages.User.PageLogin>() .AddTransient< Pages.User.PageUserEdit>() .AddSingleton<Pages.Matrix.PageMatrix>() .AddTransient<Pages.AGC.PageAGC>() .AddSingleton<Pages.Help.PageHelp>() .AddSingleton<Pages.BoostStation.PageBoostStation>() .AddSingleton<Pages.BoostStation.PageBoostStation2>() .AddTransient<Pages.BoostStation.PageStation>() .AddTransient<Pages.BoostStation.PageStation2>() .AddSingleton<Pages.Home.HomePage>() .AddSingleton<Pages.Home.StateTimePage>() .AddSingleton<Pages.Alarm.PageAlarmCenter>() .AddTransient<Pages.Matrix.PageMatrixAll>() .AddTransient<Pages.Home.PageWindturbineAGC>() .AddTransient<Pages.Matrix.PageMatrixStation>() .AddTransient<Windows.ParameterComparisonWindow>() .AddTransient<Windows.Alarm.DeviceDetailAlarmWindow>() .AddTransient<Windows.Alarm.HistoryAlarmWindow>() .AddTransient<Windows.Alarm.HistoryFaultWindow>() .AddTransient<Windows.Alarm.RealTimeAlarmWindow>() .AddTransient<Windows.ControlTrackWindow>() .AddTransient<Windows.RecomendWindow>() .AddTransient<Windows.HistoryDataWindow>() .AddTransient<Windows.PV.InverterInfoWindow>() .AddTransient<Windows.PV.SUN2000InfoWindow>(); } } }