2017-11-23 14 views
1

ASP.NET定型変更EmailSettingNames

メール送信者が 設定を送信する電子メールを読むために設定管理システムを使用しています。すべての設定名は、定数文字列として Abp.Net.Mail.EmailSettingNamesクラスに定義されています。

これらのデフォルト設定を無効にして自分の値を使用する方法については、私はポインタが必要です。

私は設定テーブルにも設定を保存しますが、 "Abp.Net.Mail.DefaultFromAddress"という名前は使用しません。 "Tenant.DefaultFromAddress"のようなものを使用します。

可能であれば、他のAbp設定を改ざんすることなく電子メール設定だけを変更したいと考えています。

ありがとうございます。

明確化

私の目的は、これらの設定を上書きし、自分のアプリケーションの要件は、私が行うことを規定しているため設定テーブル内の異なる命名規則を使用する方法を見つけることでした。

私はちょうどそれが異なって呼び出されるが、同じように動作します。

+0

。実際には、デフォルト設定の全体:Abp.Net.Mail.DefaultFromAddress、Abp.Net.Mail.DefaultFromDisplayName、Abp.Net.Mail.Smtp.Host、Abp.Net.Mail.Smtp.Port、Abp.Net.Mail.Smtp。 。 – Sleek

+0

ありがとう@アーロン。しかし、これは私を非常に助けません。私の目的は、これらの設定をオーバーライドし、アプリケーションの要件に応じて設定テーブルに別の命名規則を使用する方法を見つけることでした。 – Sleek

+0

はい。まさにその。 – Sleek

答えて

1

私の目的は、これらの設定を上書きし、設定テーブル

それが数行以上かかるに異なる命名規則を使用する方法を見つけることでした。

  1. 独自のEmailSettingNamesを実装します。

    public static class MyEmailSettingNames 
    { 
        public const string DefaultFromAddress = "Tenant.DefaultFromAddress"; 
        public const string DefaultFromDisplayName = "Tenant.DefaultFromDisplayName"; 
    
        public static class Smtp 
        { 
         public const string Host = "Tenant.Smtp.Host"; 
         public const string Port = "Tenant.Smtp.Port"; 
         public const string UserName = "Tenant.Smtp.UserName"; 
         public const string Password = "Tenant.Smtp.Password"; 
         public const string Domain = "Tenant.Smtp.Domain"; 
         public const string EnableSsl = "Tenant.Smtp.EnableSsl"; 
         public const string UseDefaultCredentials = "Tenant.Smtp.UseDefaultCredentials"; 
        } 
    } 
    
  2. 独自のEmailSettingProviderを実装します。

    internal class MyEmailSettingProvider : SettingProvider 
    { 
        public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context) 
        { 
         return new[] 
         { 
          new SettingDefinition(MyEmailSettingNames.Smtp.Host, "127.0.0.1", L("SmtpHost"), scopes: SettingScopes.Application | SettingScopes.Tenant), 
          new SettingDefinition(MyEmailSettingNames.Smtp.Port, "25", L("SmtpPort"), scopes: SettingScopes.Application | SettingScopes.Tenant), 
          new SettingDefinition(MyEmailSettingNames.Smtp.UserName, "", L("Username"), scopes: SettingScopes.Application | SettingScopes.Tenant), 
          new SettingDefinition(MyEmailSettingNames.Smtp.Password, "", L("Password"), scopes: SettingScopes.Application | SettingScopes.Tenant), 
          new SettingDefinition(MyEmailSettingNames.Smtp.Domain, "", L("DomainName"), scopes: SettingScopes.Application | SettingScopes.Tenant), 
          new SettingDefinition(MyEmailSettingNames.Smtp.EnableSsl, "false", L("UseSSL"), scopes: SettingScopes.Application | SettingScopes.Tenant), 
          new SettingDefinition(MyEmailSettingNames.Smtp.UseDefaultCredentials, "true", L("UseDefaultCredentials"), scopes: SettingScopes.Application | SettingScopes.Tenant), 
          new SettingDefinition(MyEmailSettingNames.DefaultFromAddress, "", L("DefaultFromSenderEmailAddress"), scopes: SettingScopes.Application | SettingScopes.Tenant), 
          new SettingDefinition(MyEmailSettingNames.DefaultFromDisplayName, "", L("DefaultFromSenderDisplayName"), scopes: SettingScopes.Application | SettingScopes.Tenant) 
         }; 
        } 
    
        private static LocalizableString L(string name) 
        { 
         return new LocalizableString(name, MyLocalizationSourceName); 
        } 
    } 
    
  3. は、独自のSmtpEmailSenderConfigurationを実装します。

    public class MySmtpEmailSenderConfiguration : EmailSenderConfiguration, ISmtpEmailSenderConfiguration, ITransientDependency 
    { 
        public virtual string Host => GetNotEmptySettingValue(MyEmailSettingNames.Smtp.Host); 
        public virtual int Port => SettingManager.GetSettingValue<int>(MyEmailSettingNames.Smtp.Port); 
        public virtual string UserName => GetNotEmptySettingValue(MyEmailSettingNames.Smtp.UserName); 
        public virtual string Password => GetNotEmptySettingValue(MyEmailSettingNames.Smtp.Password); 
        public virtual string Domain => SettingManager.GetSettingValue(MyEmailSettingNames.Smtp.Domain); 
        public virtual bool EnableSsl => SettingManager.GetSettingValue<bool>(MyEmailSettingNames.Smtp.EnableSsl); 
        public virtual bool UseDefaultCredentials => SettingManager.GetSettingValue<bool>(MyEmailSettingNames.Smtp.UseDefaultCredentials); 
    
        public MySmtpEmailSenderConfiguration(ISettingManager settingManager) 
         : base(settingManager) 
        { 
        } 
    } 
    
  4. YourProjectNameCoreModulePreInitialize方法でこれらを設定して下さい:はい

    Configuration.Settings.Providers.Add<MyEmailSettingProvider>(); 
    Configuration.ReplaceService<ISmtpEmailSenderConfiguration, MySmtpEmailSenderConfiguration>(DependencyLifeStyle.Transient); 
    
関連する問題