89 lines
3.5 KiB
C#
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;
|
|
}
|
|
} |