我正在使用.Net SmtpClient類來發送電子郵件。 smtp的配置存儲在配置文件中。您可以使用應用程序或機器配置文件爲所有SmtpClient對象指定默認主機,端口和憑據值。默認構造函數將讀取配置文件中的所有值。 MSDN如何使用Unity Container註冊SmtpClient?
<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 \」,name = \「(none)\」。\ r \ n異常 發生while:解析。\ r \ n異常爲: InvalidOperationException - 無法構造String類型。您 必須配置容器以提供此值 值。\ r \ n ---------------------------------- ------------- \ r \ n在例外情況的 時間,容器爲:\ r \ n \ r \ n正在解析 MyFramework.Core.Email.SmtpEmail,(none)(映射從 MyFramework.Core.Email.IEmail,(無))\ r \ n解析參數 「客戶端」的構造函數 MyFramework.Core.Email.SmtpEmail(System.Net.Mail.SmtpClient 客戶端)\ r \ n解決System.Net.Mail.SmtpClient(無)\ r \ n
解析參數\「主機\」的構造函數 System.Net.Mail.SmtpClient(System.String主機,System.Int32端口)\ r \ n 解析System.String,(無)\ r \ n「}
問題
我如何註冊SmtpClient與團結,使SmtpClient可以使用它的默認構造函數,也統一可以創建新實例每次。
你是對的! – Legends
@ LP13你能接受這個答案,還是我應該添加一些評論? – Backs