/// <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); }
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)); }
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); }
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)); }