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