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
- EtwTrackingParticipant.cs
- ValidatedMobileControlConverter.cs
- MutexSecurity.cs
- ChangeProcessor.cs
- WindowsTitleBar.cs
- CacheAxisQuery.cs
- WriteTimeStream.cs
- COM2PropertyBuilderUITypeEditor.cs
- ExceptionHelpers.cs
- DiscoveryServiceExtension.cs
- DataObjectPastingEventArgs.cs
- XamlClipboardData.cs
- ChangeConflicts.cs
- PropertyMapper.cs
- NetworkInformationException.cs
- mediapermission.cs
- ListViewTableCell.cs
- RegistrySecurity.cs
- CodeIdentifier.cs
- SynchronizingStream.cs
- GeneralTransformGroup.cs
- UIElementParaClient.cs
- PrinterResolution.cs
- ImageIndexConverter.cs
- documentation.cs
- ProfessionalColors.cs
- HtmlInputSubmit.cs
- ReceiveDesigner.xaml.cs
- HtmlCommandAdapter.cs
- OdbcConnectionStringbuilder.cs
- WebPartZoneCollection.cs
- ColorConverter.cs
- RequestCacheManager.cs
- RelAssertionDirectKeyIdentifierClause.cs
- GrammarBuilder.cs
- SelectionProcessor.cs
- Int16Converter.cs
- EFAssociationProvider.cs
- ColorBlend.cs
- SingleSelectRootGridEntry.cs
- BitmapCodecInfoInternal.cs
- NamedPermissionSet.cs
- LiteralControl.cs
- CatalogZoneBase.cs
- XmlTypeMapping.cs
- ResourceAssociationSet.cs
- ToolStripDropTargetManager.cs
- ProcessHostConfigUtils.cs
- RegionData.cs
- Point3DCollectionValueSerializer.cs
- DataColumnChangeEvent.cs
- XmlSchemaImporter.cs
- Simplifier.cs
- StorageEntitySetMapping.cs
- RealProxy.cs
- DelegatedStream.cs
- ConvertersCollection.cs
- Math.cs
- ContextProperty.cs
- HtmlTableCell.cs
- BitmapImage.cs
- DataGridViewColumnHeaderCell.cs
- ComPlusInstanceContextInitializer.cs
- XmlIterators.cs
- WebBrowsableAttribute.cs
- BatchWriter.cs
- DbDataAdapter.cs
- ItemsControl.cs
- TableRowCollection.cs
- Timer.cs
- WindowsListViewSubItem.cs
- ParagraphVisual.cs
- ExpressionEditorAttribute.cs
- ProfileInfo.cs
- OrderByExpression.cs
- x509store.cs
- Itemizer.cs
- EventManager.cs
- ListViewUpdatedEventArgs.cs
- DataGridViewColumnHeaderCell.cs
- FeatureSupport.cs
- MatrixAnimationBase.cs
- OperatorExpressions.cs
- BamlCollectionHolder.cs
- FrameworkTextComposition.cs
- UIElement.cs
- AnyAllSearchOperator.cs
- TagPrefixAttribute.cs
- TrackingMemoryStreamFactory.cs
- BulletedListEventArgs.cs
- SlipBehavior.cs
- ImageAnimator.cs
- Line.cs
- Win32Native.cs
- TimeStampChecker.cs
- WorkflowDefinitionDispenser.cs
- XpsS0ValidatingLoader.cs
- XmlName.cs
- DateTimeUtil.cs
- SingleTagSectionHandler.cs