From 8997bc2879e635789d86c24cc04137f670a716dd Mon Sep 17 00:00:00 2001 From: Craig Hawker Date: Fri, 26 Jan 2024 15:41:26 +0000 Subject: [PATCH] Potential fix for #16 DisposableBase already had implementation of IDisposable that delegated to separate methods for managed/unmanaged objects Altered FileDownloadLocation to override DisposeManagedObjects instead of Dispose(bool) Altered EmailMessageBase to inherit from DisposableBase Altered EmailMessage to override DisposeManagedObjects instead of Dispose(bool) Spelling correction in DisposableBase --- MFilesAPI.Extensions/DisposableBase.cs | 2 +- MFilesAPI.Extensions/Email/EmailMessage.cs | 6 +-- .../Email/EmailMessageBase.cs | 39 +------------------ .../Files/Downloading/FileDownloadLocation.cs | 4 +- 4 files changed, 7 insertions(+), 44 deletions(-) diff --git a/MFilesAPI.Extensions/DisposableBase.cs b/MFilesAPI.Extensions/DisposableBase.cs index b14ebdb..a655e40 100644 --- a/MFilesAPI.Extensions/DisposableBase.cs +++ b/MFilesAPI.Extensions/DisposableBase.cs @@ -3,7 +3,7 @@ namespace MFilesAPI.Extensions { /// - /// A base class for objects implemtning the pattern. + /// A base class for objects implementing the pattern. /// Override and/or as appropriate. /// see: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose?redirectedfrom=MSDN#implementing-the-dispose-pattern-for-a-base-class /// diff --git a/MFilesAPI.Extensions/Email/EmailMessage.cs b/MFilesAPI.Extensions/Email/EmailMessage.cs index 9a55097..b65d322 100644 --- a/MFilesAPI.Extensions/Email/EmailMessage.cs +++ b/MFilesAPI.Extensions/Email/EmailMessage.cs @@ -299,14 +299,14 @@ public override void AddHeader(string name, string value) this.mailMessage.Headers.Add(name, value); } - protected override void Dispose(bool disposing) - { + protected override void DisposeManagedObjects() + { // Attempt to dispose the mail message. this.mailMessage?.Dispose(); this.mailMessage = null; // Call the base implementation. - base.Dispose(disposing); + base.DisposeManagedObjects(); } #endregion diff --git a/MFilesAPI.Extensions/Email/EmailMessageBase.cs b/MFilesAPI.Extensions/Email/EmailMessageBase.cs index fb00e54..4726eb7 100644 --- a/MFilesAPI.Extensions/Email/EmailMessageBase.cs +++ b/MFilesAPI.Extensions/Email/EmailMessageBase.cs @@ -9,7 +9,7 @@ namespace MFilesAPI.Extensions.Email /// A base implementation of that plugins can extend. /// public abstract class EmailMessageBase - : IEmailMessage + : DisposableBase, IEmailMessage { private SmtpConfiguration configuration = null; @@ -182,42 +182,5 @@ public void AddAllFiles( #endregion - #region IDisposable - - /// - /// Disposes of any managed or unmanaged resources. - /// - /// If true, has been called. False if called from within a finalizer. - /// - /// Unmanaged resources should be disposed of regardless of . - /// Managed resources should be disposed of if is . - /// More information on this pattern is available onlne: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose - /// - protected virtual void Dispose(bool disposing) - { - } - - /// - /// Calls , with disposing set to . - public void Dispose() - { - // Dispose of unmanaged resources. - this.Dispose(true); - - // Suppress finalization. - GC.SuppressFinalize(this); - } - - /// - /// Ensures that any resources are correctly disposed of during finalization. - /// - /// Calls , with disposing set to . - ~EmailMessageBase() - { - this.Dispose(false); - } - - #endregion - } } \ No newline at end of file diff --git a/MFilesAPI.Extensions/Files/Downloading/FileDownloadLocation.cs b/MFilesAPI.Extensions/Files/Downloading/FileDownloadLocation.cs index 7bdefc6..9c715d7 100644 --- a/MFilesAPI.Extensions/Files/Downloading/FileDownloadLocation.cs +++ b/MFilesAPI.Extensions/Files/Downloading/FileDownloadLocation.cs @@ -201,13 +201,13 @@ public TemporaryFileDownload DownloadFile } /// - protected override void Dispose(bool disposing) + protected override void DisposeManagedObjects() { // If we should clean on disposal then clean. if (this.CleanDirectoryOnDisposal) this.CleanTemporaryFiles(); - base.Dispose(disposing); + base.DisposeManagedObjects(); } }