时间抽象实现
This commit is contained in:
parent
8229d66969
commit
3c8a1e3727
@ -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();
|
||||
```
|
Loading…
Reference in New Issue
Block a user