我班上有一个懒惰的房产:
private Lazy<ISmtpClient> SmtpClient
{
get
{
return new Lazy<ISmtpClient>(() => _objectCreator.Create<ISmtpClient>(), true);
}
}
Run Code Online (Sandbox Code Playgroud)
也是一种使用这种方法的方法:
public void SendEmail(MailMessage message)
{
SmtpClient.Value.ServerName = "testServer";
SmtpClient.Value.Port = 25;
SmtpClient.Value.Send(message);
}
Run Code Online (Sandbox Code Playgroud)
但是在我的SmtpClient中,在Send(字符串消息)中,methode是我在上面的SendEmail(MailMessage消息)方法中初始化的所有预测,null.
我怎样才能解决这个问题?
提前致谢.
Dan*_*rth 22
你使用Lazy<T>
错了.
在使用时,Lazy<T>
您公开了实际类型的属性,并且您有一个Lazy<T>
实例.每次访问该属性时都不会创建新的:
Lazy<ISmtpClient> _smtpClient =
new Lazy<ISmtpClient>(() => _objectCreator.Create<MySmtpClient>(), true);
private ISmtpClient SmtpClient
{
get
{
return _smtpClient.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,第一次SmtpClient
访问该属性时,对象创建者会创建一个新实例MySmtpClient
.这是返回的.在后续调用中,返回相同的实例.
用法如下:
public void SendEmail(MailMessage message)
{
SmtpClient.ServerName = "testServer";
SmtpClient.Port = 25;
SmtpClient.Send(message);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11057 次 |
最近记录: |