/// <summary> /// Uses <see cref="WcfDataContractResolverConfiguration.GetDataContracts{TService}"/> /// to find <see cref="DataContractResolver">resolvers</see> to automatically attach to each /// <see cref="OperationDescription"/> in <see cref="ContractDescription.Operations"/> of <see cref="ServiceEndpoint.Contract"/> of the provided <paramref name="endpoint"/>. /// </summary> protected virtual void AttachDataContractResolver(ServiceEndpoint endpoint) { ContractDescription contractDescription = endpoint.Contract; foreach (OperationDescription operationDescription in contractDescription.Operations) { Type dataContractType = WcfDataContractResolverConfiguration.Current.GetDataContracts <TService>(operationDescription.Name); if (dataContractType == null) { continue; } DataContractSerializerOperationBehavior serializerBehavior = operationDescription.Behaviors.Find <DataContractSerializerOperationBehavior>(); if (serializerBehavior == null) { operationDescription.Behaviors.Add(serializerBehavior = new DataContractSerializerOperationBehavior(operationDescription)); } #if NET40 serializerBehavior.DataContractResolver = (DataContractResolver)Activator.CreateInstance(AppDomain.CurrentDomain, dataContractType.Assembly.FullName, dataContractType.FullName).Unwrap(); #endif #if NETSTANDARD2_0 serializerBehavior.DataContractResolver = (DataContractResolver)DotNetStandard2Helper.CreateInstanceFrom(dataContractType.Assembly.FullName, dataContractType.FullName); #endif #if NETCOREAPP3_0 serializerBehavior.DataContractResolver = (DataContractResolver)Activator.CreateInstance(dataContractType.Assembly.FullName, dataContractType.FullName).Unwrap(); #endif } }
/// <summary> /// Creates an instance of <see cref="ITelemetryHelper"/> if the value for <paramref name="configurationKey"/> is true. /// </summary> public static ITelemetryHelper CreateTelemetryHelper(this IConfigurationManager configurationManager, string configurationKey, ICorrelationIdHelper correlationIdHelper) { bool useApplicationInsightTelemetryHelper; if (!bool.TryParse(configurationManager.GetSetting(configurationKey), out useApplicationInsightTelemetryHelper)) { useApplicationInsightTelemetryHelper = false; } if (useApplicationInsightTelemetryHelper) { ITelemetryHelper helper; try { #if NETSTANDARD2_0 helper = (ITelemetryHelper)DotNetStandard2Helper.CreateInstanceFrom(string.Format("{0}\\Chinchilla.Logging.Azure.ApplicationInsights.dll", GetExecutionPath()), "Chinchilla.Logging.Azure.ApplicationInsights.TelemetryHelper", false, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.CreateInstance, null, new object[] { correlationIdHelper, DependencyResolver.Current.Resolve <ILoggerSettings>() }, null, null); #else helper = (ITelemetryHelper)Activator.CreateInstanceFrom(string.Format("{0}\\Chinchilla.Logging.Azure.ApplicationInsights.dll", GetExecutionPath()), "Chinchilla.Logging.Azure.ApplicationInsights.TelemetryHelper", false, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.CreateInstance, null, new object[] { correlationIdHelper, DependencyResolver.Current.Resolve <ILoggerSettings>() }, null, null).Unwrap(); #endif } catch { #if NETSTANDARD2_0 helper = (ITelemetryHelper)DotNetStandard2Helper.CreateInstanceFrom(string.Format("{0}\\Chinchilla.Logging.Azure.ApplicationInsights.dll", GetExecutionPath()), "Chinchilla.Logging.Azure.ApplicationInsights.TelemetryHelper", false, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.CreateInstance, null, new object[] { correlationIdHelper }, null, null); #else helper = (ITelemetryHelper)Activator.CreateInstanceFrom(string.Format("{0}\\Chinchilla.Logging.Azure.ApplicationInsights.dll", GetExecutionPath()), "Chinchilla.Logging.Azure.ApplicationInsights.TelemetryHelper", false, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.CreateInstance, null, new object[] { correlationIdHelper }, null, null).Unwrap(); #endif } return(helper); } return(new NullTelemetryHelper()); }