1. 添加自定义实现类 CustomProvider数据库
public class CustomProvider : IGrainStorage { public Task ClearStateAsync(string grainType, GrainReference grainReference, IGrainState grainState) { throw new NotImplementedException(); } public Task ReadStateAsync(string grainType, GrainReference grainReference, IGrainState grainState) { if(grainType== "Grain.UserGrain") { var id = grainReference.GetPrimaryKeyLong(); //模拟从数据库读出User var user = new UserState() { MobilePhone = "124214214", Name = "李四" }; grainState.State = user; } return Task.CompletedTask; } public Task WriteStateAsync(string grainType, GrainReference grainReference, IGrainState grainState) { if (grainType== "Grain.UserGrain") { var id = grainReference.GetPrimaryKeyLong(); //模拟保存数据库 } return Task.CompletedTask; } }
2. 在silo中注入代替默认实现ide
.ConfigureServices(services => { var providerName = "CustomProvider"; services.TryAddSingleton(sp => sp.GetServiceByName<IGrainStorage>(ProviderConstants.DEFAULT_STORAGE_PROVIDER_NAME)); services.AddSingletonNamedService<IGrainStorage, CustomProvider>(providerName); })
3. 在grain类上启用spa
[StorageProvider(ProviderName = "CustomProvider")]
示例代码下载地址:SimpleStoragecode