void IFeatureCollection.Set <TFeature>(TFeature?feature) where TFeature : default
        {
            // Using Unsafe.As for the cast due to https://github.com/dotnet/runtime/issues/49614
            // The type of TFeature is confirmed by the typeof() check and the As cast only accepts
            // that type; however the Jit does not eliminate a regular cast in a shared generic.

            _featureRevision++;
            if (typeof(TFeature) == typeof(IConnectionIdFeature))
            {
                _currentIConnectionIdFeature = Unsafe.As <TFeature?, IConnectionIdFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IConnectionTransportFeature))
            {
                _currentIConnectionTransportFeature = Unsafe.As <TFeature?, IConnectionTransportFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IConnectionItemsFeature))
            {
                _currentIConnectionItemsFeature = Unsafe.As <TFeature?, IConnectionItemsFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IPersistentStateFeature))
            {
                _currentIPersistentStateFeature = Unsafe.As <TFeature?, IPersistentStateFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IMemoryPoolFeature))
            {
                _currentIMemoryPoolFeature = Unsafe.As <TFeature?, IMemoryPoolFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IConnectionLifetimeFeature))
            {
                _currentIConnectionLifetimeFeature = Unsafe.As <TFeature?, IConnectionLifetimeFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IConnectionSocketFeature))
            {
                _currentIConnectionSocketFeature = Unsafe.As <TFeature?, IConnectionSocketFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IProtocolErrorCodeFeature))
            {
                _currentIProtocolErrorCodeFeature = Unsafe.As <TFeature?, IProtocolErrorCodeFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IStreamDirectionFeature))
            {
                _currentIStreamDirectionFeature = Unsafe.As <TFeature?, IStreamDirectionFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IStreamIdFeature))
            {
                _currentIStreamIdFeature = Unsafe.As <TFeature?, IStreamIdFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IStreamAbortFeature))
            {
                _currentIStreamAbortFeature = Unsafe.As <TFeature?, IStreamAbortFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IStreamClosedFeature))
            {
                _currentIStreamClosedFeature = Unsafe.As <TFeature?, IStreamClosedFeature?>(ref feature);
            }
            else
            {
                ExtraFeatureSet(typeof(TFeature), feature);
            }
        }
Пример #2
0
        private void FastReset()
        {
            _currentIHttpRequestFeature              = this;
            _currentIHttpResponseFeature             = this;
            _currentIHttpResponseBodyFeature         = this;
            _currentIRouteValuesFeature              = this;
            _currentIEndpointFeature                 = this;
            _currentIHttpRequestIdentifierFeature    = this;
            _currentIHttpRequestTrailersFeature      = this;
            _currentIHttpUpgradeFeature              = this;
            _currentIRequestBodyPipeFeature          = this;
            _currentIHttpConnectionFeature           = this;
            _currentIHttpRequestLifetimeFeature      = this;
            _currentIHttpBodyControlFeature          = this;
            _currentIHttpMaxRequestBodySizeFeature   = this;
            _currentIHttpRequestBodyDetectionFeature = this;
            _currentIBadRequestExceptionFeature      = this;

            _currentIServiceProvidersFeature           = null;
            _currentIHttpActivityFeature               = null;
            _currentIItemsFeature                      = null;
            _currentIQueryFeature                      = null;
            _currentIFormFeature                       = null;
            _currentIHttpAuthenticationFeature         = null;
            _currentISessionFeature                    = null;
            _currentIResponseCookiesFeature            = null;
            _currentIHttpResponseTrailersFeature       = null;
            _currentITlsConnectionFeature              = null;
            _currentIHttpWebSocketFeature              = null;
            _currentIHttp2StreamIdFeature              = null;
            _currentIHttpMinRequestBodyDataRateFeature = null;
            _currentIHttpMinResponseDataRateFeature    = null;
            _currentIHttpResetFeature                  = null;
            _currentIPersistentStateFeature            = null;
        }
Пример #3
0
        private void FastReset()
        {
            _currentIConnectionIdFeature        = this;
            _currentIConnectionTransportFeature = this;
            _currentIConnectionItemsFeature     = this;
            _currentIMemoryPoolFeature          = this;
            _currentIConnectionLifetimeFeature  = this;

            _currentIPersistentStateFeature   = null;
            _currentIConnectionSocketFeature  = null;
            _currentIProtocolErrorCodeFeature = null;
            _currentIStreamDirectionFeature   = null;
            _currentIStreamIdFeature          = null;
            _currentIStreamAbortFeature       = null;
        }
        object?IFeatureCollection.this[Type key]
        {
            get
            {
                object?feature = null;
                if (key == typeof(IConnectionIdFeature))
                {
                    feature = _currentIConnectionIdFeature;
                }
                else if (key == typeof(IConnectionTransportFeature))
                {
                    feature = _currentIConnectionTransportFeature;
                }
                else if (key == typeof(IConnectionItemsFeature))
                {
                    feature = _currentIConnectionItemsFeature;
                }
                else if (key == typeof(IPersistentStateFeature))
                {
                    feature = _currentIPersistentStateFeature;
                }
                else if (key == typeof(IMemoryPoolFeature))
                {
                    feature = _currentIMemoryPoolFeature;
                }
                else if (key == typeof(IConnectionLifetimeFeature))
                {
                    feature = _currentIConnectionLifetimeFeature;
                }
                else if (key == typeof(IConnectionSocketFeature))
                {
                    feature = _currentIConnectionSocketFeature;
                }
                else if (key == typeof(IProtocolErrorCodeFeature))
                {
                    feature = _currentIProtocolErrorCodeFeature;
                }
                else if (key == typeof(IStreamDirectionFeature))
                {
                    feature = _currentIStreamDirectionFeature;
                }
                else if (key == typeof(IStreamIdFeature))
                {
                    feature = _currentIStreamIdFeature;
                }
                else if (key == typeof(IStreamAbortFeature))
                {
                    feature = _currentIStreamAbortFeature;
                }
                else if (key == typeof(IStreamClosedFeature))
                {
                    feature = _currentIStreamClosedFeature;
                }
                else if (MaybeExtra != null)
                {
                    feature = ExtraFeatureGet(key);
                }

                return(feature ?? MultiplexedConnectionFeatures?[key]);
            }

            set
            {
                _featureRevision++;

                if (key == typeof(IConnectionIdFeature))
                {
                    _currentIConnectionIdFeature = (IConnectionIdFeature?)value;
                }
                else if (key == typeof(IConnectionTransportFeature))
                {
                    _currentIConnectionTransportFeature = (IConnectionTransportFeature?)value;
                }
                else if (key == typeof(IConnectionItemsFeature))
                {
                    _currentIConnectionItemsFeature = (IConnectionItemsFeature?)value;
                }
                else if (key == typeof(IPersistentStateFeature))
                {
                    _currentIPersistentStateFeature = (IPersistentStateFeature?)value;
                }
                else if (key == typeof(IMemoryPoolFeature))
                {
                    _currentIMemoryPoolFeature = (IMemoryPoolFeature?)value;
                }
                else if (key == typeof(IConnectionLifetimeFeature))
                {
                    _currentIConnectionLifetimeFeature = (IConnectionLifetimeFeature?)value;
                }
                else if (key == typeof(IConnectionSocketFeature))
                {
                    _currentIConnectionSocketFeature = (IConnectionSocketFeature?)value;
                }
                else if (key == typeof(IProtocolErrorCodeFeature))
                {
                    _currentIProtocolErrorCodeFeature = (IProtocolErrorCodeFeature?)value;
                }
                else if (key == typeof(IStreamDirectionFeature))
                {
                    _currentIStreamDirectionFeature = (IStreamDirectionFeature?)value;
                }
                else if (key == typeof(IStreamIdFeature))
                {
                    _currentIStreamIdFeature = (IStreamIdFeature?)value;
                }
                else if (key == typeof(IStreamAbortFeature))
                {
                    _currentIStreamAbortFeature = (IStreamAbortFeature?)value;
                }
                else if (key == typeof(IStreamClosedFeature))
                {
                    _currentIStreamClosedFeature = (IStreamClosedFeature?)value;
                }
                else
                {
                    ExtraFeatureSet(key, value);
                }
            }
        }
Пример #5
0
        void IFeatureCollection.Set <TFeature>(TFeature?feature) where TFeature : default
        {
            // Using Unsafe.As for the cast due to https://github.com/dotnet/runtime/issues/49614
            // The type of TFeature is confirmed by the typeof() check and the As cast only accepts
            // that type; however the Jit does not eliminate a regular cast in a shared generic.

            _featureRevision++;
            if (typeof(TFeature) == typeof(IHttpRequestFeature))
            {
                _currentIHttpRequestFeature = Unsafe.As <TFeature?, IHttpRequestFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpResponseFeature))
            {
                _currentIHttpResponseFeature = Unsafe.As <TFeature?, IHttpResponseFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpResponseBodyFeature))
            {
                _currentIHttpResponseBodyFeature = Unsafe.As <TFeature?, IHttpResponseBodyFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IRouteValuesFeature))
            {
                _currentIRouteValuesFeature = Unsafe.As <TFeature?, IRouteValuesFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IEndpointFeature))
            {
                _currentIEndpointFeature = Unsafe.As <TFeature?, IEndpointFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IServiceProvidersFeature))
            {
                _currentIServiceProvidersFeature = Unsafe.As <TFeature?, IServiceProvidersFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpActivityFeature))
            {
                _currentIHttpActivityFeature = Unsafe.As <TFeature?, IHttpActivityFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IItemsFeature))
            {
                _currentIItemsFeature = Unsafe.As <TFeature?, IItemsFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IQueryFeature))
            {
                _currentIQueryFeature = Unsafe.As <TFeature?, IQueryFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IRequestBodyPipeFeature))
            {
                _currentIRequestBodyPipeFeature = Unsafe.As <TFeature?, IRequestBodyPipeFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IFormFeature))
            {
                _currentIFormFeature = Unsafe.As <TFeature?, IFormFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpAuthenticationFeature))
            {
                _currentIHttpAuthenticationFeature = Unsafe.As <TFeature?, IHttpAuthenticationFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpRequestIdentifierFeature))
            {
                _currentIHttpRequestIdentifierFeature = Unsafe.As <TFeature?, IHttpRequestIdentifierFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpConnectionFeature))
            {
                _currentIHttpConnectionFeature = Unsafe.As <TFeature?, IHttpConnectionFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(ISessionFeature))
            {
                _currentISessionFeature = Unsafe.As <TFeature?, ISessionFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IResponseCookiesFeature))
            {
                _currentIResponseCookiesFeature = Unsafe.As <TFeature?, IResponseCookiesFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpRequestTrailersFeature))
            {
                _currentIHttpRequestTrailersFeature = Unsafe.As <TFeature?, IHttpRequestTrailersFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpResponseTrailersFeature))
            {
                _currentIHttpResponseTrailersFeature = Unsafe.As <TFeature?, IHttpResponseTrailersFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(ITlsConnectionFeature))
            {
                _currentITlsConnectionFeature = Unsafe.As <TFeature?, ITlsConnectionFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpUpgradeFeature))
            {
                _currentIHttpUpgradeFeature = Unsafe.As <TFeature?, IHttpUpgradeFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpWebSocketFeature))
            {
                _currentIHttpWebSocketFeature = Unsafe.As <TFeature?, IHttpWebSocketFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IBadRequestExceptionFeature))
            {
                _currentIBadRequestExceptionFeature = Unsafe.As <TFeature?, IBadRequestExceptionFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttp2StreamIdFeature))
            {
                _currentIHttp2StreamIdFeature = Unsafe.As <TFeature?, IHttp2StreamIdFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpRequestLifetimeFeature))
            {
                _currentIHttpRequestLifetimeFeature = Unsafe.As <TFeature?, IHttpRequestLifetimeFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpMaxRequestBodySizeFeature))
            {
                _currentIHttpMaxRequestBodySizeFeature = Unsafe.As <TFeature?, IHttpMaxRequestBodySizeFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpMinRequestBodyDataRateFeature))
            {
                _currentIHttpMinRequestBodyDataRateFeature = Unsafe.As <TFeature?, IHttpMinRequestBodyDataRateFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpMinResponseDataRateFeature))
            {
                _currentIHttpMinResponseDataRateFeature = Unsafe.As <TFeature?, IHttpMinResponseDataRateFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpBodyControlFeature))
            {
                _currentIHttpBodyControlFeature = Unsafe.As <TFeature?, IHttpBodyControlFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpRequestBodyDetectionFeature))
            {
                _currentIHttpRequestBodyDetectionFeature = Unsafe.As <TFeature?, IHttpRequestBodyDetectionFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IHttpResetFeature))
            {
                _currentIHttpResetFeature = Unsafe.As <TFeature?, IHttpResetFeature?>(ref feature);
            }
            else if (typeof(TFeature) == typeof(IPersistentStateFeature))
            {
                _currentIPersistentStateFeature = Unsafe.As <TFeature?, IPersistentStateFeature?>(ref feature);
            }
            else
            {
                ExtraFeatureSet(typeof(TFeature), feature);
            }
        }
Пример #6
0
        object?IFeatureCollection.this[Type key]
        {
            get
            {
                object?feature = null;
                if (key == typeof(IHttpRequestFeature))
                {
                    feature = _currentIHttpRequestFeature;
                }
                else if (key == typeof(IHttpResponseFeature))
                {
                    feature = _currentIHttpResponseFeature;
                }
                else if (key == typeof(IHttpResponseBodyFeature))
                {
                    feature = _currentIHttpResponseBodyFeature;
                }
                else if (key == typeof(IRouteValuesFeature))
                {
                    feature = _currentIRouteValuesFeature;
                }
                else if (key == typeof(IEndpointFeature))
                {
                    feature = _currentIEndpointFeature;
                }
                else if (key == typeof(IServiceProvidersFeature))
                {
                    feature = _currentIServiceProvidersFeature;
                }
                else if (key == typeof(IHttpActivityFeature))
                {
                    feature = _currentIHttpActivityFeature;
                }
                else if (key == typeof(IItemsFeature))
                {
                    feature = _currentIItemsFeature;
                }
                else if (key == typeof(IQueryFeature))
                {
                    feature = _currentIQueryFeature;
                }
                else if (key == typeof(IRequestBodyPipeFeature))
                {
                    feature = _currentIRequestBodyPipeFeature;
                }
                else if (key == typeof(IFormFeature))
                {
                    feature = _currentIFormFeature;
                }
                else if (key == typeof(IHttpAuthenticationFeature))
                {
                    feature = _currentIHttpAuthenticationFeature;
                }
                else if (key == typeof(IHttpRequestIdentifierFeature))
                {
                    feature = _currentIHttpRequestIdentifierFeature;
                }
                else if (key == typeof(IHttpConnectionFeature))
                {
                    feature = _currentIHttpConnectionFeature;
                }
                else if (key == typeof(ISessionFeature))
                {
                    feature = _currentISessionFeature;
                }
                else if (key == typeof(IResponseCookiesFeature))
                {
                    feature = _currentIResponseCookiesFeature;
                }
                else if (key == typeof(IHttpRequestTrailersFeature))
                {
                    feature = _currentIHttpRequestTrailersFeature;
                }
                else if (key == typeof(IHttpResponseTrailersFeature))
                {
                    feature = _currentIHttpResponseTrailersFeature;
                }
                else if (key == typeof(ITlsConnectionFeature))
                {
                    feature = _currentITlsConnectionFeature;
                }
                else if (key == typeof(IHttpUpgradeFeature))
                {
                    feature = _currentIHttpUpgradeFeature;
                }
                else if (key == typeof(IHttpWebSocketFeature))
                {
                    feature = _currentIHttpWebSocketFeature;
                }
                else if (key == typeof(IBadRequestExceptionFeature))
                {
                    feature = _currentIBadRequestExceptionFeature;
                }
                else if (key == typeof(IHttp2StreamIdFeature))
                {
                    feature = _currentIHttp2StreamIdFeature;
                }
                else if (key == typeof(IHttpRequestLifetimeFeature))
                {
                    feature = _currentIHttpRequestLifetimeFeature;
                }
                else if (key == typeof(IHttpMaxRequestBodySizeFeature))
                {
                    feature = _currentIHttpMaxRequestBodySizeFeature;
                }
                else if (key == typeof(IHttpMinRequestBodyDataRateFeature))
                {
                    feature = _currentIHttpMinRequestBodyDataRateFeature;
                }
                else if (key == typeof(IHttpMinResponseDataRateFeature))
                {
                    feature = _currentIHttpMinResponseDataRateFeature;
                }
                else if (key == typeof(IHttpBodyControlFeature))
                {
                    feature = _currentIHttpBodyControlFeature;
                }
                else if (key == typeof(IHttpRequestBodyDetectionFeature))
                {
                    feature = _currentIHttpRequestBodyDetectionFeature;
                }
                else if (key == typeof(IHttpResetFeature))
                {
                    feature = _currentIHttpResetFeature;
                }
                else if (key == typeof(IPersistentStateFeature))
                {
                    feature = _currentIPersistentStateFeature;
                }
                else if (MaybeExtra != null)
                {
                    feature = ExtraFeatureGet(key);
                }

                return(feature ?? ConnectionFeatures?[key]);
            }

            set
            {
                _featureRevision++;

                if (key == typeof(IHttpRequestFeature))
                {
                    _currentIHttpRequestFeature = (IHttpRequestFeature?)value;
                }
                else if (key == typeof(IHttpResponseFeature))
                {
                    _currentIHttpResponseFeature = (IHttpResponseFeature?)value;
                }
                else if (key == typeof(IHttpResponseBodyFeature))
                {
                    _currentIHttpResponseBodyFeature = (IHttpResponseBodyFeature?)value;
                }
                else if (key == typeof(IRouteValuesFeature))
                {
                    _currentIRouteValuesFeature = (IRouteValuesFeature?)value;
                }
                else if (key == typeof(IEndpointFeature))
                {
                    _currentIEndpointFeature = (IEndpointFeature?)value;
                }
                else if (key == typeof(IServiceProvidersFeature))
                {
                    _currentIServiceProvidersFeature = (IServiceProvidersFeature?)value;
                }
                else if (key == typeof(IHttpActivityFeature))
                {
                    _currentIHttpActivityFeature = (IHttpActivityFeature?)value;
                }
                else if (key == typeof(IItemsFeature))
                {
                    _currentIItemsFeature = (IItemsFeature?)value;
                }
                else if (key == typeof(IQueryFeature))
                {
                    _currentIQueryFeature = (IQueryFeature?)value;
                }
                else if (key == typeof(IRequestBodyPipeFeature))
                {
                    _currentIRequestBodyPipeFeature = (IRequestBodyPipeFeature?)value;
                }
                else if (key == typeof(IFormFeature))
                {
                    _currentIFormFeature = (IFormFeature?)value;
                }
                else if (key == typeof(IHttpAuthenticationFeature))
                {
                    _currentIHttpAuthenticationFeature = (IHttpAuthenticationFeature?)value;
                }
                else if (key == typeof(IHttpRequestIdentifierFeature))
                {
                    _currentIHttpRequestIdentifierFeature = (IHttpRequestIdentifierFeature?)value;
                }
                else if (key == typeof(IHttpConnectionFeature))
                {
                    _currentIHttpConnectionFeature = (IHttpConnectionFeature?)value;
                }
                else if (key == typeof(ISessionFeature))
                {
                    _currentISessionFeature = (ISessionFeature?)value;
                }
                else if (key == typeof(IResponseCookiesFeature))
                {
                    _currentIResponseCookiesFeature = (IResponseCookiesFeature?)value;
                }
                else if (key == typeof(IHttpRequestTrailersFeature))
                {
                    _currentIHttpRequestTrailersFeature = (IHttpRequestTrailersFeature?)value;
                }
                else if (key == typeof(IHttpResponseTrailersFeature))
                {
                    _currentIHttpResponseTrailersFeature = (IHttpResponseTrailersFeature?)value;
                }
                else if (key == typeof(ITlsConnectionFeature))
                {
                    _currentITlsConnectionFeature = (ITlsConnectionFeature?)value;
                }
                else if (key == typeof(IHttpUpgradeFeature))
                {
                    _currentIHttpUpgradeFeature = (IHttpUpgradeFeature?)value;
                }
                else if (key == typeof(IHttpWebSocketFeature))
                {
                    _currentIHttpWebSocketFeature = (IHttpWebSocketFeature?)value;
                }
                else if (key == typeof(IBadRequestExceptionFeature))
                {
                    _currentIBadRequestExceptionFeature = (IBadRequestExceptionFeature?)value;
                }
                else if (key == typeof(IHttp2StreamIdFeature))
                {
                    _currentIHttp2StreamIdFeature = (IHttp2StreamIdFeature?)value;
                }
                else if (key == typeof(IHttpRequestLifetimeFeature))
                {
                    _currentIHttpRequestLifetimeFeature = (IHttpRequestLifetimeFeature?)value;
                }
                else if (key == typeof(IHttpMaxRequestBodySizeFeature))
                {
                    _currentIHttpMaxRequestBodySizeFeature = (IHttpMaxRequestBodySizeFeature?)value;
                }
                else if (key == typeof(IHttpMinRequestBodyDataRateFeature))
                {
                    _currentIHttpMinRequestBodyDataRateFeature = (IHttpMinRequestBodyDataRateFeature?)value;
                }
                else if (key == typeof(IHttpMinResponseDataRateFeature))
                {
                    _currentIHttpMinResponseDataRateFeature = (IHttpMinResponseDataRateFeature?)value;
                }
                else if (key == typeof(IHttpBodyControlFeature))
                {
                    _currentIHttpBodyControlFeature = (IHttpBodyControlFeature?)value;
                }
                else if (key == typeof(IHttpRequestBodyDetectionFeature))
                {
                    _currentIHttpRequestBodyDetectionFeature = (IHttpRequestBodyDetectionFeature?)value;
                }
                else if (key == typeof(IHttpResetFeature))
                {
                    _currentIHttpResetFeature = (IHttpResetFeature?)value;
                }
                else if (key == typeof(IPersistentStateFeature))
                {
                    _currentIPersistentStateFeature = (IPersistentStateFeature?)value;
                }
                else
                {
                    ExtraFeatureSet(key, value);
                }
            }
        }