protected override void CacheMetadata(CodeActivityMetadata metadata) { bool isRequired = false; if (!typeof(TOperand).GetTypeInfo().IsValueType) { metadata.AddValidationError(SR.TypeMustbeValueType(typeof(TOperand).Name)); } if (typeof(TOperand).GetTypeInfo().IsEnum) { metadata.AddValidationError(SR.TargetTypeCannotBeEnum(this.GetType().Name, this.DisplayName)); } if (string.IsNullOrEmpty(this.FieldName)) { metadata.AddValidationError(SR.ActivityPropertyMustBeSet("FieldName", this.DisplayName)); } else { _fieldInfo = typeof(TOperand).GetField(this.FieldName); isRequired = _fieldInfo != null && !_fieldInfo.IsStatic; if (_fieldInfo == null) { metadata.AddValidationError(SR.MemberNotFound(this.FieldName, typeof(TOperand).Name)); } else if (_fieldInfo.IsInitOnly) { metadata.AddValidationError(SR.MemberIsReadOnly(this.FieldName, typeof(TOperand).Name)); } } MemberExpressionHelper.AddOperandLocationArgument <TOperand>(metadata, this.OperandLocation, isRequired); }
protected override void CacheMetadata(CodeActivityMetadata metadata) { MethodInfo oldGetMethod = _getMethod; MethodInfo oldSetMethod = _setMethod; if (!typeof(TOperand).GetTypeInfo().IsValueType) { metadata.AddValidationError(SR.TypeMustbeValueType(typeof(TOperand).Name)); } if (typeof(TOperand).GetTypeInfo().IsEnum) { metadata.AddValidationError(SR.TargetTypeCannotBeEnum(this.GetType().Name, this.DisplayName)); } else if (String.IsNullOrEmpty(this.PropertyName)) { metadata.AddValidationError(SR.ActivityPropertyMustBeSet("PropertyName", this.DisplayName)); } else { _propertyInfo = typeof(TOperand).GetProperty(this.PropertyName); if (_propertyInfo == null) { metadata.AddValidationError(SR.MemberNotFound(PropertyName, typeof(TOperand).Name)); } } bool isRequired = false; if (_propertyInfo != null) { _setMethod = _propertyInfo.GetSetMethod(); _getMethod = _propertyInfo.GetGetMethod(); if (_setMethod == null) { metadata.AddValidationError(SR.MemberIsReadOnly(_propertyInfo.Name, typeof(TOperand))); } if (_setMethod != null && !_setMethod.IsStatic) { isRequired = true; } } MemberExpressionHelper.AddOperandLocationArgument <TOperand>(metadata, this.OperandLocation, isRequired); if (_propertyInfo != null) { if (MethodCallExpressionHelper.NeedRetrieve(_getMethod, oldGetMethod, _getFunc)) { _getFunc = MethodCallExpressionHelper.GetFunc(metadata, _getMethod, s_funcCache, s_locker); } if (MethodCallExpressionHelper.NeedRetrieve(_setMethod, oldSetMethod, _setFunc)) { _setFunc = MethodCallExpressionHelper.GetFunc(metadata, _setMethod, s_funcCache, s_locker, true); } } }