示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }