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); } }
public static object GetWrapperTarget(this BaseMightyMember mightyMember, BaseWrapperAttribute wrapper) => mightyMember.TryGetWrapperInfoByWrapper(wrapper, out var wrapperInfo) ? wrapperInfo.Target : null;