Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MetaModel.cs
- HtmlTable.cs
- DbConnectionInternal.cs
- ReadOnlyDataSourceView.cs
- JsonWriter.cs
- CodeTypeParameterCollection.cs
- CodeVariableReferenceExpression.cs
- XPathPatternParser.cs
- CodeTypeParameter.cs
- ContextConfiguration.cs
- SchemaManager.cs
- PatternMatcher.cs
- SQLInt16.cs
- BuildResultCache.cs
- WeakEventTable.cs
- EntityCommandDefinition.cs
- DecimalConstantAttribute.cs
- TypeDescriptorContext.cs
- EventProviderWriter.cs
- DefaultCommandExtensionCallback.cs
- WinCategoryAttribute.cs
- ReadOnlyNameValueCollection.cs
- BoundingRectTracker.cs
- PeerName.cs
- DebugView.cs
- Win32Native.cs
- EncoderExceptionFallback.cs
- Helper.cs
- JulianCalendar.cs
- ComponentDispatcher.cs
- SystemException.cs
- PropertyCollection.cs
- PropertyGrid.cs
- LinkConverter.cs
- Stream.cs
- DocumentPageViewAutomationPeer.cs
- KnownBoxes.cs
- SqlTriggerContext.cs
- MiniMapControl.xaml.cs
- SqlConnectionManager.cs
- LinqDataSourceDeleteEventArgs.cs
- RestHandlerFactory.cs
- EditingCommands.cs
- StorageRoot.cs
- DPTypeDescriptorContext.cs
- CommandConverter.cs
- AutomationAttributeInfo.cs
- ScanQueryOperator.cs
- AbsoluteQuery.cs
- SecurityRuntime.cs
- Rules.cs
- CodeDefaultValueExpression.cs
- DataGridViewRowPostPaintEventArgs.cs
- ApplyTemplatesAction.cs
- DesignerAdRotatorAdapter.cs
- ArithmeticLiteral.cs
- ColorConverter.cs
- PerformanceCounterPermissionEntry.cs
- XLinq.cs
- XmlDictionaryReaderQuotas.cs
- ToolStripItemTextRenderEventArgs.cs
- BaseCollection.cs
- Lookup.cs
- ComponentEditorForm.cs
- WebPartAddingEventArgs.cs
- SoapTypeAttribute.cs
- TraceContext.cs
- TransformerInfoCollection.cs
- OperatingSystem.cs
- TextEditorSpelling.cs
- FontStretches.cs
- ValidationManager.cs
- Publisher.cs
- FloaterParagraph.cs
- InheritanceContextHelper.cs
- UriExt.cs
- XmlSigningNodeWriter.cs
- IOThreadScheduler.cs
- AdapterDictionary.cs
- Automation.cs
- VSWCFServiceContractGenerator.cs
- ProcessHostServerConfig.cs
- DependencyPropertyHelper.cs
- ParagraphResult.cs
- DelegatingTypeDescriptionProvider.cs
- StyleCollection.cs
- DecimalKeyFrameCollection.cs
- ToolboxDataAttribute.cs
- StringResourceManager.cs
- CompoundFileReference.cs
- PointAnimation.cs
- BamlRecords.cs
- InternalControlCollection.cs
- Vector3DIndependentAnimationStorage.cs
- LoadWorkflowByInstanceKeyCommand.cs
- AuthenticationModuleElement.cs
- ErrorWrapper.cs
- SHA1Managed.cs
- SQLDateTime.cs
- DrawingGroup.cs