livia-test/Livia/Utility/DependencyInjection/ServiceProviderFactory.cs
2025-03-28 14:31:53 +08:00

89 lines
3.5 KiB
C#

using System.IO;
using FellowOakDicom;
using FellowOakDicom.Imaging;
using Livia.Models;
using Livia.Models.Data;
using Livia.Properties;
using Livia.ViewModels;
using Livia.Views.Utility;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Events;
using ILogger = Microsoft.Extensions.Logging.ILogger;
namespace Livia.Utility.DependencyInjection;
public static class ServiceProviderFactory
{
public static string LogFolder { get; set; }
public static IServiceProvider ServiceProvider
{
get
{
if (_serviceProvider == null)
throw new NullReferenceException();
return _serviceProvider;
}
}
private static IServiceProvider? _serviceProvider;
static ServiceProviderFactory()
{
LogFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"AnImage\Livia\Log");
}
public static void Init(Action<ServiceCollection> injectionActions)
{
_serviceProvider = ConfigureDependencyInjection(injectionActions);
}
private static IServiceProvider ConfigureDependencyInjection(Action<ServiceCollection> addLiviaControlViewModel)
{
ServiceCollection serviceCollection = [];
new DicomSetupBuilder()
.RegisterServices(s => s.AddFellowOakDicom().AddImageManager<WinFormsImageManager>())
.Build();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Trace()
.WriteTo.File(Path.Combine(LogFolder, "Log.txt"), rollingInterval: RollingInterval.Day)
.WriteTo.File(Path.Combine(LogFolder, "ErrorLog.txt"), LogEventLevel.Error, rollingInterval: RollingInterval.Day)
.CreateLogger();
serviceCollection.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true));
serviceCollection.AddSingleton<ILogger>(svc => svc.GetRequiredService<ILogger<object>>());
serviceCollection.AddSingleton<IIdleTimer, IdleTimer>();
serviceCollection.AddSingleton<IWarningSystem, WarningSystem>();
serviceCollection.AddSingleton<IVersionUpdateManager, VersionUpdateManager>();
serviceCollection.AddSingleton<IPatientInfoManager, PatientInfoManager>();
serviceCollection.AddSingleton<IRoiLegendManager, RoiLegendManager>();
serviceCollection.AddSingleton<IDataBlockLoader, DataBlockLoader>();
serviceCollection.AddSingleton<ISerialKeyManager, SerialKeyManager>();
serviceCollection.AddSingleton<IAesOperation, AesOperation>();
serviceCollection.AddSingleton<IProcessManager, ProcessManager>();
serviceCollection.AddSingleton<IServerHandler, ServerHandler>();
serviceCollection.AddHttpClient<ILiviaHttpClient, LiviaHttpClient>(x =>
{
x.Timeout = TimeSpan.FromMinutes(10);
UriBuilder uriBuilder = new()
{
Scheme = Settings.Default.ServerPort == 443 ? "https" : "http",
Host = Settings.Default.ServerAddress,
Port = Settings.Default.ServerPort
};
x.BaseAddress = uriBuilder.Uri;
});
serviceCollection.AddSingleton<LiviaHttpClientFactory>();
serviceCollection.AddSingleton<MainWindowViewModel>();
addLiviaControlViewModel(serviceCollection);
ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
return serviceProvider;
}
}