【问题标题】:ASP.NET Boilerplate change EmailSettingNamesASP.NET 样板更改 EmailSettingNames
【发布时间】:2017-11-23 08:52:47
【问题描述】:

根据Email Sending上的文档:

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

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

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

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

谢谢。

澄清

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

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

【问题讨论】:

    标签: c# asp.net email constants aspnetboilerplate


    【解决方案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);
      

    【讨论】:

    • 我收到 ReplaceService 的此错误。严重性代码描述项目文件行抑制状态错误 CS0308 非泛型方法“IAbpStartupConfiguration.ReplaceService(Type, Action)”不能与类型参数一起使用。
    • using Abp.Configuration.Startup;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多