public IStatefulServiceReplica CreateReplica(string serviceTypeName, Uri serviceName, byte[] initializationData, Guid partitionId, long replicaId)
        {
            StatefulServiceParameters parameters = new StatefulServiceParameters(
                FabricRuntime.GetActivationContext(),
                initializationData,
                partitionId,
                serviceName,
                serviceTypeName,
                replicaId);
            
            IReliableStateManager stateManager = new ReliableStateManager();

            return new ClusterService(
#if LOCAL
                new FakeClusterOperator(stateManager),
                new FakeMailer(),
#else
                new ArmClusterOperator(parameters),
                new SendGridMailer(parameters),
#endif
                ServiceProxy.Create<IApplicationDeployService>(0, new ServiceUriBuilder("ApplicationDeployService").ToUri()),
                stateManager,
                parameters,
                new ClusterConfig());
        }
        /// <summary>
        /// Creates a new service class instance with the given state manager and service parameters.
        /// </summary>
        /// <param name="stateManager"></param>
        /// <param name="serviceParameters"></param>
        public ApplicationDeployService(
            IReliableStateManager stateManager, IApplicationOperator applicationOperator, StatefulServiceParameters serviceParameters)
        {
            this.StateManager = stateManager;
            this.serviceParameters = serviceParameters;
            this.applicationOperator = applicationOperator;

            this.ConfigureService();
        }
        public SendGridMailer(StatefulServiceParameters serviceParameters)
        {
            ConfigurationPackage configPackage = serviceParameters.CodePackageActivationContext.GetConfigurationPackageObject("Config");
            DataPackage dataPackage = serviceParameters.CodePackageActivationContext.GetDataPackageObject("Data");

            this.UpdateSendMailSettings(configPackage.Settings);
            this.UpdateJoinMailTemplateContent(dataPackage.Path);

            serviceParameters.CodePackageActivationContext.ConfigurationPackageModifiedEvent +=
                this.CodePackageActivationContext_ConfigurationPackageModifiedEvent;

            serviceParameters.CodePackageActivationContext.DataPackageModifiedEvent
                += this.CodePackageActivationContext_DataPackageModifiedEvent;
        }
        public IStatefulServiceReplica CreateReplica(string serviceTypeName, Uri serviceName, byte[] initializationData, Guid partitionId, long replicaId)
        {
            StatefulServiceParameters parameters = new StatefulServiceParameters(
                FabricRuntime.GetActivationContext(),
                initializationData,
                partitionId,
                serviceName,
                serviceTypeName,
                replicaId);

            IReliableStateManager stateManager = new ReliableStateManager();

            return new ApplicationDeployService(stateManager, new FabricClientApplicationOperator(parameters), parameters);
        }
        public ArmClusterOperator(StatefulServiceParameters serviceParameters)
        {
            ConfigurationPackage configPackage = serviceParameters.CodePackageActivationContext.GetConfigurationPackageObject("Config");
            DataPackage dataPackage = serviceParameters.CodePackageActivationContext.GetDataPackageObject("Data");

            this.UpdateClusterOperatorSettings(configPackage.Settings);
            this.UpdateArmTemplateContent(dataPackage.Path);
            this.UpdateArmParameterContent(dataPackage.Path);

            serviceParameters.CodePackageActivationContext.ConfigurationPackageModifiedEvent
                += this.CodePackageActivationContext_ConfigurationPackageModifiedEvent;

            serviceParameters.CodePackageActivationContext.DataPackageModifiedEvent
                += this.CodePackageActivationContext_DataPackageModifiedEvent;
        }
        /// <summary>
        /// Creates a new instance of the service class.
        /// </summary>
        /// <param name="clusterOperator"></param>
        /// <param name="mailer"></param>
        /// <param name="stateManager"></param>
        /// <param name="serviceParameters"></param>
        /// <param name="config"></param>
        public ClusterService(
            IClusterOperator clusterOperator,
            ISendMail mailer,
            IApplicationDeployService applicationDeployService,
            IReliableStateManager stateManager,
            StatefulServiceParameters serviceParameters,
            ClusterConfig config)
        {
            this.config = config;
            this.clusterOperator = clusterOperator;
            this.applicationDeployService = applicationDeployService;
            this.mailer = mailer;
            this.StateManager = stateManager;
            this.serviceParameters = serviceParameters;

            this.ConfigureService();
        }
 public FabricClientApplicationOperator(StatefulServiceParameters serviceParameters)
 {
     this.serviceParameters = serviceParameters;
 }