Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Configuration / HandlerFactoryCache.cs / 1305376 / HandlerFactoryCache.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Config related classes for HttpApplication */ namespace System.Web.Configuration { using System; using System.Configuration; using System.Web.Compilation; using System.Security; using System.Security.Permissions; /* * An object to cache a factory */ internal class HandlerFactoryCache { private IHttpHandlerFactory _factory; internal HandlerFactoryCache(string type) { Object instance = Create(type); // make sure it is either handler or handler factory if (instance is IHttpHandler) { // create bogus factory around it _factory = new HandlerFactoryWrapper((IHttpHandler)instance, GetHandlerType(type)); } else if (instance is IHttpHandlerFactory) { _factory = (IHttpHandlerFactory)instance; } else { throw new HttpException(SR.GetString(SR.Type_not_factory_or_handler, instance.GetType().FullName)); } } internal HandlerFactoryCache(HttpHandlerAction mapping) { Object instance = mapping.Create(); // make sure it is either handler or handler factory if (instance is IHttpHandler) { // create bogus factory around it _factory = new HandlerFactoryWrapper((IHttpHandler)instance, GetHandlerType(mapping)); } else if (instance is IHttpHandlerFactory) { _factory = (IHttpHandlerFactory)instance; } else { throw new HttpException(SR.GetString(SR.Type_not_factory_or_handler, instance.GetType().FullName)); } } internal IHttpHandlerFactory Factory { get { return _factory; } } // Dev10 732000: In a homogenous AppDomain, it is necessary to assert FileIoPermission to load types outside // the AppDomain's grant set. [FileIOPermission(SecurityAction.Assert, AllFiles = FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery)] private Type GetTypeWithAssert(string type) { return BuildManager.GetType(type, throwOnError: true, ignoreCase: false); } internal Type GetHandlerType( HttpHandlerAction handlerAction ) { // HACKHACK: for now, let uncreatable types through and error later (for .soap factory) // This design should change - developers will want to know immediately // when they misspell a type Type t = GetTypeWithAssert(handlerAction.Type); // throw for bad types in deferred case if (!ConfigUtil.IsTypeHandlerOrFactory(t)) throw new ConfigurationErrorsException(SR.GetString(SR.Type_not_factory_or_handler, handlerAction.Type), handlerAction.ElementInformation.Source, handlerAction.ElementInformation.LineNumber); return t; } internal Type GetHandlerType(string type) { // HACKHACK: for now, let uncreatable types through and error later (for .soap factory) // This design should change - developers will want to know immediately // when they misspell a type Type t = GetTypeWithAssert(type); HttpRuntime.FailIfNoAPTCABit(t, null, null); // throw for bad types in deferred case if (!ConfigUtil.IsTypeHandlerOrFactory(t)) throw new ConfigurationErrorsException(SR.GetString(SR.Type_not_factory_or_handler, type)); return t; } internal object Create(string type) { // HACKHACK: for now, let uncreatable types through and error later (for .soap factory) // This design should change - developers will want to know immediately // when they misspell a type return HttpRuntime.CreateNonPublicInstance(GetHandlerType(type)); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Config related classes for HttpApplication */ namespace System.Web.Configuration { using System; using System.Configuration; using System.Web.Compilation; using System.Security; using System.Security.Permissions; /* * An object to cache a factory */ internal class HandlerFactoryCache { private IHttpHandlerFactory _factory; internal HandlerFactoryCache(string type) { Object instance = Create(type); // make sure it is either handler or handler factory if (instance is IHttpHandler) { // create bogus factory around it _factory = new HandlerFactoryWrapper((IHttpHandler)instance, GetHandlerType(type)); } else if (instance is IHttpHandlerFactory) { _factory = (IHttpHandlerFactory)instance; } else { throw new HttpException(SR.GetString(SR.Type_not_factory_or_handler, instance.GetType().FullName)); } } internal HandlerFactoryCache(HttpHandlerAction mapping) { Object instance = mapping.Create(); // make sure it is either handler or handler factory if (instance is IHttpHandler) { // create bogus factory around it _factory = new HandlerFactoryWrapper((IHttpHandler)instance, GetHandlerType(mapping)); } else if (instance is IHttpHandlerFactory) { _factory = (IHttpHandlerFactory)instance; } else { throw new HttpException(SR.GetString(SR.Type_not_factory_or_handler, instance.GetType().FullName)); } } internal IHttpHandlerFactory Factory { get { return _factory; } } // Dev10 732000: In a homogenous AppDomain, it is necessary to assert FileIoPermission to load types outside // the AppDomain's grant set. [FileIOPermission(SecurityAction.Assert, AllFiles = FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery)] private Type GetTypeWithAssert(string type) { return BuildManager.GetType(type, throwOnError: true, ignoreCase: false); } internal Type GetHandlerType( HttpHandlerAction handlerAction ) { // HACKHACK: for now, let uncreatable types through and error later (for .soap factory) // This design should change - developers will want to know immediately // when they misspell a type Type t = GetTypeWithAssert(handlerAction.Type); // throw for bad types in deferred case if (!ConfigUtil.IsTypeHandlerOrFactory(t)) throw new ConfigurationErrorsException(SR.GetString(SR.Type_not_factory_or_handler, handlerAction.Type), handlerAction.ElementInformation.Source, handlerAction.ElementInformation.LineNumber); return t; } internal Type GetHandlerType(string type) { // HACKHACK: for now, let uncreatable types through and error later (for .soap factory) // This design should change - developers will want to know immediately // when they misspell a type Type t = GetTypeWithAssert(type); HttpRuntime.FailIfNoAPTCABit(t, null, null); // throw for bad types in deferred case if (!ConfigUtil.IsTypeHandlerOrFactory(t)) throw new ConfigurationErrorsException(SR.GetString(SR.Type_not_factory_or_handler, type)); return t; } internal object Create(string type) { // HACKHACK: for now, let uncreatable types through and error later (for .soap factory) // This design should change - developers will want to know immediately // when they misspell a type return HttpRuntime.CreateNonPublicInstance(GetHandlerType(type)); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DefaultPrintController.cs
- VectorConverter.cs
- MetadataCache.cs
- _SslState.cs
- RuleSet.cs
- AmbientLight.cs
- UnitySerializationHolder.cs
- ConfigurationErrorsException.cs
- SqlConnectionHelper.cs
- KnownBoxes.cs
- rsa.cs
- NonPrimarySelectionGlyph.cs
- Vector3D.cs
- WebPartZoneCollection.cs
- GroupItemAutomationPeer.cs
- XmlQueryTypeFactory.cs
- HttpRequestTraceRecord.cs
- BaseTemplateCodeDomTreeGenerator.cs
- DateTimeConstantAttribute.cs
- CustomErrorsSection.cs
- InternalPermissions.cs
- arc.cs
- Executor.cs
- WebServiceParameterData.cs
- Operand.cs
- SoapSchemaExporter.cs
- EventMappingSettingsCollection.cs
- TypeConverterMarkupExtension.cs
- MethodRental.cs
- ConfigXmlCDataSection.cs
- RouteItem.cs
- OleDbDataReader.cs
- OleAutBinder.cs
- ThreadAttributes.cs
- MorphHelper.cs
- XmlWrappingWriter.cs
- ImageCodecInfo.cs
- Cell.cs
- DelegatingHeader.cs
- CodeEventReferenceExpression.cs
- IntegerValidator.cs
- WebBaseEventKeyComparer.cs
- EntityTypeBase.cs
- NavigationProperty.cs
- XmlSequenceWriter.cs
- BasePropertyDescriptor.cs
- EntityTemplateFactory.cs
- PersonalizationStateQuery.cs
- ObfuscateAssemblyAttribute.cs
- AssemblyName.cs
- TableMethodGenerator.cs
- MachineKeyConverter.cs
- CultureSpecificCharacterBufferRange.cs
- MatrixTransform3D.cs
- SimpleHandlerFactory.cs
- SystemColors.cs
- ExtensibleClassFactory.cs
- TextViewSelectionProcessor.cs
- KeyConstraint.cs
- ValueConversionAttribute.cs
- OrderedDictionaryStateHelper.cs
- UIntPtr.cs
- ComPersistableTypeElement.cs
- EpmSyndicationContentDeSerializer.cs
- DataConnectionHelper.cs
- latinshape.cs
- EmptyCollection.cs
- DesignBindingEditor.cs
- SmtpException.cs
- FormsAuthenticationEventArgs.cs
- DataSourceProvider.cs
- cache.cs
- HttpListenerRequestUriBuilder.cs
- MailMessage.cs
- XPathNode.cs
- PluralizationService.cs
- ParallelTimeline.cs
- XmlNamespaceManager.cs
- safemediahandle.cs
- OutOfMemoryException.cs
- MatrixStack.cs
- RangeValidator.cs
- SectionXmlInfo.cs
- BindingManagerDataErrorEventArgs.cs
- Table.cs
- CompositeControl.cs
- ServiceDescription.cs
- HashMembershipCondition.cs
- MemberMaps.cs
- FunctionDefinition.cs
- MenuEventArgs.cs
- CustomTrackingQuery.cs
- basevalidator.cs
- MatchAllMessageFilter.cs
- DoubleAverageAggregationOperator.cs
- SymLanguageType.cs
- CheckPair.cs
- AdapterDictionary.cs
- Parser.cs
- EmptyStringExpandableObjectConverter.cs