Получить настройки из файла конфигурации - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь настроить MailKit в ASP.NET Boilerplate для отправки электронных писем, но я получаю это исключение, хотя я добавил параметры в файл app.config .

Код для отправки электронного письма:

_emailSender.Send(
    to: "*****@gmail.com",
    subject: "You have a new task!",
    body: $"A new task is assigned for you: <b>Create doFramework</b>",
    isBodyHtml: true
);

Получено исключение:

{Abp.AbpException: значение параметра 'Abp.Net.Mail.DefaultFromAddress' равно нулю или пусто!в Abp.Net.Mail.EmailSenderConfiguration.GetNotEmptySettingValue (имя строки) в D: \ Github \ aspnetboilerplate \ src \ Abp \ Net \ Mail \ EmailSenderConfiguration.cs: строка 44 в Abp.Net.Mail.EmailSenderBase.NormalizeMail (MailMessage)в D: \ Github \ aspnetboilerplate \ src \ Abp \ Net \ Mail \ EmailSenderBase.cs: строка 96 в Abp.Net.Mail.EmailSenderBase.Send (MailMessage mail, нормализовать логическое значение) в D: \ Github \ aspnetboilerplate \ src \ Abp\ Net \ Mail \ EmailSenderBase.cs: строка 73 в TaskManagmentApp.Tasks.TaskAppService.GetAll (входные данные GetAllTasksInput) в C: \ Users \ Dopravo \ source \ repos \ doFramework \ SampleProjects \ TaskManagmentApp \ src \ TaskAppApplication для приложения36aspnetboilerplate \ src \ Abp \ Domain \ Uow \ UnitOfWorkInterceptor.cs: строка 68 в Castle.DynamicProxy.AbstractInvocation.Proceed () в Abp.Auditing.AuditingInterceptor.PerformSyncAuditing (вызов IInvocation, AuditInfo auditInfo) в строке D: \ Github \ aspnetboilerplate \ src \ Abp \ Auditing * 101 * AuditingInterceptor.cs:1013 * app.config file:

<configuration>
  <runtime>
    <gcServer enabled="true"/>
  </runtime>
  <appSettings>
    <add key="Abp.Net.Mail.DefaultFromAddress" value="lkaddoura@dopravo.com"/>
    <add key="Abp.Net.Mail.DefaultFromDisplayName" value="Lutfi Kaddoura"/>
  </appSettings>     
</configuration>

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Я наконец-то смог прочитать настройки, реализовав собственный SettingStore, который считывал из файла конфигурации. обратите внимание, что вызов GetAllListAsync должен быть реализован.

   public class MySettingStore : ISettingStore
    {
        public Task CreateAsync(SettingInfo setting)
        {
            throw new NotImplementedException();
        }

        public Task DeleteAsync(SettingInfo setting)
        {
            throw new NotImplementedException();
        }

        public Task<List<SettingInfo>> GetAllListAsync(int? tenantId, long? userId)
        {
            var result = new List<SettingInfo>();
            var keys = ConfigurationManager.AppSettings.AllKeys;

            foreach (var key in keys)
            {
                result.Add(new SettingInfo(null, null, key, ConfigurationManager.AppSettings[key]));
            }

            return Task.FromResult(result);
        }

        public Task<SettingInfo> GetSettingOrNullAsync(int? tenantId, long? userId, string name)
        {
            var value = ConfigurationManager.AppSettings[name];

            if (value == null)
            {
                return Task.FromResult<SettingInfo>(null);
            }

            return Task.FromResult(new SettingInfo(tenantId, userId, name, value));
        }

        public Task UpdateAsync(SettingInfo setting)
        {
            throw new NotImplementedException();
        }
    }

MySettingStore необходимо будет заменить в PreInitalize () модуля.

public override void PreInitialize()
{
    Configuration.ReplaceService<ISettingStore, MySettingStore>(DependencyLifeStyle.Transient);
} 
0 голосов
/ 12 мая 2018

Из документации на Настройка управления :

Для использования системы настроек должен быть реализован интерфейс ISettingStore . Хотя вы можете реализовать его по-своему, он полностью реализован в проекте Module Zero . Если это не реализовано, настройки считываются из файла конфигурации приложения (web.config или app.config), но эти настройки нельзя изменить. Обзоры также не будут работать.

Для восстановления конфигурации файла подкласса SettingStore и переопределения GetSettingOrNullAsync:

public class MySettingStore : SettingStore
{
    public MySettingStore(
        IRepository<Setting, long> settingRepository,
        IUnitOfWorkManager unitOfWorkManager)
        : base(settingRepository, unitOfWorkManager)
    {
    }

    public override Task<SettingInfo> GetSettingOrNullAsync(int? tenantId, long? userId, string name)
    {
        return base.GetSettingOrNullAsync(tenantId, userId, name)
            ?? DefaultConfigSettingStore.Instance.GetSettingOrNullAsync(tenantId, userId, name);
    }
}

Затем замените ISettingStore в вашем модуле:

// using Abp.Configuration.Startup;

public override void PreInitialize()
{
    Configuration.ReplaceService<ISettingStore, MySettingStore>(DependencyLifeStyle.Transient);
}
...