2017-11-23 32 views
1

:ASP.NET 상용구 변경 EmailSettingNames

이메일 발신자가 구성을 보내는 이메일을 읽을 수 관리 시스템 설정을 사용합니다. 모든 설정 이름은 Abp.Net.Mail.EmailSettingNames 클래스에 상수 문자열로 정의됩니다.

값에 대한 기본 설정을 재정의하고 내 자신을 사용하는 방법에 대한 지침이 필요합니다.

Settings 테이블에도 설정을 저장하지만 "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. UserName, Abp.Net.Mail.Smtp.Password, Abp.Net.Mail.Smtp.Domain, Abp.Net.Mail.Smtp.EnableSsl, Abp.Net.Mail.Smt.S.UseDefaultCredentials. – Sleek

+0

@aaron 감사합니다. 그러나 이것은 나에게 도움이되지 않습니다. 내 목표는 이러한 설정을 재정의하고 Settings 테이블에서 다른 명명 규칙을 사용하는 방법을 찾는 것이 었습니다. 왜냐하면 응용 프로그램의 요구 사항에 따라 해당 작업이 결정되기 때문입니다. – Sleek

+0

예. 그거야. – Sleek

답변

1

내 목표는이 설정을 무시하고 설정 테이블

그것은 몇 줄 이상 소요에 다른 이름 지정 규칙을 사용하는 방법을 찾는 것이 었습니다.

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"; 
    } 
} 
  • 자신의 EmailSettingProvider 구현 :

    1. 자신의 EmailSettingNames이 구현

      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); 
          } 
      } 
      
    2. 이 구현 자신의 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) 
          { 
          } 
      } 
      
    3. ,536,913 63,210
    4. YourProjectNameCoreModulePreInitialize 방법이 구성 :

      Configuration.Settings.Providers.Add<MyEmailSettingProvider>(); 
      Configuration.ReplaceService<ISmtpEmailSenderConfiguration, MySmtpEmailSenderConfiguration>(DependencyLifeStyle.Transient);