<PackageReference Include="Castle.Core" Version="3.0.0.3001" />

ProxyGenerationOptions

using System; using System.Collections.Generic; using System.Reflection.Emit; using System.Runtime.Serialization; using System.Security; namespace Castle.DynamicProxy { [Serializable] public class ProxyGenerationOptions : ISerializable { public static readonly ProxyGenerationOptions Default = new ProxyGenerationOptions(); private List<object> mixins; internal readonly IList<Attribute> attributesToAddToGeneratedTypes = new List<Attribute>(); private readonly IList<CustomAttributeBuilder> additionalAttributes = new List<CustomAttributeBuilder>(); [NonSerialized] private MixinData mixinData; public IProxyGenerationHook Hook { get; set; } public IInterceptorSelector Selector { get; set; } public Type BaseTypeForInterfaceProxy { get; set; } [Obsolete("This property is obsolete and will be removed in future versions. Use AdditionalAttributes property instead. You can use AttributeUtil class to simplify creating CustomAttributeBuilder instances for common cases.")] public IList<Attribute> AttributesToAddToGeneratedTypes { get { return attributesToAddToGeneratedTypes; } } public IList<CustomAttributeBuilder> AdditionalAttributes => additionalAttributes; public MixinData MixinData { get { if (mixinData == null) throw new InvalidOperationException("Call Initialize before accessing the MixinData property."); return mixinData; } } public bool HasMixins { get { if (mixins != null) return mixins.Count != 0; return false; } } public ProxyGenerationOptions(IProxyGenerationHook hook) { BaseTypeForInterfaceProxy = typeof(object); Hook = hook; } public ProxyGenerationOptions() : this(new AllMethodsHook()) { } private ProxyGenerationOptions(SerializationInfo info, StreamingContext context) { Hook = (IProxyGenerationHook)info.GetValue("hook", typeof(IProxyGenerationHook)); Selector = (IInterceptorSelector)info.GetValue("selector", typeof(IInterceptorSelector)); mixins = (List<object>)info.GetValue("mixins", typeof(List<object>)); BaseTypeForInterfaceProxy = Type.GetType(info.GetString("baseTypeForInterfaceProxy.AssemblyQualifiedName")); } public void Initialize() { if (mixinData == null) try { mixinData = new MixinData(mixins); } catch (ArgumentException ex) { throw new InvalidMixinConfigurationException("There is a problem with the mixins added to this ProxyGenerationOptions: " + ex.Message, ex); } } [SecurityCritical] public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("hook", Hook); info.AddValue("selector", Selector); info.AddValue("mixins", mixins); info.AddValue("baseTypeForInterfaceProxy.AssemblyQualifiedName", BaseTypeForInterfaceProxy.AssemblyQualifiedName); } public void AddMixinInstance(object instance) { if (instance == null) throw new ArgumentNullException("instance"); if (mixins == null) mixins = new List<object>(); mixins.Add(instance); mixinData = null; } public object[] MixinsAsArray() { if (mixins == null) return new object[0]; return mixins.ToArray(); } public override bool Equals(object obj) { if (object.ReferenceEquals(this, obj)) return true; ProxyGenerationOptions proxyGenerationOptions = obj as ProxyGenerationOptions; if (object.ReferenceEquals(proxyGenerationOptions, null)) return false; Initialize(); proxyGenerationOptions.Initialize(); if (!object.Equals(Hook, proxyGenerationOptions.Hook)) return false; if (!object.Equals(Selector == null, proxyGenerationOptions.Selector == null)) return false; if (!object.Equals(MixinData, proxyGenerationOptions.MixinData)) return false; if (!object.Equals(BaseTypeForInterfaceProxy, proxyGenerationOptions.BaseTypeForInterfaceProxy)) return false; return true; } public override int GetHashCode() { Initialize(); int num = (Hook != null) ? Hook.GetType().GetHashCode() : 0; num = 29 * num + ((Selector != null) ? 1 : 0); num = 29 * num + MixinData.GetHashCode(); return 29 * num + ((BaseTypeForInterfaceProxy != (Type)null) ? BaseTypeForInterfaceProxy.GetHashCode() : 0); } } }