Beispiel #1
0
        /// <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();
        }