電子メールを送信するための.Net SmtpClientクラスを使用しています。 smtpの設定はconfigファイルに保存されています。アプリケーションまたはマシン構成ファイルを使用して、すべてのSmtpClientオブジェクトのデフォルトのホスト、ポート、および資格情報の値を指定できます。デフォルトのコンストラクタは、設定ファイルからすべての値を読み込みます。 MSDNSmtpClientをUnity Containerに登録するには?
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="network">
<network
host="localhost"
port="25"
defaultCredentials="true"
/>
</smtp>
</mailSettings>
</system.net>
</configuration>
は、ここで私たちは、電子メールを送信して行われているとすぐにSmtpClientを処分したい
public interface IEmail:IDisposable
{
void Send(string[] to)
}
public class SmtpEmail : IEmail
{
private bool _disposed = false;
private SmtpClient _client = null;
public SmtpEmail(SmtpClient client)
{
_client = client;
}
public void Send(string[] to)
{
using (MailMessage message = GetEmailMessage())
{
foreach (string email in to)
{
message.To.Add(email);
}
_client.Send(message);
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
if (_client != null)
{
_client.Dispose();
_disposed = true;
}
}
}
}
}
SmtpClient
使っている私のインターフェースとクラスです。ここで私はここでのServiceLocator にusing(var emailClient = ServiceLocator.Current.GetInstance<IEmail>())
{
emailClient.Send(new string[] { "[email protected]"};
}
を使用してそれを呼んでいるどのように私はエラー
依存の{「解像度を取得していますしかし、私はユニティ
var container = new UnityContainer(); container.RegisterType<SmtpClient,SmtpClient>(); container.RegisterType<IEmail, SmtpEmail>(); UnityServiceLocator locator = new UnityServiceLocator(container); ServiceLocator.SetLocatorProvider(() => locator);
に登録しています方法です失敗しました。タイプ= \ "MyFramework.Core.Email.IEmail \"、名前= \ "(なし)\"。 が発生中:解決中。\ r \ n例外: InvalidOperationException - String型を構築できません。 は、この 値を提供するようにコンテナを構成する必要があります。\ r \ n ---------------------------------- ------------- \ r \ n例外の時刻が の場合、コンテナは:\ r \ n \ r \ n解決する MyFramework.Core.Email.SmtpEmail、(なし)(マップされた MyFramework.Core.Email.Imail、(none))\ r \ nコンストラクタのパラメータ \ "クライアント\"の解決 MyFramework.Core.Email.SmtpEmail(System.Net.Mail.SmtpClient クライアント)\ r \ n
コンストラクタのパラメータ "ホスト"を解決します。 System.Net.Mail.SmtpClient(System.String host、System.Int32 port)\ r System.Net.Mail.SmtpClientを解決しました。 \ n 解決するSystem.String、(なし)\ r \ n "}
質問
SmtpClientがデフォルトのコンストラクタを使用することができますし、また、Unityが新しいインスタンスを毎回作成できるように、どのように私はUnityとSmtpClientを登録します。
を! – Legends
@ LP13あなたはこの回答を受け入れることができますか、またはいくつかのコメントを追加する必要がありますか? – Backs