public void OnNext(IAllocatedEvaluator allocatedEvaluator)
        {
            IConfiguration contextConfiguration = _groupCommDriver.GetContextConfiguration();

            int partitionNum;

            if (_groupCommDriver.IsMasterContextConfiguration(contextConfiguration))
            {
                partitionNum = -1;
            }
            else
            {
                lock (_lockObj)
                {
                    partitionNum = _partitionInex;
                    _partitionInex++;
                }
            }

            IConfiguration gcServiceConfiguration = _groupCommDriver.GetServiceConfiguration();

            gcServiceConfiguration = Configurations.Merge(gcServiceConfiguration, _centroidCodecConf, _controlMessageCodecConf, _processedResultsCodecConf);
            IConfiguration commonServiceConfiguration = TangFactory.GetTang().NewConfigurationBuilder(gcServiceConfiguration)
                                                        .BindNamedParameter <DataPartitionCache.PartitionIndex, int>(GenericType <DataPartitionCache.PartitionIndex> .Class, partitionNum.ToString(CultureInfo.InvariantCulture))
                                                        .BindNamedParameter <KMeansConfiguratioinOptions.ExecutionDirectory, string>(GenericType <KMeansConfiguratioinOptions.ExecutionDirectory> .Class, _executionDirectory)
                                                        .BindNamedParameter <KMeansConfiguratioinOptions.TotalNumEvaluators, int>(GenericType <KMeansConfiguratioinOptions.TotalNumEvaluators> .Class, _totalEvaluators.ToString(CultureInfo.InvariantCulture))
                                                        .BindNamedParameter <KMeansConfiguratioinOptions.K, int>(GenericType <KMeansConfiguratioinOptions.K> .Class, _clustersNumber.ToString(CultureInfo.InvariantCulture))
                                                        .Build();

            IConfiguration dataCacheServiceConfiguration = ServiceConfiguration.ConfigurationModule
                                                           .Set(ServiceConfiguration.Services, GenericType <DataPartitionCache> .Class)
                                                           .Build();

            allocatedEvaluator.SubmitContextAndService(contextConfiguration, Configurations.Merge(commonServiceConfiguration, dataCacheServiceConfiguration));
        }
        private ContextAndServiceConfiguration GetMapTaskContextAndServiceConfiguration(IPartitionDescriptor partitionDescriptor)
        {
            var codecConfig =
                TangFactory.GetTang()
                .NewConfigurationBuilder(
                    StreamingCodecConfiguration <MapInputWithControlMessage <TMapInput> > .Conf.Set(
                        StreamingCodecConfiguration <MapInputWithControlMessage <TMapInput> > .Codec,
                        GenericType <MapInputWithControlMessageCodec <TMapInput> > .Class).Build(),
                    StreamingCodecConfigurationMinusMessage <TMapOutput> .Conf.Build(),
                    _configurationManager.MapInputCodecConfiguration)
                .Build();

            var contextConf = _groupCommDriver.GetContextConfiguration();
            var serviceConf = Configurations.Merge(_groupCommDriver.GetServiceConfiguration(), codecConfig, partitionDescriptor.GetPartitionConfiguration());

            return(new ContextAndServiceConfiguration(contextConf, serviceConf));
        }