时间抽象实现

This commit is contained in:
hello 2025-03-15 19:30:52 +08:00
parent 8229d66969
commit 3c8a1e3727

View File

@ -1,3 +1,57 @@
# 在零度框架中使用 TimeProvider 服务 # 使用 TimeProvider 服务
## jie System.TimeProvider 是一种时间抽象,它以 DateTimeOffset 类型的形式提供时间点。 通过使用 TimeProvider可确保代码可测试且可预测。 TimeProvider 已在 .NET 8 中引入。
## 默认实现
默认情况下TimeProvider 使用 DateTimeOffset.UtcNow 作为时间源。
```csharp
Console.WriteLine($"Local: {TimeProvider.System.GetLocalNow()}");
Console.WriteLine($"Utc: {TimeProvider.System.GetUtcNow()}");
```
## 自定义实现
```csharp
public class CustomTimeProvider: TimeProvider
{
public override DateTimeOffset GetUtcNow() => DateTimeOffset.UtcNow.AddHours(1);
}
```
```csharp
builder.Services.AddSingleton(TimeProvider.System);
```
```csharp
public class MyService
{
private readonly TimeProvider _timeProvider;
public MyService(TimeProvider timeProvider)
{
_timeProvider = timeProvider;
}
public void DoSomething()
{
var now = _timeProvider.Now;
Console.WriteLine(now);
}
}
```
## FakeTimeProvider 实现
```powershell
dotnet add package Microsoft.Extensions.TimeProvider.Testing
```
```csharp
FakeTimeProvider fakeTimeProvider = new();
fakeTimeProvider.SetUtcNow(fakeTimeProvider.GetUtcNow().AddHours(1));
MyService service = new (timeProvider);
service.DoSomething();
```