private CoreAttachment InternalCreate(AttachmentType?type, string itemClass, CoreAttachment attachmentToClone, IItem itemToAttach) { this.InitCollection("InternalCreate", true); AttachmentPropertyBag attachmentPropertyBag = null; CoreAttachment coreAttachment = null; bool flag = false; try { bool flag2 = false; if (attachmentToClone != null) { flag2 = this.attachmentProvider.SupportsCreateClone(attachmentToClone.PropertyBag); } attachmentPropertyBag = this.InternalCreateAttachmentPropertyBag(type, flag2 ? attachmentToClone : null, itemToAttach); if (itemClass != null) { ((IDirectPropertyBag)attachmentPropertyBag).SetValue(InternalSchema.ItemClass, itemClass); } AttachmentHandle attachmentHandle = new AttachmentHandle(attachmentPropertyBag.AttachmentNumber); coreAttachment = new CoreAttachment(this, attachmentPropertyBag, Origin.New); attachmentPropertyBag = null; if (attachmentToClone != null && !flag2) { coreAttachment.CopyAttachmentContentFrom(attachmentToClone); } this.newAttachmentNumberMap.Add(attachmentHandle.AttachNumber, attachmentHandle); flag = true; } finally { if (!flag) { if (coreAttachment != null) { coreAttachment.Dispose(); coreAttachment = null; } if (attachmentPropertyBag != null) { attachmentPropertyBag.Dispose(); attachmentPropertyBag = null; } } } return(coreAttachment); }
internal Attachment Open(AttachmentHandle handle, AttachmentType?type, ICollection <PropertyDefinition> propertyDefinitions) { Util.ThrowOnNullArgument(handle, "handle"); if (type != null) { EnumValidator.ThrowIfInvalid <AttachmentType>(type.Value, "type"); } Attachment attachment = null; CoreAttachment coreAttachment = null; try { coreAttachment = this.CoreAttachmentCollection.Open(handle, propertyDefinitions); attachment = AttachmentCollection.CreateTypedAttachment(coreAttachment, type); } finally { if (attachment == null && coreAttachment != null) { coreAttachment.Dispose(); } } return(attachment); }