/// <summary> /// Initializes a new instance of the TracingProxyImplementer class. /// </summary> /// <param name="executeType">The type of object to execute.</param> /// <param name="logType">The type of object to log.</param> /// <param name="callWithActivityScope">True to generate a proxy that wraps an activity scope around all calls.</param> public TracingProxyImplementer(Type executeType, Type logType, bool callWithActivityScope) { _executeType = executeType; _callWithActivityScope = callWithActivityScope; _serializationProvider = TraceSerializationProvider.GetSerializationProvider(logType); // create a log of the given log type var log = EventSourceImplementer.GetEventSource(logType); _logType = log.GetType(); CreateMethod = ImplementProxy(log); }
/// <summary> /// Initializes a new instance of the TypeImplementer class. /// </summary> /// <param name="interfaceType">The type to implement.</param> /// <param name="parameterProvider">An optional parameter provider to use when building the type. Used for testing.</param> public TypeImplementer(Type interfaceType, TraceParameterProvider parameterProvider = null) { _interfaceType = interfaceType; _contextProvider = ProviderManager.GetProvider <TraceContextProvider>(interfaceType, typeof(TraceContextProviderAttribute), null); _serializationProvider = TraceSerializationProvider.GetSerializationProvider(interfaceType); _eventAttributeProvider = ProviderManager.GetProvider <EventAttributeProvider>(interfaceType, typeof(EventAttributeProviderAttribute), () => new EventAttributeProvider()); _traceParameterProvider = parameterProvider ?? TraceParameterProvider.GetParameterProvider(interfaceType); // only interfaces support context if (_contextProvider != null && !_interfaceType.IsInterface) { throw new InvalidOperationException("Context Providers can only be added to interface-based logs."); } ImplementType(); }