Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / ndp / fx / src / xsp / System / Web / Configuration / HandlerFactoryCache.cs / 2 / 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; /* * 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; } } 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 = BuildManager.GetType(handlerAction.Type, true /*throwOnFail*/, false /*ignoreCase*/); // 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 = BuildManager.GetType(type, true /*throwOnFail*/, false /*ignoreCase*/); 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. //------------------------------------------------------------------------------ //// 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; /* * 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; } } 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 = BuildManager.GetType(handlerAction.Type, true /*throwOnFail*/, false /*ignoreCase*/); // 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 = BuildManager.GetType(type, true /*throwOnFail*/, false /*ignoreCase*/); 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MetroSerializationManager.cs
- DataRecordInfo.cs
- COM2PictureConverter.cs
- TreeNodeCollection.cs
- SingleStorage.cs
- versioninfo.cs
- DirectionalAction.cs
- DateTimeParse.cs
- unsafenativemethodstextservices.cs
- TempFiles.cs
- PeerObject.cs
- ColumnWidthChangedEvent.cs
- CheckBox.cs
- EventWaitHandleSecurity.cs
- securitycriticaldataformultiplegetandset.cs
- WinCategoryAttribute.cs
- Permission.cs
- ECDiffieHellmanCng.cs
- XmlQualifiedNameTest.cs
- Set.cs
- OleDbRowUpdatingEvent.cs
- StylusDevice.cs
- WindowsGraphics.cs
- SystemIPGlobalStatistics.cs
- SdlChannelSink.cs
- PointLightBase.cs
- ErrorFormatterPage.cs
- SHA512Cng.cs
- CodeDirectionExpression.cs
- HandleValueEditor.cs
- ToggleProviderWrapper.cs
- SQLDecimal.cs
- TargetInvocationException.cs
- InputScope.cs
- WebRequest.cs
- ZipIOExtraFieldElement.cs
- Model3DCollection.cs
- UnsafeNetInfoNativeMethods.cs
- MemoryPressure.cs
- XmlQueryContext.cs
- While.cs
- BaseAddressElementCollection.cs
- XmlDesignerDataSourceView.cs
- SecurityProtocol.cs
- NavigationWindow.cs
- NamedElement.cs
- WebPartTransformer.cs
- Interlocked.cs
- SqlCacheDependencySection.cs
- SharedHttpTransportManager.cs
- InheritanceRules.cs
- MsmqInputChannelListenerBase.cs
- ChangePassword.cs
- TerminatorSinks.cs
- ModelVisual3D.cs
- DataGrid.cs
- ElementsClipboardData.cs
- ItemList.cs
- TranslateTransform.cs
- HttpModuleCollection.cs
- ToolStripHighContrastRenderer.cs
- ReadOnlyHierarchicalDataSource.cs
- TextViewDesigner.cs
- TargetConverter.cs
- WorkflowMarkupSerializationProvider.cs
- BrowserCapabilitiesFactory.cs
- SubpageParagraph.cs
- ClientSettingsProvider.cs
- StylusPlugInCollection.cs
- HMACSHA256.cs
- ObjectSet.cs
- Hashtable.cs
- LayoutDump.cs
- SudsParser.cs
- KeyValuePairs.cs
- TargetParameterCountException.cs
- EventLogPermissionEntry.cs
- CfgParser.cs
- DesignerAutoFormatCollection.cs
- ExpressionCopier.cs
- SourceInterpreter.cs
- ListViewContainer.cs
- SendKeys.cs
- WindowsSysHeader.cs
- GuidConverter.cs
- MetadataItemCollectionFactory.cs
- WebPartTransformer.cs
- JavaScriptSerializer.cs
- ActivationArguments.cs
- listitem.cs
- TaskExceptionHolder.cs
- DefaultPrintController.cs
- CultureInfo.cs
- TableRowCollection.cs
- XmlReflectionImporter.cs
- BaseHashHelper.cs
- ToolStripSplitStackLayout.cs
- ProcessInfo.cs
- XmlAutoDetectWriter.cs
- RTLAwareMessageBox.cs