![Orleans:构建高性能分布式Actor服务](https://wfqqreader-1252317822.image.myqcloud.com/cover/223/44175223/b_44175223.jpg)
上QQ阅读APP看书,第一时间看更新
2.5.1 Grain内部状态的持久化
Orleans运行时提供了两种标识有状态Grain的方法:
1)通过IPersistentState<TState>类型及PersistentStateAttribute特性标注从Grain类型的构造函数中注入。
2)将Grain类型直接派生自Grain<TState>基类。
采用第一种方式进行Grain内部状态的存储具有更强的灵活性及可配置性,Orleans运行时推荐开发人员在应用程序中优先使用。以下代码展示了如何使用IPersistentState<TState>类型的内部属性,将UserGrain中的购物车状态和用户信息状态分别存储于不同StorageProvider中。
![](https://epubservercos.yuewen.com/5DD5C6/23446275701391606/epubprivate/OEBPS/Images/27_01.jpg?sign=1738776994-NjuSldA4YbAmJLGr46mzuvJzchk12gGs-0-3332b21f4c0e8f8b6e185e83d525dc08)
若采用直接继承自Grain<TState>基类的实现方式,Orleans运行时则只支持通过StorageProviderAttribute特性标注绑定单一种类的外部存储接口。
![](https://epubservercos.yuewen.com/5DD5C6/23446275701391606/epubprivate/OEBPS/Images/28_01.jpg?sign=1738776994-bgtnt2rDrny2cHr05jukqPiQHOibolRQ-0-13090c83ae513c67bcc708373c1c8cac)