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); } }
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; }
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); } } }
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); } }
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); } } }