gpt4 book ai didi

c# - ASP.NET 样板更改 EmailSettingNames

转载 作者:行者123 更新时间:2023-11-30 23:07:19 25 4
gpt4 key购买 nike

根据 Email Sending 上的文档:

Email Sender uses setting management system to read email sending configuration. All setting names are defined in Abp.Net.Mail.EmailSettingNames class as constant strings.

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

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

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

谢谢。

澄清

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

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

最佳答案

My objective was to find a way to override these settings and use a different naming convention in the Settings table

它需要的不仅仅是几行。

  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);

关于c# - ASP.NET 样板更改 EmailSettingNames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47451178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com