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

92 lines
4.4 KiB
C#

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using OrpaonVision.ConfigApp.Annotation.Options;
using OrpaonVision.ConfigApp.Annotation.Services;
using OrpaonVision.ConfigApp.Configuration.Services;
using OrpaonVision.ConfigApp.Infrastructure.Diagnostics;
using OrpaonVision.ConfigApp.Infrastructure.Logging;
using OrpaonVision.ConfigApp.Infrastructure.Persistence;
using OrpaonVision.ConfigApp.Infrastructure.Persistence.Options;
using OrpaonVision.ConfigApp.Infrastructure.Services;
using OrpaonVision.ConfigApp.Infrastructure.Options;
using OrpaonVision.ConfigApp.ViewModels;
using OrpaonVision.Core.Abstractions;
using OrpaonVision.Core.Annotation;
using OrpaonVision.Core.Configuration;
using OrpaonVision.Core.Production;
using OrpaonVision.Core.Security;
using OrpaonVision.Core.Training;
namespace OrpaonVision.ConfigApp.DependencyInjection;
/// <summary>
/// ConfigApp 服务注册扩展。
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// 注册 ConfigApp 应用服务。
/// </summary>
/// <param name="services">服务集合。</param>
/// <returns>服务集合。</returns>
public static IServiceCollection AddConfigAppServices(this IServiceCollection services, IConfiguration configuration)
{
var cvatOptions = new CvatOptions();
configuration.GetSection("Cvat").Bind(cvatOptions);
var persistenceOptions = new PersistenceOptions();
configuration.GetSection("Persistence").Bind(persistenceOptions);
var sessionPersistenceOptions = new SessionPersistenceOptions();
configuration.GetSection("SessionPersistence").Bind(sessionPersistenceOptions);
var modelPackageOptions = new ModelPackageOptions();
configuration.GetSection("ModelPackage").Bind(modelPackageOptions);
var runtimeDeploymentSnapshotOptions = new RuntimeDeploymentSnapshotOptions();
configuration.GetSection("RuntimeDeploymentSnapshot").Bind(runtimeDeploymentSnapshotOptions);
services.AddSingleton(cvatOptions);
services.AddSingleton(persistenceOptions);
services.AddSingleton(sessionPersistenceOptions);
services.AddSingleton(modelPackageOptions);
services.AddSingleton(runtimeDeploymentSnapshotOptions);
services.AddSingleton<IAnnotationSyncAppService, CvatAnnotationSyncAppService>();
services.AddSingleton<IRuleConfigurationAppService, RuleConfigurationAppService>();
services.AddSingleton<IAnnotationTaskStore, AnnotationTaskStore>();
services.AddSingleton<IRuleConfigurationStore, RuleConfigurationStore>();
services.AddSingleton<IDataStoreInitializer, SqlServerDataStoreInitializer>();
services.AddSingleton<IAppLogger, FileAppLogger>();
services.AddSingleton<GlobalExceptionHandler>();
// 训练任务管理服务
services.AddSingleton<ITrainingTaskService, TrainingTaskService>();
// 模型包管理服务
services.AddSingleton<OrpaonVision.Core.Training.IModelPackageAppService, OrpaonVision.ConfigApp.Infrastructure.Services.ModelPackageAppService>();
// 运行时部署快照管理服务
services.AddSingleton<OrpaonVision.Core.Training.IRuntimeDeploymentSnapshotAppService, OrpaonVision.ConfigApp.Infrastructure.Services.RuntimeDeploymentSnapshotAppService>();
// 用户权限管理服务
services.AddSingleton<IUserService, UserService>();
services.AddSingleton<IRoleService, RoleService>();
services.AddSingleton<IPermissionService, PermissionService>();
services.AddSingleton<IUserRoleService, UserRoleService>();
services.AddSingleton<IRolePermissionService, RolePermissionService>();
services.AddSingleton<IAuthorizationService, AuthorizationService>();
services.AddSingleton<CurrentUserContext>();
// 产品会话服务
services.AddSingleton<IProductionSessionService, OrpaonVision.Core.Services.ProductionSessionService>();
services.AddSingleton<IProductionSessionManagerService, ProductionSessionManagerService>();
services.AddSingleton<IProductionSessionRepository, SqlProductionSessionRepository>();
// ViewModel
services.AddSingleton<MainWindowViewModel>();
services.AddSingleton<TrainingTaskManagementViewModel>();
services.AddSingleton<ProductionSessionManagementViewModel>();
return services;
}
}