を正しく処分するTeoman shipahiによるこの回答のバージョン。SmtpClient
最初にISmtpClient
継承を行いIDisposable
ます:
public interface ISmtpClient : IDisposable
{
void Send(MailMessage mailMessage);
}
IDisposable
次に、SmtpClientWrapper
クラスに実装します。
public class SmtpClientWrapper : ISmtpClient
{
private bool disposed;
private readonly SmtpClient smtpClient;
public SmtpClientWrapper(string host, int port)
{
smtpClient = new SmtpClient(host, port);
}
~SmtpClientWrapper()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
smtpClient?.Dispose();
}
disposed = true;
}
}
protected void CheckDisposed()
{
if (disposed)
{
throw new ObjectDisposedException(nameof(SmtpClientWrapper));
}
}
public void Send(MailMessage mailMessage)
{
CheckDisposed();
smtpClient.Send(mailMessage);
}
}
このバージョンのでは、プロパティのセッターで置き換えたときにオブジェクトが破棄されないという問題を回避するためにSmtpClientWrapper
、プロパティを削除しました。SmtpClient
SmtpClient
SmtpClient