1 // 2 // System.Runtime.Remoting.Contexts.ContextAttribute.cs 3 // 4 // Author: 5 // Miguel de Icaza (miguel@ximian.com) 6 // 7 // (C) Ximian, Inc. http://www.ximian.com 8 // 9 10 // 11 // Copyright (C) 2004 Novell, Inc (http://www.novell.com) 12 // 13 // Permission is hereby granted, free of charge, to any person obtaining 14 // a copy of this software and associated documentation files (the 15 // "Software"), to deal in the Software without restriction, including 16 // without limitation the rights to use, copy, modify, merge, publish, 17 // distribute, sublicense, and/or sell copies of the Software, and to 18 // permit persons to whom the Software is furnished to do so, subject to 19 // the following conditions: 20 // 21 // The above copyright notice and this permission notice shall be 22 // included in all copies or substantial portions of the Software. 23 // 24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 31 // 32 33 using System.Runtime.Remoting.Activation; 34 using System.Collections; 35 36 namespace System.Runtime.Remoting.Contexts { 37 38 [AttributeUsage (AttributeTargets.Class)] 39 [Serializable] 40 [System.Runtime.InteropServices.ComVisible (true)] 41 public class ContextAttribute : Attribute, IContextAttribute, IContextProperty { 42 protected string AttributeName; 43 ContextAttribute(string name)44 public ContextAttribute (string name) 45 { 46 AttributeName = name; 47 } 48 49 public virtual string Name { 50 get { 51 return AttributeName; 52 } 53 } 54 Equals(object o)55 public override bool Equals (object o) 56 { 57 if (o == null) 58 return false; 59 60 if (!(o is ContextAttribute)) 61 return false; 62 63 ContextAttribute ca = (ContextAttribute) o; 64 65 if (ca.AttributeName != AttributeName) 66 return false; 67 68 return true; 69 } 70 Freeze(Context newContext)71 public virtual void Freeze (Context newContext) 72 { 73 } 74 GetHashCode()75 public override int GetHashCode () 76 { 77 if (AttributeName == null) 78 return 0; 79 80 return AttributeName.GetHashCode (); 81 } 82 83 /// <summary> 84 /// Adds the current context property to the IConstructionCallMessage 85 /// </summary> GetPropertiesForNewContext(IConstructionCallMessage ctorMsg)86 public virtual void GetPropertiesForNewContext (IConstructionCallMessage ctorMsg) 87 { 88 if (ctorMsg == null) 89 throw new ArgumentNullException ("ctorMsg"); 90 91 IList list = ctorMsg.ContextProperties; 92 93 list.Add (this); 94 } 95 96 // <summary> 97 // True whether the context arguments satisfies the requirements 98 // of the current context. 99 // </summary> IsContextOK(Context ctx, IConstructionCallMessage ctorMsg)100 public virtual bool IsContextOK (Context ctx, IConstructionCallMessage ctorMsg) 101 { 102 if (ctorMsg == null) 103 throw new ArgumentNullException ("ctorMsg"); 104 if (ctx == null) 105 throw new ArgumentNullException ("ctx"); 106 107 if (!ctorMsg.ActivationType.IsContextful) 108 return true; 109 110 IContextProperty p = ctx.GetProperty (AttributeName); 111 if (p == null) 112 return false; 113 114 if (this != p) 115 return false; 116 117 return true; 118 } 119 IsNewContextOK(Context newCtx)120 public virtual bool IsNewContextOK (Context newCtx) 121 { 122 return true; 123 } 124 } 125 } 126