/// <summary> /// Install the storage bridge into a stateful grain. /// </summary> /// <param name="grain">The grain.</param> /// <param name="grainType">The grain type.</param> /// <param name="stateType">The type of the state it persists.</param> /// <param name="storageProvider">The provider used to store the state.</param> public void InstallStorageBridge(Grain grain, Type grainType, Type stateType, IStorageProvider storageProvider) { var statefulgrain = (IStatefulGrain)grain; var storage = new GrainStateStorageBridge(grainType.FullName, statefulgrain, storageProvider); //Inject state and storage data into the grain statefulgrain.GrainState.State = Activator.CreateInstance(stateType); statefulgrain.SetStorage(storage); }
/// <summary> /// Create a new instance of a grain /// </summary> /// <param name="grainType">The grain type.</param> /// <param name="identity">Identity for the new grain</param> /// <param name="stateType">If the grain is a stateful grain, the type of the state it persists.</param> /// <param name="storageProvider">If the grain is a stateful grain, the storage provider used to persist the state.</param> /// <returns>The newly created grain.</returns> public Grain CreateGrainInstance(Type grainType, IGrainIdentity identity, Type stateType, IStorageProvider storageProvider) { // Create a new instance of the grain var grain = this.CreateGrainInstance(grainType, identity); var statefulGrain = grain as IStatefulGrain; if (statefulGrain == null) { return(grain); } var storage = new GrainStateStorageBridge(grainType.FullName, statefulGrain, storageProvider); //Inject state and storage data into the grain statefulGrain.GrainState.State = Activator.CreateInstance(stateType); statefulGrain.SetStorage(storage); return(grain); }