C# 如何在自定义解析器中使用应用程序设置?

C# 如何在自定义解析器中使用应用程序设置?,c#,asp.net,dependency-injection,asp.net-core,automapper,C#,Asp.net,Dependency Injection,Asp.net Core,Automapper,我会尽力解释我想做什么。我有一个Server对象,其中包含一个参数,日期为上次“同步”的时间 我想将其映射到一个ServerSummary对象,该对象具有一个Status参数 public class ServerSummary { public Guid Id { get; set; } public string Status { get; set; } } 此状态将通过检查服务器是否在最近X分钟内已同步来设置,X存储在my appsettings.json文件中: {

我会尽力解释我想做什么。我有一个
Server
对象,其中包含一个参数,日期为上次“同步”的时间

我想将其映射到一个
ServerSummary
对象,该对象具有一个
Status
参数

public class ServerSummary
{
    public Guid Id { get; set; }
    public string Status { get; set; }
}
此状态将通过检查服务器是否在最近X分钟内已同步来设置,X存储在my appsettings.json文件中:

{
  "SyncOffsetMinutes": "5"
}
我有一个模型类:

public class AppSettings
{
    public int SyncOffsetMinutes { get; set; }
}
在my Startup.cs类中配置的:

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.Configure<AppSettings>(Configuration);
}
在我的自定义解析器中,我尝试使用DI注入我的AppSettings,以便在我的Resolve方法中使用app设置:

public class ServerSyncStatusResolver : IValueResolver<Server, ServerSummary, string>
{
    private AppSettings _appSettings;

    public ServerSyncStatusResolver(AppSettings appSettings)
    {
        _appSettings = appSettings;
    }

    public string Resolve(Server source, ServerSummary destination, string member, ResolutionContext context)
    {
        return source.LastSyncedAt.AddMinutes(_appSettings.SyncOffsetMinutes) < DateTime.UtcNow ? "Offline" : "Online";
    }
}
公共类服务器SyncStatusResolver:IValueResolver
{
私有应用设置_AppSettings;
公用服务器SyncStatusResolver(AppSettings AppSettings)
{
_appSettings=appSettings;
}
公共字符串解析(服务器源、服务器摘要目标、字符串成员、ResolutionContext上下文)
{
返回source.LastSyncedAt.AddMinutes(\u appSettings.SyncOffsetMinutes)
但当我实际进行映射时:

var servers = _dbContext.Servers.ToList();
var serverSummaries = Mapper.Map<List<Server>, List<ServerSummary>>(servers);
var servers=_dbContext.servers.ToList();
var serverSummaries=Mapper.Map(服务器);
我听到一个错误说

没有为此对象定义无参数构造函数


有没有办法将我的AppSettings文件注入解析器?我做错了吗?

我大错特错了,请参见下面的更新

此时不能使用注入,因为解析器实例是在映射器配置初始化时创建的。 唯一的可能是将AppSettings作为要映射的对象之一的一部分

唯一可以使用的是一个静态类并从其他地方更新其成员,但这是一个非常非常糟糕的解决方案。我没有告诉你,这几乎是违法的

由@Lucian Bargaoanu根据评论更新


您可以在文档中找到答案

是否为AppSettings添加了依赖项注入?请不要在问题标题中添加标签。参见@Seminda我不知道你的意思是什么?感谢链接@LucianBargaoanu,但我不确定我需要在解决方案中更改什么才能使其生效。我需要在Startup类中添加一些内容吗?
public class ServerSyncStatusResolver : IValueResolver<Server, ServerSummary, string>
{
    private AppSettings _appSettings;

    public ServerSyncStatusResolver(AppSettings appSettings)
    {
        _appSettings = appSettings;
    }

    public string Resolve(Server source, ServerSummary destination, string member, ResolutionContext context)
    {
        return source.LastSyncedAt.AddMinutes(_appSettings.SyncOffsetMinutes) < DateTime.UtcNow ? "Offline" : "Online";
    }
}
var servers = _dbContext.Servers.ToList();
var serverSummaries = Mapper.Map<List<Server>, List<ServerSummary>>(servers);