Files
DMS/DMS.WPF.UnitTests/ViewModelTest/BaseServiceTest.cs

73 lines
2.8 KiB
C#
Raw Normal View History

// DMS.Infrastructure.UnitTests/Services/BaseServiceTest.cs
using AutoMapper;
using AutoMapper.Internal;
using DMS.Application.Configurations;
2025-09-16 12:29:09 +08:00
using DMS.Application.Interfaces.Database;
using DMS.Application.Services.Database;
using DMS.Core.Interfaces;
using DMS.Core.Interfaces.Repositories;
using DMS.Infrastructure.Data;
using DMS.Infrastructure.Repositories;
2025-09-03 18:22:01 +08:00
using DMS.WPF.Interfaces;
using DMS.WPF.Services;
using DMS.WPF.ViewModels;
using Microsoft.Extensions.DependencyInjection;
namespace DMS.WPF.UnitTests.ViewModelTest;
public class BaseServiceTest
{
// ServiceProvider 将是所有测试的服务容器
protected readonly IServiceProvider ServiceProvider;
public BaseServiceTest()
{
var services = new ServiceCollection();
// --- 核心配置 ---
services.AddAutoMapper(cfg =>
{
// 最终解决方案根据异常信息的建议设置此标记以忽略重复的Profile加载。
// 注意:此属性位于 Internal() 方法下。
cfg.Internal().AllowAdditiveTypeMapCreation = true;
cfg.AddProfile(new DMS.Application.Profiles.MappingProfile());
cfg.AddProfile(new DMS.Infrastructure.Profiles.MappingProfile());
cfg.AddProfile(new DMS.WPF.Profiles.MappingProfile());
});
// 2. 配置数据库上下文 (在测试中通常使用单例)
services.AddSingleton<SqlSugarDbContext>();
// --- 注册服务和仓储 ---
// 使用 Transient 或 Scoped 取决于服务的生命周期需求对于测试Transient 通常更安全。
// 注册仓储管理器
services.AddTransient<IRepositoryManager, RepositoryManager>();
services.AddTransient<IInitializeRepository, InitializeRepository>();
// 注册应用服务
services.AddTransient<IDeviceAppService, DeviceAppService>();
services.AddTransient<IVariableTableAppService, VariableTableAppService>();
services.AddTransient<IVariableAppService, VariableAppService>();
2025-10-06 17:03:06 +08:00
// services.AddTransient<IMenuAppService, MenuAppService>();
services.AddTransient<INavigationService, NavigationService>();
services.AddTransient<DevicesViewModel>();
// services.AddTransient<DataServices>();
services.AddTransient<IDialogService, DialogService>();
// services.AddTransient<IVariableAppService, VariableAppService>(); // 如果需要测试
// VariableService取消此行注释
// ... 在这里注册所有其他的应用服务 ...
// --- 构建服务提供程序 ---
ServiceProvider = services.BuildServiceProvider();
// 验证 AutoMapper 配置 (可选,但强烈推荐)
var mapper = ServiceProvider.GetService<IMapper>();
mapper?.ConfigurationProvider.AssertConfigurationIsValid();
}
}