예제 #1
0
        public static void GetWrappedAttributes <T>(BaseWrapperAttribute[] wrappers, List <T> wrappedAttributes,
                                                    BaseMightyMember mightyMember, object target) where T : BaseMightyAttribute
        {
            foreach (var wrapper in wrappers)
            {
                var nestedWrappers = GetAttributes <BaseWrapperAttribute>(wrapper.GetType());

                if (nestedWrappers.Length > 0)
                {
                    GetWrappedAttributes(nestedWrappers, wrappedAttributes, mightyMember, wrapper);
                }

                if (!mightyMember.TryGetWrapperInfoByWrapper(wrapper, out var info))
                {
                    info = new MightyWrapperInfo(target, wrapper);
                }

                foreach (var attribute in GetAttributes <T>(wrapper.GetType()).Where(x => !(x is IDoNotWrapAttribute)))
                {
                    wrappedAttributes.Add(attribute);
                    info.WrappedAttributes.Add(attribute);
                }

                mightyMember.WrappersInfo.Add(info);
            }
        }
예제 #2
0
        public bool TryGetWrapperInfoByWrapper(BaseWrapperAttribute wrapper, out MightyWrapperInfo wrapperInfo)
        {
            foreach (var info in WrappersInfo)
            {
                if (!Equals(info.Wrapper, wrapper))
                {
                    continue;
                }

                wrapperInfo = info;
                return(true);
            }

            wrapperInfo = null;
            return(false);
        }
예제 #3
0
        public bool TryGetWrapperInfoByAttribute(BaseMightyAttribute attribute, out MightyWrapperInfo wrapperInfo)
        {
            foreach (var info in WrappersInfo)
            {
                if (!info.WrappedAttributes.Contains(attribute))
                {
                    continue;
                }

                wrapperInfo = info;
                return(true);
            }

            wrapperInfo = null;
            return(false);
        }