Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Runtime / Remoting / ContextProperty.cs / 1305376 / ContextProperty.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** File: ContextProperty.cs ** ** A contextProperty is a name-value pair holding the property ** name and the object representing the property in a context. ** An array of these is returned by Context::GetContextProperties() ** ** ** ===========================================================*/ namespace System.Runtime.Remoting.Contexts { using System; using System.Threading; using System.Reflection; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.Remoting.Activation; using System.Security.Permissions; using System.Diagnostics.Contracts; ///[System.Security.SecurityCritical] // auto-generated_required [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.Infrastructure)] [System.Runtime.InteropServices.ComVisible(true)] public class ContextProperty { internal String _name; // property name internal Object _property; // property object /// public virtual String Name { get { return _name; } } /// public virtual Object Property { get { return _property; } } /* can't create outside the package */ internal ContextProperty(String name, Object prop) { _name = name; _property = prop; } } // The IContextAttribute interface is implemented by attribute classes. // The attributes contribute a property which resides in a context and // enforces a specific policy for the objects created in that context. /// [System.Runtime.InteropServices.ComVisible(true)] public interface IContextAttribute { /// [System.Security.SecurityCritical] // auto-generated_required bool IsContextOK(Context ctx, IConstructionCallMessage msg); /// [System.Security.SecurityCritical] // auto-generated_required void GetPropertiesForNewContext(IConstructionCallMessage msg); } // This interface is exposed by the property contributed to a context // by an attribute. By default, it is also implemented by the ContextAttribute // base class which every attribute class must extend from. /// [System.Runtime.InteropServices.ComVisible(true)] public interface IContextProperty { /// // This is the name under which the property will be added // to the {name,property} table in a context. String Name { [System.Security.SecurityCritical] // auto-generated_required get; } /// // After forming the newCtx, we ask each property if it is happy // with the context. We expect most implementations to say yes. [System.Security.SecurityCritical] // auto-generated_required bool IsNewContextOK(Context newCtx); /// // New method. All properties are notified when the context // they are in is frozen. [System.Security.SecurityCritical] // auto-generated_required void Freeze(Context newContext); } /// [System.Runtime.InteropServices.ComVisible(true)] public interface IContextPropertyActivator { /// // This method lets properties in the current context have a say in // whether an activation may be done 'here' or not. [System.Security.SecurityCritical] // auto-generated_required bool IsOKToActivate(IConstructionCallMessage msg); /// [System.Security.SecurityCritical] // auto-generated_required void CollectFromClientContext(IConstructionCallMessage msg); /// [System.Security.SecurityCritical] // auto-generated_required bool DeliverClientContextToServerContext(IConstructionCallMessage msg); /// [System.Security.SecurityCritical] // auto-generated_required void CollectFromServerContext(IConstructionReturnMessage msg); /// [System.Security.SecurityCritical] // auto-generated_required bool DeliverServerContextToClientContext(IConstructionReturnMessage msg); } // All context attribute classes must extend from this base class. // This class provides the base implementations which the derived // classes are free to over-ride. The base implementations provide // the default answers to various questions. /// [System.Security.SecurityCritical] // auto-generated_required [Serializable] [AttributeUsage(AttributeTargets.Class)] [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.Infrastructure)] [System.Runtime.InteropServices.ComVisible(true)] public class ContextAttribute : Attribute, IContextAttribute, IContextProperty { /// protected String AttributeName; // The derived class must call: base(name); /// public ContextAttribute(String name) { AttributeName = name; } // IContextPropery::Name // Default implementation provides AttributeName as the property name. /// public virtual String Name { [System.Security.SecurityCritical] get { return AttributeName; } } // IContextProperty::IsNewContextOK /// [System.Security.SecurityCritical] public virtual bool IsNewContextOK(Context newCtx) { // This will be called before entering the newCtx // Default implementation says OK. return true; } // IContextProperty::Freeze // Default implementation does nothing /// [System.Security.SecurityCritical] public virtual void Freeze(Context newContext) { BCLDebug.Log("ContextAttribute::ContextProperty::Freeze"+ " for context " + newContext ); } // Object::Equals // Default implementation just compares the names /// [System.Security.SecuritySafeCritical] // overrides public transparent method public override bool Equals(Object o) { IContextProperty prop = o as IContextProperty; return (null != prop) && AttributeName.Equals(prop.Name); } /// [System.Security.SecuritySafeCritical] // overrides public transparent method public override int GetHashCode() { return this.AttributeName.GetHashCode(); } // IContextAttribute::IsContextOK // Default calls Object::Equals on the property and does not // bother with the ctorMsg. /// [System.Security.SecurityCritical] // auto-generated public virtual bool IsContextOK( Context ctx, IConstructionCallMessage ctorMsg) { if (ctx == null) throw new ArgumentNullException("ctx"); if (ctorMsg == null) throw new ArgumentNullException("ctorMsg"); Contract.EndContractBlock(); Contract.Assert(ctorMsg.ActivationType.IsMarshalByRef, "Activation on a non MarshalByRef object"); if (!ctorMsg.ActivationType.IsContextful) { return true; } Object prop = ctx.GetProperty(AttributeName); if ((prop!=null) && (Equals(prop))) { return true; } return false; } // IContextAttribute::GetPropertiesForNewContext // Default adds the attribute itself w/o regard to the current // list of properties /// [System.Security.SecurityCritical] // auto-generated public virtual void GetPropertiesForNewContext( IConstructionCallMessage ctorMsg) { if (ctorMsg == null) throw new ArgumentNullException("ctorMsg"); Contract.EndContractBlock(); ctorMsg.ContextProperties.Add((IContextProperty)this); } } #if SIMPLEXAACTIVATION /// [AttributeUsage(AttributeTargets.Class)] [System.Runtime.InteropServices.ComVisible(true)] public class new_appdomain : ContextAttribute { internal static int _domain_no = 0; /// public new_appdomain() : base("new_appdomain") {} /// [System.Runtime.InteropServices.ComVisible(true)] public override bool IsContextOK(Context ctx, IConstructionCallMessage msg) { return false; } /// [System.Runtime.InteropServices.ComVisible(true)] public override void GetPropertiesForNewContext(IConstructionCallMessage ctorMsg) { ctorMsg.GetProperties()["__new_appdomain"] = true; } /// [System.Runtime.InteropServices.ComVisible(true)] public static IConstructionReturnMessage DoSimpleXADActivation(IConstructionCallMessage msg) { int domain_no = Interlocked.Increment(ref _domain_no); AppDomain ad = AppDomain.CreateDomain("AutoDomain #" + domain_no, null, null); activator a = (activator) (ad.CreateInstance(null, typeof(activator).FullName)).Unwrap(); return a.Activate(msg); } /// [System.Runtime.InteropServices.ComVisible(true)] public class activator : MarshalByRefObject, IActivator { /// [System.Runtime.InteropServices.ComVisible(true)] public IConstructionReturnMessage Activate(IConstructionCallMessage msg) { return RemotingServices.DoCrossContextActivation(msg); } /// [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable public void LoadAssembly(AssemblyName an) { StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; Assembly a = Assembly.InternalLoad(an, false, null, ref stackMark); if (a == null) { throw new RemotingException( String.Format( Environment.GetResourceString( "Remoting_AssemblyLoadFailed"), an)); } } } } /// [new_appdomain] [System.Runtime.InteropServices.ComVisible(true)] public class MBR : MarshalByRefObject { /// public String MyAppDomain() { return Thread.GetDomain().GetFriendlyName(); } } /// [new_appdomain] [System.Runtime.InteropServices.ComVisible(true)] public class CB : ContextBoundObject { /// public String MyAppDomain() { return Thread.GetDomain().GetFriendlyName(); } } #endif } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** File: ContextProperty.cs ** ** A contextProperty is a name-value pair holding the property ** name and the object representing the property in a context. ** An array of these is returned by Context::GetContextProperties() ** ** ** ===========================================================*/ namespace System.Runtime.Remoting.Contexts { using System; using System.Threading; using System.Reflection; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.Remoting.Activation; using System.Security.Permissions; using System.Diagnostics.Contracts; /// [System.Security.SecurityCritical] // auto-generated_required [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.Infrastructure)] [System.Runtime.InteropServices.ComVisible(true)] public class ContextProperty { internal String _name; // property name internal Object _property; // property object /// public virtual String Name { get { return _name; } } /// public virtual Object Property { get { return _property; } } /* can't create outside the package */ internal ContextProperty(String name, Object prop) { _name = name; _property = prop; } } // The IContextAttribute interface is implemented by attribute classes. // The attributes contribute a property which resides in a context and // enforces a specific policy for the objects created in that context. /// [System.Runtime.InteropServices.ComVisible(true)] public interface IContextAttribute { /// [System.Security.SecurityCritical] // auto-generated_required bool IsContextOK(Context ctx, IConstructionCallMessage msg); /// [System.Security.SecurityCritical] // auto-generated_required void GetPropertiesForNewContext(IConstructionCallMessage msg); } // This interface is exposed by the property contributed to a context // by an attribute. By default, it is also implemented by the ContextAttribute // base class which every attribute class must extend from. /// [System.Runtime.InteropServices.ComVisible(true)] public interface IContextProperty { /// // This is the name under which the property will be added // to the {name,property} table in a context. String Name { [System.Security.SecurityCritical] // auto-generated_required get; } /// // After forming the newCtx, we ask each property if it is happy // with the context. We expect most implementations to say yes. [System.Security.SecurityCritical] // auto-generated_required bool IsNewContextOK(Context newCtx); /// // New method. All properties are notified when the context // they are in is frozen. [System.Security.SecurityCritical] // auto-generated_required void Freeze(Context newContext); } /// [System.Runtime.InteropServices.ComVisible(true)] public interface IContextPropertyActivator { /// // This method lets properties in the current context have a say in // whether an activation may be done 'here' or not. [System.Security.SecurityCritical] // auto-generated_required bool IsOKToActivate(IConstructionCallMessage msg); /// [System.Security.SecurityCritical] // auto-generated_required void CollectFromClientContext(IConstructionCallMessage msg); /// [System.Security.SecurityCritical] // auto-generated_required bool DeliverClientContextToServerContext(IConstructionCallMessage msg); /// [System.Security.SecurityCritical] // auto-generated_required void CollectFromServerContext(IConstructionReturnMessage msg); /// [System.Security.SecurityCritical] // auto-generated_required bool DeliverServerContextToClientContext(IConstructionReturnMessage msg); } // All context attribute classes must extend from this base class. // This class provides the base implementations which the derived // classes are free to over-ride. The base implementations provide // the default answers to various questions. /// [System.Security.SecurityCritical] // auto-generated_required [Serializable] [AttributeUsage(AttributeTargets.Class)] [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.Infrastructure)] [System.Runtime.InteropServices.ComVisible(true)] public class ContextAttribute : Attribute, IContextAttribute, IContextProperty { /// protected String AttributeName; // The derived class must call: base(name); /// public ContextAttribute(String name) { AttributeName = name; } // IContextPropery::Name // Default implementation provides AttributeName as the property name. /// public virtual String Name { [System.Security.SecurityCritical] get { return AttributeName; } } // IContextProperty::IsNewContextOK /// [System.Security.SecurityCritical] public virtual bool IsNewContextOK(Context newCtx) { // This will be called before entering the newCtx // Default implementation says OK. return true; } // IContextProperty::Freeze // Default implementation does nothing /// [System.Security.SecurityCritical] public virtual void Freeze(Context newContext) { BCLDebug.Log("ContextAttribute::ContextProperty::Freeze"+ " for context " + newContext ); } // Object::Equals // Default implementation just compares the names /// [System.Security.SecuritySafeCritical] // overrides public transparent method public override bool Equals(Object o) { IContextProperty prop = o as IContextProperty; return (null != prop) && AttributeName.Equals(prop.Name); } /// [System.Security.SecuritySafeCritical] // overrides public transparent method public override int GetHashCode() { return this.AttributeName.GetHashCode(); } // IContextAttribute::IsContextOK // Default calls Object::Equals on the property and does not // bother with the ctorMsg. /// [System.Security.SecurityCritical] // auto-generated public virtual bool IsContextOK( Context ctx, IConstructionCallMessage ctorMsg) { if (ctx == null) throw new ArgumentNullException("ctx"); if (ctorMsg == null) throw new ArgumentNullException("ctorMsg"); Contract.EndContractBlock(); Contract.Assert(ctorMsg.ActivationType.IsMarshalByRef, "Activation on a non MarshalByRef object"); if (!ctorMsg.ActivationType.IsContextful) { return true; } Object prop = ctx.GetProperty(AttributeName); if ((prop!=null) && (Equals(prop))) { return true; } return false; } // IContextAttribute::GetPropertiesForNewContext // Default adds the attribute itself w/o regard to the current // list of properties /// [System.Security.SecurityCritical] // auto-generated public virtual void GetPropertiesForNewContext( IConstructionCallMessage ctorMsg) { if (ctorMsg == null) throw new ArgumentNullException("ctorMsg"); Contract.EndContractBlock(); ctorMsg.ContextProperties.Add((IContextProperty)this); } } #if SIMPLEXAACTIVATION /// [AttributeUsage(AttributeTargets.Class)] [System.Runtime.InteropServices.ComVisible(true)] public class new_appdomain : ContextAttribute { internal static int _domain_no = 0; /// public new_appdomain() : base("new_appdomain") {} /// [System.Runtime.InteropServices.ComVisible(true)] public override bool IsContextOK(Context ctx, IConstructionCallMessage msg) { return false; } /// [System.Runtime.InteropServices.ComVisible(true)] public override void GetPropertiesForNewContext(IConstructionCallMessage ctorMsg) { ctorMsg.GetProperties()["__new_appdomain"] = true; } /// [System.Runtime.InteropServices.ComVisible(true)] public static IConstructionReturnMessage DoSimpleXADActivation(IConstructionCallMessage msg) { int domain_no = Interlocked.Increment(ref _domain_no); AppDomain ad = AppDomain.CreateDomain("AutoDomain #" + domain_no, null, null); activator a = (activator) (ad.CreateInstance(null, typeof(activator).FullName)).Unwrap(); return a.Activate(msg); } /// [System.Runtime.InteropServices.ComVisible(true)] public class activator : MarshalByRefObject, IActivator { /// [System.Runtime.InteropServices.ComVisible(true)] public IConstructionReturnMessage Activate(IConstructionCallMessage msg) { return RemotingServices.DoCrossContextActivation(msg); } /// [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable public void LoadAssembly(AssemblyName an) { StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; Assembly a = Assembly.InternalLoad(an, false, null, ref stackMark); if (a == null) { throw new RemotingException( String.Format( Environment.GetResourceString( "Remoting_AssemblyLoadFailed"), an)); } } } } /// [new_appdomain] [System.Runtime.InteropServices.ComVisible(true)] public class MBR : MarshalByRefObject { /// public String MyAppDomain() { return Thread.GetDomain().GetFriendlyName(); } } /// [new_appdomain] [System.Runtime.InteropServices.ComVisible(true)] public class CB : ContextBoundObject { /// public String MyAppDomain() { return Thread.GetDomain().GetFriendlyName(); } } #endif } // 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
- RequestCachingSection.cs
- TypefaceCollection.cs
- JapaneseLunisolarCalendar.cs
- RequestStatusBarUpdateEventArgs.cs
- ErrorEventArgs.cs
- FloaterBaseParaClient.cs
- Rfc2898DeriveBytes.cs
- RowCache.cs
- MulticastNotSupportedException.cs
- DoubleLinkListEnumerator.cs
- UriExt.cs
- AutomationPropertyInfo.cs
- SmiSettersStream.cs
- Expander.cs
- webclient.cs
- OpenFileDialog.cs
- Rectangle.cs
- NumericUpDownAccelerationCollection.cs
- CryptoStream.cs
- ExecutionEngineException.cs
- PointCollectionValueSerializer.cs
- CompositeTypefaceMetrics.cs
- WindowsAuthenticationEventArgs.cs
- CodeAttributeDeclaration.cs
- OdbcInfoMessageEvent.cs
- MultipleViewProviderWrapper.cs
- PropertyValueChangedEvent.cs
- ToggleProviderWrapper.cs
- SimpleModelProvider.cs
- CngProvider.cs
- _LocalDataStoreMgr.cs
- DispatchChannelSink.cs
- PathParser.cs
- ProviderUtil.cs
- securestring.cs
- DataListItemCollection.cs
- ContentPosition.cs
- DataBindingCollection.cs
- FileRegion.cs
- ColumnCollection.cs
- ScrollEvent.cs
- Pair.cs
- LogArchiveSnapshot.cs
- StickyNoteAnnotations.cs
- Italic.cs
- EncodingTable.cs
- SuppressMergeCheckAttribute.cs
- ArrayElementGridEntry.cs
- RecognizerInfo.cs
- EditorPartChrome.cs
- RootAction.cs
- TextMessageEncoder.cs
- SQLInt64Storage.cs
- PolicyDesigner.cs
- XmlSchemaSimpleTypeRestriction.cs
- TargetException.cs
- FontWeights.cs
- UserControlCodeDomTreeGenerator.cs
- RoutingChannelExtension.cs
- WebExceptionStatus.cs
- SelectionUIHandler.cs
- KeyValueConfigurationElement.cs
- DesignerVerbCollection.cs
- ListViewGroupItemCollection.cs
- FunctionImportMapping.ReturnTypeRenameMapping.cs
- CharKeyFrameCollection.cs
- XmlQuerySequence.cs
- DynamicMethod.cs
- XmlWhitespace.cs
- KnownTypesHelper.cs
- ConstraintStruct.cs
- ObjectParameterCollection.cs
- RestrictedTransactionalPackage.cs
- HitTestDrawingContextWalker.cs
- SqlEnums.cs
- HighlightComponent.cs
- SoapIncludeAttribute.cs
- ObjectPropertyMapping.cs
- RijndaelManagedTransform.cs
- CssClassPropertyAttribute.cs
- DBSqlParserTableCollection.cs
- RijndaelManaged.cs
- GenericPrincipal.cs
- XmlReturnWriter.cs
- HtmlElementCollection.cs
- SequenceDesignerAccessibleObject.cs
- EventMappingSettings.cs
- DoubleConverter.cs
- TdsParserStateObject.cs
- EntityViewGenerationAttribute.cs
- SynchronizationContext.cs
- StickyNoteAnnotations.cs
- InputLanguageSource.cs
- MemberPathMap.cs
- ElementsClipboardData.cs
- RSAOAEPKeyExchangeFormatter.cs
- SmtpNtlmAuthenticationModule.cs
- JournalEntryStack.cs
- PartitionResolver.cs
- TraceFilter.cs