时间抽象实现
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