ASP.NET 样板更改 EmailSettingNames

Sle*_*eek 5 c# asp.net email constants aspnetboilerplate

根据电子邮件发送的文档:

Email Sender 使用设置管理系统读取电子邮件发送配置。所有设置名称都在 Abp.Net.Mail.EmailSettingNames 类中定义为常量字符串。

我需要有关如何覆盖这些默认值设置并使用我自己的值的指示。

我也将设置保存在“设置”表中,但我不使用名称“Abp.Net.Mail.DefaultFromAddress”,而是使用“Tenant.DefaultFromAddress”之类的名称。

如果可能的话,我只想覆盖电子邮件设置而不篡改其他 Abp 设置。

谢谢。

澄清

我的目标是找到一种方法来覆盖这些设置并在“设置”表中使用不同的命名约定,因为我的应用程序的要求要求我这样做。

我只是希望它的名称不同,但行为方式相同。

aar*_*ron 4

我的目标是找到一种方法来覆盖这些设置并在设置表中使用不同的命名约定

它需要的不仅仅是几行。

  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";
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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)
        {
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在YourProjectNameCoreModulePreInitialize的方法中配置这些:

    Configuration.Settings.Providers.Add<MyEmailSettingProvider>();
    Configuration.ReplaceService<ISmtpEmailSenderConfiguration, MySmtpEmailSenderConfiguration>(DependencyLifeStyle.Transient);
    
    Run Code Online (Sandbox Code Playgroud)

  • `使用 Abp.Configuration.Startup;` (2认同)