Exemple #1
0
        /// <summary>
        /// Gets the introduced field.
        /// Since the attribute may be at assembly level, the advised type is given as parameter
        /// A cache is kept, by target type.
        /// </summary>
        /// <param name="targetType">Type of the target.</param>
        /// <param name="targetName"></param>
        /// <returns></returns>
        private FieldInfo GetIntroducedField(Type targetType, string targetName)
        {
            lock (_fieldInfos)
            {
                var key = Tuple.Create(targetType, targetName);
                if (_fieldInfos.TryGetValue(key, out var introducedField))
                {
                    return(introducedField);
                }

                _fieldInfos[key] = introducedField = Invocation.FindIntroducedField(_ownerAdvice, _ownerMemberInfo, targetType, targetName);
                return(introducedField);
            }
        }
Exemple #2
0
        /// <summary>
        /// Gets the introduced field.
        /// Since the attribute may be at assembly level, the advised type is given as parameter
        /// A cache is kept, by target type.
        /// </summary>
        /// <param name="targetType">Type of the target.</param>
        /// <returns></returns>
        private FieldInfo GetIntroducedField(Type targetType)
        {
            lock (_fieldInfos)
            {
                FieldInfo introducedField;
                if (_fieldInfos.TryGetValue(targetType, out introducedField))
                {
                    return(introducedField);
                }

                _fieldInfos[targetType] = introducedField = Invocation.FindIntroducedField(_ownerAdvice, _ownerMemberInfo, targetType);
                return(introducedField);
            }
        }
Exemple #3
0
        /// <summary>
        /// Gets the introduced field.
        /// Since the attribute may be at assembly level, the advised type is given as parameter
        /// A cache is kept, by target type.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <returns></returns>
        protected FieldInfo GetIntroducedField(IAdviceContextTarget context)
        {
            var targetType = context.TargetType;
            // this is where the advice is applied (method, property, event). For shared events this is instance-wide, so unrelated to any target
            var targetName = IsShared ? null : context.TargetName;
            var fieldInfos = GetIntroducedFieldsRegistry(context);

            lock (fieldInfos)
            {
                //var key = Tuple.Create(targetType, targetName);
                var key = new IntroducedFieldsRegistry.Key(_ownerAdvice.GetType(), _ownerMemberInfo, targetName);
                if (fieldInfos.Fields.TryGetValue(key, out var introducedField))
                {
                    return(introducedField);
                }

                fieldInfos.Fields[key] = introducedField = Invocation.FindIntroducedField(_ownerAdvice, _ownerMemberInfo, targetType, targetName);
                return(introducedField);
            }
        }