我有一個簡單的應用程序發出的通知郵件到我們的一些內部用戶。.NET應用程序配置來存儲電子郵件聯繫信息
我用一個簡單的應用程序配置文件(app.config)中存儲的電子郵件地址和姓名信息,對目標用戶。由於appSettings部分似乎只支持簡單的鍵/值對,它目前看起來是這樣的:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="toName" value="Recipient Name" />
<add key="toAddr" value="[email protected]" />
<add key="toName2" value="Another Recipient Name" />
<add key="toAddr2" value="[email protected]" />
<add key="ccName" value="An Archive"/>
<add key="ccAddr" value="[email protected]"/>
<add key="ccName2" value="Another Archive"/>
<add key="ccAddr2" value="[email protected]"/>
</appSettings>
</configuration>
然後我在代碼中單獨添加每個收件人。
目前,這意味着我每次添加或刪除收件人的時間,我還需要重寫代碼來處理新的收件人和重建,並重新部署應用程序
我希望能夠存儲自定義配置條目,這樣也許:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<recipients>
<recipient recType="to" recAddr="[email protected]" recName="Recipient Name" />
<recipient recType="to" recAddr="[email protected]" recName="Another Recipient Name" />
<recipient recType="cc" recAddr="[email protected]" recName="An Archive"/>
<recipient recType="cc" recAddr="[email protected]" recName="Another Archive"/>
</recipients>
</configuration>
這樣我就可以遍歷其中:
MailMessage message = new MailMessage();
foreach(recipient rec in recipients)
{
MailAddress mailAddress = new MailAddress(recipient["recAddr"],recipient["recName"]);
if(recipient["recType"] == "cc")
message.CC.Add(mailAddress);
else
message.To.Add(mailAddress);
}
如何做到這一點?
回答: 在Regfor的鏈接使用的例子,我是能夠建立與看起來像這樣的自定義ConfigurationElements集合的自定義配置節:
public class RecipientElement : ConfigurationElement
{
[ConfigurationProperty("name", IsRequired = true, IsKey = true)]
public string Name
{
get
{
return (string)base["name"];
}
}
[ConfigurationProperty("mailAddr", IsRequired = true)]
public string Address
{
get
{
return (string)base["mailAddr"];
}
}
[ConfigurationProperty("isCC")]
public bool IsCC
{
get
{
return (bool)base["isCC"];
}
}
}
與最終的配置部分:
<recipientSection>
<recipients>
<recipient name="Primary recipient" mailAddr="[email protected]" isCC="false" />
<recipient name="Archive" mailAddr="[email protected]" isCC="true" />
</recipients>
</recipientSection>
通過循環訪問recipients
集合,可以添加儘可能多的收件人,因爲SmtpClient會讓我發送到:)
Thanks guys guys
你可以創建一個自定義配置部分,截至http://stackoverflow.com/questions/758986/custom-app-config-config-section-handler – stuartd
@StuartDunkeld概述非常漂亮,這正是像這是我正在尋找的,儘管這似乎有點誇張,因爲你使用配置文件的目的不是爲了這個(縫隙)的簡單問題 –
@ MathiasR.Jessen它看起來很誇張。花費在試圖破解配置文件上的時間可能會花在創建自己簡單的xml文件上,這些文件的設計完全是您想要的。 –