# XplorePlane 服务层

## 概述

本目录包含 XplorePlane 应用程序的服务层实现。服务层负责封装业务逻辑和硬件交互。

## 日志服务

XplorePlane 使用 **XplorePlane.Common.dll** 库中封装的日志功能，无需在本项目中重复实现。

### 使用方式

#### 1. 通过依赖注入使用 Serilog ILogger

```csharp
using Serilog;

public class MyViewModel
{
    private readonly ILogger _logger;
    
    public MyViewModel(ILogger logger)
    {
        _logger = logger;
    }
    
    public void DoSomething()
    {
        _logger.Information("执行某个操作");
        _logger.Warning("警告信息");
        _logger.Error("错误信息");
    }
}
```

#### 2. 使用静态 Log 类

```csharp
using Serilog;

public class MyService
{
    public void DoWork()
    {
        Log.Information("开始工作");
        Log.Debug("调试信息: {Value}", someValue);
        Log.Error(exception, "发生错误");
    }
}
```

#### 3. 为特定模块创建日志器

```csharp
using Serilog;

public class RaySourceService
{
    private readonly ILogger _logger;
    
    public RaySourceService()
    {
        // 为当前类创建带上下文的日志器
        _logger = Log.ForContext<RaySourceService>();
    }
    
    public void Initialize()
    {
        _logger.Information("初始化射线源");
    }
}
```

### 日志配置

日志配置通过 `App.config` 文件进行管理：

```xml
<appSettings>
  <!-- 日志配置 -->
  <add key="Serilog:LogPath" value="logs"/>
  <add key="Serilog:MinimumLevel" value="Information"/>
  <add key="Serilog:EnableConsole" value="true"/>
  <add key="Serilog:RollingInterval" value="Day"/>
  <add key="Serilog:FileSizeLimitMB" value="100"/>
  <add key="Serilog:RetainedFileCountLimit" value="30"/>
</appSettings>
```

### 日志级别

- **Verbose**: 最详细的日志，用于开发调试
- **Debug**: 调试信息
- **Information**: 一般信息（默认）
- **Warning**: 警告信息
- **Error**: 错误信息
- **Fatal**: 致命错误

### 日志输出

日志会输出到以下位置：
- 文件: `logs/xploreplane-{Date}.log`
- 控制台: 开发时可见
- 调试输出: Debug 模式下可见

## 硬件服务

硬件服务将在后续实现，用于封装与硬件库的交互。

### 计划实现的服务

- `IHardwareService`: 硬件服务总接口
- `RaySourceService`: 射线源控制服务
- `DetectorService`: 探测器控制服务
- `PLCService`: PLC 通讯服务

## 依赖库

- **XplorePlane.Common.dll**: 通用基础设施库（包含日志功能）
- **XplorePlane.Hardware.RaySource.dll**: 射线源控制库
- **XplorePlane.Hardware.Detector.dll**: 探测器控制库
- **XplorePlane.Hardware.PLC.dll**: PLC 通讯库

所有 DLL 文件位于 `Libs/Hardware/` 目录下。
