2016-01-24 115 views
0

我忙於構建一個快速的小WinForms應用程序,該應用程序允許編輯提供的app.config文件。我在System.Configuration.Configuration類中創建了一個包裝,只顯示了我想更改的屬性。我已完成AppSettingsConnectionStrings(使用SqlConnectionStringBuilder),現在我正在轉向system.net/mailSettings將配置文件MailSettings添加到PropertyGrid

這是我目前的結構的要點:

public class ServerConfigFile : ConfigFile 
{ 
    ... 
    [Category("Database Connection Settings")] 
    [DisplayName("Connection String")] 
    [RefreshProperties(RefreshProperties.All)] 
    [Description("The connection string used to connect to the datasource. Default is \"(LocalDB)\\v11.0\"")] 
    public ConnectionStringBuilderFacade ConnectionString { get; private set; } 
    ... 

    protected override void ReloadProperties() 
    { 
     this.ConnectionString = new ConnectionStringBuilderFacade(this.UnderlyingConfig.ConnectionStrings.ConnectionStrings["EntitiesContainer"]); 
     ... 
     this.MailSettings = this.UnderlyingConfig.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup; 
    } 
} 

public abstract class ConfigFile 
{ 
    protected Configuration UnderlyingConfig { get; private set; } 
    ... 
    public void RefreshFromFile(string exeFile) 
    { 
     this.UnderlyingConfig = ConfigurationManager.OpenExeConfiguration(exeFile); 
     this.ReloadProperties(); 
    } 

    protected abstract void ReloadProperties(); 
} 

我已經能夠採購由配置文件中的MailSettings:

this.MailSettings = this.UnderlyingConfig.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup; 

但因爲這本來是一個快速的應用程序,我還沒有準備好花時間爲一個小部分寫出整個TypeConverter和UITypeEditor。


可以看出,所需的內容是 - SMTP設置,配送方式,取貨地點(如果交付方法是specifiedDirectory),SSL,用戶名,密碼......

我的問題:是那裏有任何現有的MailSettings PropertyGrid編輯器,我可以即插即用,或者我必須咬緊牙關並推出自己的產品,或者您有沒有優秀的人員爲我提供更好的解決方案?

回答

0

所以我最終推出了我自己的一起解決方案。我將MailSettingsSectionGroup類中的屬性映射到了我自己的配置類中,並且隨它一起運行。像下面:

[Browsable(false)] 
public MailSettingsSectionGroup MailSettings { get; private set; } 

[Category(MailSettingsCategory)] 
[DisplayName("Pickup Directory Location")] 
[RefreshProperties(RefreshProperties.All)] 
[Description("The folder where to save email messages to be processed by an SMTP server.")] 
[Editor(typeof(FolderNameEditor), typeof(UITypeEditor))] 
public string SmtpPickupDirectoryLocation 
{ 
    get 
    { 
     return this.MailSettings.Smtp.SpecifiedPickupDirectory.PickupDirectoryLocation; 
    } 

    set 
    { 
     this.MailSettings.Smtp.SpecifiedPickupDirectory.PickupDirectoryLocation = value; 
    } 
} 
... 

輸出:

Mail Settings config

相關問題