public override bool Equals(object obj)
        {
            if (ReferenceEquals(this, obj))
            {
                return(true);
            }

            var proxyGenerationOptions = obj as ProxyGenerationOptions;

            if (ReferenceEquals(proxyGenerationOptions, null))
            {
                return(false);
            }

            // ensure initialization before accessing MixinData
            Initialize();
            proxyGenerationOptions.Initialize();

            if (!Equals(Hook, proxyGenerationOptions.Hook))
            {
                return(false);
            }
            if (!Equals(Selector == null, proxyGenerationOptions.Selector == null))
            {
                return(false);
            }
            if (!Equals(MixinData, proxyGenerationOptions.MixinData))
            {
                return(false);
            }
            return(BaseTypeForInterfaceProxy == proxyGenerationOptions.BaseTypeForInterfaceProxy &&
                   CollectionExtensions.AreEquivalent(AdditionalAttributes, proxyGenerationOptions.AdditionalAttributes));
        }