Files
OrpaonVision/OrpaonVision.SiteApp/DependencyInjection/ServiceCollectionExtensions.cs
2026-04-06 22:08:38 +08:00

88 lines
3.6 KiB
C#

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using OrpaonVision.Core.Security;
using OrpaonVision.SiteApp.Runtime.Contracts;
using OrpaonVision.SiteApp.Runtime.Options;
using OrpaonVision.SiteApp.Runtime.Services;
using OrpaonVision.SiteApp.ViewModels;
using OrpaonVision.ConfigApp.Infrastructure.Services;
namespace OrpaonVision.SiteApp.DependencyInjection
{
/// <summary>
/// SiteApp 服务注册扩展。
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// 注册运行端 MVP 相关服务。
/// </summary>
public static IServiceCollection AddSiteAppServices(this IServiceCollection services, IConfiguration configuration)
{
var runtimeOptions = new RuntimeOptions();
configuration.GetSection("Runtime").Bind(runtimeOptions);
services.AddSingleton(runtimeOptions);
// 配置海康相机选项
var hikCameraOptions = new HikCameraOptions();
configuration.GetSection("HikCamera").Bind(hikCameraOptions);
services.AddSingleton(Options.Create(hikCameraOptions));
// 配置YOLO推理选项
var yoloOptions = new YoloInferenceOptions();
configuration.GetSection("YoloInference").Bind(yoloOptions);
services.AddSingleton(Options.Create(yoloOptions));
// 注册运行时服务工厂
services.AddSingleton<RuntimeServiceFactory>();
// 注册真实和模拟海康相机服务
services.AddSingleton<RealHikCameraService>();
services.AddSingleton<MockHikCameraService>();
// 注册真实和模拟YOLO推理服务
services.AddSingleton<RealYoloInferenceService>();
services.AddSingleton<MockYoloInferenceService>();
// 使用工厂模式注册主要服务
services.AddSingleton<IHikCameraService>(provider =>
provider.GetRequiredService<RuntimeServiceFactory>().CreateHikCameraService());
services.AddSingleton<IYoloInferenceService>(provider =>
provider.GetRequiredService<RuntimeServiceFactory>().CreateYoloInferenceService());
// 使用海康相机适配器替换Mock实现
services.AddSingleton<ICameraService, HikCameraAdapter>();
// 使用YOLO推理适配器替换Mock实现
services.AddSingleton<IInferenceService, YoloInferenceAdapter>();
services.AddSingleton<IRuleEngineService, AdvancedRuleEngineService>();
services.AddSingleton<IRuntimeStateMachineService, AdvancedRuntimeStateMachineService>();
services.AddSingleton<MainWindowViewModel>();
// 机种权限和切换管理服务
services.AddSingleton<IProductPermissionService, ProductPermissionService>();
services.AddSingleton<IProductSwitchManagerService, ProductSwitchManagerService>();
// 图像处理服务
services.AddSingleton<IImageProcessingService, ImageProcessingService>();
services.AddSingleton<OptimizedMainWindowViewModel>();
// 一致性检查服务
services.AddSingleton<IConsistencyCheckService, ConsistencyCheckService>();
// 日志
services.AddLogging(builder =>
{
builder.AddConsole();
builder.AddDebug();
});
return services;
}
}
}