Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Runtime / Remoting / ObjectHandle.cs / 1305376 / ObjectHandle.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: ObjectHandle ** ** ** ObjectHandle wraps object references. A Handle allows a ** marshal by value object to be returned through an ** indirection allowing the caller to control when the ** object is loaded into their domain. ** ** ===========================================================*/ namespace System.Runtime.Remoting{ using System; using System.Security.Permissions; using System.Runtime.InteropServices; using System.Runtime.Remoting; #if FEATURE_REMOTING using System.Runtime.Remoting.Activation; using System.Runtime.Remoting.Lifetime; #endif // We duplicate this type because we need to inherit from MarshalByRefObject iff FEATURE_REMOTING is // defined. It would be nice in the future to just wrap the class definition in an ifdef but right // now this causes problems with Thinner and causes it to generate invalid source. #if FEATURE_REMOTING [ClassInterface(ClassInterfaceType.AutoDual)] [System.Runtime.InteropServices.ComVisible(true)] public class ObjectHandle: MarshalByRefObject, IObjectHandle { private Object WrappedObject; private ObjectHandle() { } public ObjectHandle(Object o) { WrappedObject = o; } public Object Unwrap() { return WrappedObject; } // ObjectHandle has a finite lifetime. For now the default // lifetime is being used, this can be changed in this method to // specify a custom lifetime. #if FEATURE_REMOTING [System.Security.SecurityCritical] // auto-generated_required public override Object InitializeLifetimeService() { BCLDebug.Trace("REMOTE", "ObjectHandle.InitializeLifetimeService"); // // If the wrapped object has implemented InitializeLifetimeService to return null, // we don't want to go to the base class (which will result in a lease being // requested from the MarshalByRefObject, which starts up the LeaseManager, // which starts up the ThreadPool, adding three threads to the process. // We check if the wrapped object is a MarshalByRef object, and call InitializeLifetimeServices on it // and if it returns null, we return null. Otherwise we fall back to the old behavior. // MarshalByRefObject mbr = WrappedObject as MarshalByRefObject; if (mbr != null) { Object o = mbr.InitializeLifetimeService(); if (o == null) return null; } ILease lease = (ILease)base.InitializeLifetimeService(); return lease; } #endif // FEATURE_REMOTING } #else // !FEATURE_REMOTING [ClassInterface(ClassInterfaceType.AutoDual)] [System.Runtime.InteropServices.ComVisible(true)] public class ObjectHandle : IObjectHandle { private Object WrappedObject; private ObjectHandle() { } public ObjectHandle(Object o) { WrappedObject = o; } public Object Unwrap() { return WrappedObject; } #if FEATURE_REMOTING [System.Security.SecurityCritical] // auto-generated_required public override Object InitializeLifetimeService() { BCLDebug.Trace("REMOTE", "ObjectHandle.InitializeLifetimeService"); // // If the wrapped object has implemented InitializeLifetimeService to return null, // we don't want to go to the base class (which will result in a lease being // requested from the MarshalByRefObject, which starts up the LeaseManager, // which starts up the ThreadPool, adding three threads to the process. // We check if the wrapped object is a MarshalByRef object, and call InitializeLifetimeServices on it // and if it returns null, we return null. Otherwise we fall back to the old behavior. // MarshalByRefObject mbr = WrappedObject as MarshalByRefObject; if (mbr != null) { Object o = mbr.InitializeLifetimeService(); if (o == null) return null; } ILease lease = (ILease)base.InitializeLifetimeService(); return lease; } #endif // FEATURE_REMOTING } #endif // !FEATURE_REMOTING } // 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
- CapabilitiesRule.cs
- HttpChannelFactory.cs
- RolePrincipal.cs
- HttpCacheVaryByContentEncodings.cs
- ToolStripItemEventArgs.cs
- ControlPropertyNameConverter.cs
- StrokeCollectionDefaultValueFactory.cs
- DbSetClause.cs
- BaseWebProxyFinder.cs
- HitTestResult.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- OleDbRowUpdatingEvent.cs
- PropertyGeneratedEventArgs.cs
- SiblingIterators.cs
- TTSEvent.cs
- ExpressionNode.cs
- DataViewManager.cs
- ReadWriteSpinLock.cs
- DataListItem.cs
- IndexExpression.cs
- DrawingGroupDrawingContext.cs
- ByteAnimation.cs
- XmlNotation.cs
- BuiltInExpr.cs
- ActiveXSite.cs
- AnonymousIdentificationSection.cs
- DragDrop.cs
- TextElementEnumerator.cs
- IPHostEntry.cs
- DBCommandBuilder.cs
- TextServicesLoader.cs
- ConfigDefinitionUpdates.cs
- SelectedCellsChangedEventArgs.cs
- SqlLiftIndependentRowExpressions.cs
- DictionarySectionHandler.cs
- PageVisual.cs
- FreezableDefaultValueFactory.cs
- Monitor.cs
- TypeUtil.cs
- XmlSchemaException.cs
- RegexCapture.cs
- MachinePropertyVariants.cs
- XsltLibrary.cs
- User.cs
- PointAnimationUsingKeyFrames.cs
- BitmapVisualManager.cs
- TabControlToolboxItem.cs
- ResourceAssociationType.cs
- CodeDomSerializer.cs
- Funcletizer.cs
- MSAANativeProvider.cs
- Paragraph.cs
- CompositionDesigner.cs
- AlgoModule.cs
- EdmProviderManifest.cs
- EntityChangedParams.cs
- EpmSourceTree.cs
- Viewport3DAutomationPeer.cs
- QilIterator.cs
- PageHandlerFactory.cs
- OrthographicCamera.cs
- DocumentsTrace.cs
- TypeSystemProvider.cs
- TraceInternal.cs
- TouchesCapturedWithinProperty.cs
- ValuePatternIdentifiers.cs
- ValidationSummary.cs
- FactoryGenerator.cs
- IdentityHolder.cs
- XmlNullResolver.cs
- COM2AboutBoxPropertyDescriptor.cs
- XdrBuilder.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- wgx_sdk_version.cs
- EventPropertyMap.cs
- Rotation3D.cs
- ObjectCloneHelper.cs
- QueryTask.cs
- WebPartTransformer.cs
- SurrogateEncoder.cs
- InputElement.cs
- DataGridColumnDropSeparator.cs
- DoubleConverter.cs
- AmbientValueAttribute.cs
- SerializableReadOnlyDictionary.cs
- GlobalId.cs
- PlaceHolder.cs
- EndpointAddress10.cs
- AppDomainShutdownMonitor.cs
- EntityDataSourceWrapper.cs
- BaseCollection.cs
- Graph.cs
- SID.cs
- sqlser.cs
- MemberBinding.cs
- DataGridRow.cs
- EndpointInstanceProvider.cs
- ListBindingConverter.cs
- ExtendedProtectionPolicyTypeConverter.cs
- ResizeGrip.cs