导航

01-007 HttpAbstractions 之 FeatureReference<T>

Posted on 2015-03-06 11:30  DotNet1010  阅读(162)  评论(0)    收藏  举报

---主要代码如下:用来获取新的实现类型,并更新版本,初始值为null 版本为-1;

        public T Fetch(IFeatureCollection features)
        {
            if (_revision == features.Revision) return _feature;
            object value;
            if (features.TryGetValue(typeof(T), out value))
            {
                _feature = (T)value;
            }
            else
            {
                _feature = default(T);
            }
            _revision = features.Revision;
            return _feature;
        }

        public T Update(IFeatureCollection features, T feature)
        {
            features[typeof(T)] = _feature = feature;
            _revision = features.Revision;
            return feature;
        }
    }

DefaultHttpContext 有此方法

     public override void SetFeature(Type type, object instance)
        {
            _features[type] = instance;
        }

 当调用SetFeature方法的时候 version 会增加1 导致Fetch 获取到新的对象。

 上述代码说明Feature都是可以后面自己实现来替换的这些feature有:

	//HttpContext 中的
        private FeatureReference<IItemsFeature> _items;
        private FeatureReference<IServiceProvidersFeature> _serviceProviders;
        private FeatureReference<IHttpAuthenticationFeature> _authentication;
        private FeatureReference<IHttpRequestLifetimeFeature> _lifetime;
        private FeatureReference<IHttpWebSocketFeature> _webSockets;
        private FeatureReference<ISessionFeature> _session;

       //HttpRequest中的
        private FeatureReference<IHttpRequestFeature> _request = FeatureReference<IHttpRequestFeature>.Default;
        private FeatureReference<IHttpConnectionFeature> _connection = FeatureReference<IHttpConnectionFeature>.Default;
        private FeatureReference<IHttpClientCertificateFeature> _clientCertificate = FeatureReference<IHttpClientCertificateFeature>.Default;
        private FeatureReference<IQueryFeature> _query = FeatureReference<IQueryFeature>.Default;
        private FeatureReference<IFormFeature> _form = FeatureReference<IFormFeature>.Default;
        private FeatureReference<IRequestCookiesFeature> _cookies = FeatureReference<IRequestCookiesFeature>.Default;
        //--HttpResponse 中的
        private FeatureReference<IHttpResponseFeature> _response = FeatureReference<IHttpResponseFeature>.Default;
        private FeatureReference<IResponseCookiesFeature> _cookies = FeatureReference<IResponseCookiesFeature>.Default;
        private FeatureReference<IHttpAuthenticationFeature> _authentication = FeatureReference<IHttpAuthenticationFeature>.Default;