Exemplo n.º 1
0
        /// <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
            }
        }
Exemplo n.º 2
0
        /// <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());
        }