首页 > 解决方案 > 从配置文件中获取设置

问题描述

我正在尝试在 ASP.NET Boilerplate 中设置 MailKit 以发送电子邮件,但尽管我已在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' 的设置值为 null 或空!在 Abp.Net.Mail.EmailSenderConfiguration.GetNotEmptySettingValue(String name) in D:\Github\aspnetboilerplate\src\Abp\Net\Mail\EmailSenderConfiguration.cs:Abp.Net.Mail.EmailSenderBase.NormalizeMail(MailMessage 邮件)的第 44 行在 D:\Github\aspnetboilerplate\src\Abp\Net\Mail\EmailSenderBase.cs:line 96 at Abp.Net.Mail.EmailSenderBase.Send(MailMessage mail, Boolean normalize) in D:\Github\aspnetboilerplate\src\Abp \Net\Mail\EmailSenderBase.cs:C:\Users\Dopravo\source\repos\doFramework\SampleProjects\TaskManagmentApp.Application\Services\TaskAppService 中 TaskManagmentApp.Tasks.TaskAppService.GetAll(GetAllTask​​sInput 输入)的第 73 行.cs:Castle.Proxies.Invocations 的第 36 行。

app.config文件:

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

标签: c#asp.net-coresettingsconfiguration-filesaspnetboilerplate

解决方案


从关于设置管理的文档:

为了使用设置系统,必须实现ISettingStore接口。虽然您可以以自己的方式实现它,但它已在模块零项目中完全实现。如果未实现,则从应用程序的配置文件(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);
}

推荐阅读