Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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));
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FontEmbeddingManager.cs
- CacheRequest.cs
- MemberProjectionIndex.cs
- DefaultProxySection.cs
- InvalidAsynchronousStateException.cs
- ScrollViewerAutomationPeer.cs
- DocumentXmlWriter.cs
- DataExpression.cs
- QueryCacheManager.cs
- SqlError.cs
- OletxEnlistment.cs
- NominalTypeEliminator.cs
- PasswordTextNavigator.cs
- AnimationClock.cs
- SafeProcessHandle.cs
- Activity.cs
- DbConnectionStringCommon.cs
- MediaElement.cs
- TextEditor.cs
- KeyTime.cs
- TdsEnums.cs
- NameValueCollection.cs
- WebPartConnection.cs
- OdbcParameter.cs
- Input.cs
- AppSettingsReader.cs
- DataColumnMapping.cs
- GridViewRow.cs
- HttpWebResponse.cs
- SafeViewOfFileHandle.cs
- FlagsAttribute.cs
- AppDomainShutdownMonitor.cs
- ScrollChrome.cs
- securitymgrsite.cs
- QuinticEase.cs
- WebRequestModulesSection.cs
- SyndicationLink.cs
- XmlHierarchicalDataSourceView.cs
- FileResponseElement.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- RubberbandSelector.cs
- DocumentXmlWriter.cs
- AppSecurityManager.cs
- ToolStripSplitButton.cs
- UserNameSecurityTokenAuthenticator.cs
- MSAAEventDispatcher.cs
- Parameter.cs
- _SafeNetHandles.cs
- DbBuffer.cs
- SmiContext.cs
- XmlSchemaSimpleTypeUnion.cs
- securitycriticaldata.cs
- ListViewDataItem.cs
- ProtocolInformationWriter.cs
- Brush.cs
- MsmqHostedTransportConfiguration.cs
- XPathNavigatorKeyComparer.cs
- InvalidComObjectException.cs
- WmlListAdapter.cs
- TimerElapsedEvenArgs.cs
- TableAdapterManagerGenerator.cs
- Literal.cs
- Permission.cs
- AttributeConverter.cs
- DataGridViewCell.cs
- Mapping.cs
- CounterSet.cs
- DrawListViewColumnHeaderEventArgs.cs
- TransformConverter.cs
- SqlCommandSet.cs
- SettingsContext.cs
- OleDbWrapper.cs
- DesignerAttribute.cs
- FormatException.cs
- HwndTarget.cs
- TypeElement.cs
- DialogWindow.cs
- Metafile.cs
- TextFormatterHost.cs
- PropertyNames.cs
- HtmlTable.cs
- BufferedStream.cs
- CryptoApi.cs
- HttpDigestClientElement.cs
- ResourceDictionaryCollection.cs
- AttributeParameterInfo.cs
- DateTimeFormatInfoScanner.cs
- Vector.cs
- UInt64Converter.cs
- TabPage.cs
- GroupQuery.cs
- WebBrowserNavigatingEventHandler.cs
- RegisteredExpandoAttribute.cs
- HandlerFactoryWrapper.cs
- AppDomainManager.cs
- FrameworkElementFactoryMarkupObject.cs
- PartialCachingAttribute.cs
- Solver.cs
- UMPAttributes.cs
- OperationCanceledException.cs