Exemple #1
0
        /// <summary>
        /// Metodo per invocare dinamicamente un metodo di servizio su un client tra quelli caricati a runtime in base alle configurazioni all'interno del BaseProxy.json
        /// </summary>
        /// <param name="_callConfig">definisce il nome del client sul quale invocare il metodo di servizio e il metodo di servizio da invocare
        /// {
        ///     "ServiceClientName" : "Nome del client",
        ///     "ServiceMethodName" : "Nome del metodo da invocare"
        /// }
        /// se 'ServiceClientName' nullo o vuoto la classe si occupa di fare una ricerca del metodo su tutti i client definiti nel config
        /// 'ServiceMethodName' non può essere ne nullo ne vuoto
        /// </param>
        /// <param name="_datasource">Il datasource con il quale fare il binding sull'oggetto che riceve in input il metodo di servizio, se non si conosce la struttura che deve avere
        /// invocare il metodo BaseProxy.GetDataSourceInfo(_callConfig) per avere un esempio della struttura
        /// </param>
        /// <param name="_configuration">Non obbligatorio, necessario solo nel caso in cui nel datasource sono presenti delle proprietà con nome diverso rispetto a quello dell'oggetto
        /// sul quel fare il binding. In quel caso va definito in questo modo:
        /// {
        ///     "NomeProprietàOggettoDestinazione" : "NomeProprietàOggettoJson"
        /// }
        /// ES.
        /// {
        ///     "Name" = "ragsoc",
        ///     "InboundShipmentPlanRequestItems" = "tt-provoci-parent",
        ///     "member" = "tt-provoci"
        /// }
        /// </param>
        /// <returns>Risultato della chiamata al servizio in formato JSON</returns>
        public string CallServiceDynamically(string _callConfig, string _datasource, string _configuration = "{}")
        {
            string _result = string.Empty;

            logger.Debug(this.GetType().Name + ".CallServiceDynamically -> CallConfig: " + _callConfig);
            logger.Debug(this.GetType().Name + ".CallServiceDynamically -> DataSource: " + _datasource);
            logger.Debug(this.GetType().Name + ".CallServiceDynamically -> DataSourceColumnDefinition: " + _configuration);

            try
            {
                //Recupero la configurazione della chiamata al servizio (nome del client e metodo da chiamare)
                var callConfig = _callConfig.DeserilizeJson <DynamicInvokeConfig>();
                //Recupero l'instanza del client del servizio
                var service = GetServiceInstance(callConfig);
                //Recupero le informazioni del metodo da invocare
                var methodInfo = service?.GetType()?.GetMethod(callConfig.ServiceMethodName);
                //Creo l'istanza della request tramite l'automapper bindando le proprietà con stessa nomenclatura (o come configurazione) tra datasource e instanza
                var request = AutoMapperService.Map(methodInfo.GetParameters(), _datasource.DeserilizeJson(), _configuration.DeserilizeJson());
                logger.Info(GetType().Name + ".CallServiceDynamically -> Calling Service: " + service.GetType().Name + "." + methodInfo.Name);
                //invoco il metodo
                RetryService.Excecute(Config.MaxRetry, Config.RetryDelay, () => _result = methodInfo.Invoke(service, request).SerializeObject());
            }
            catch (Exception ex)
            {
                logger.Error(GetType().Name + ".CallServiceDynamically -> Deserialization | Reflection | Invoking Error", ex);
                throw;
            }
            logger.Debug(GetType().Name + ".CallServiceDynamically -> result: " + _result);
            return(_result);
        }
Exemple #2
0
        public void NotThrow_WhenArguments_AreValid()
        {
            // Arange
            var mockedMapper = new Mock <IMapper>();
            var service      = new AutoMapperService(mockedMapper.Object);

            // Act & Assert
            Assert.DoesNotThrow(() => service.Map <DummyGuidClass>(mockedMapper.Object));
        }
Exemple #3
0
        protected virtual void Write(string key, T value)
        {
            if (key.ToUpper().Contains("DSDE-167"))
            {
                Console.WriteLine("!");
            }

            var dto = _autoMapperService.Map(value);

            _dao.InvokeGenericMethod(nameof(_dao.Write), dto.GetType(), dto, false);
        }
Exemple #4
0
        public void Throw_ArgumentNullException_WithProperMessage_When_SourceObject_IsNull()
        {
            // Arange
            var mockedMapper = new Mock <IMapper>();
            var service      = new AutoMapperService(mockedMapper.Object);

            // Act & Assert
            Assert.That(
                () => service.Map <DummyGuidClass>(null),
                Throws.ArgumentNullException.With.Message.Contains(
                    GlobalConstants.SourceObjectRequiredExceptionMessage));
        }