【发布时间】:2018-06-21 09:32:10
【问题描述】:
我会尝试解释我想要做什么。我有一个Server 对象,其中包含一个参数,其日期为上次“同步”的日期
public class Server
{
public Guid Id { get; set; }
public DateTime LastSyncedAt { get; set; }
}
我想把它映射到一个ServerSummary 对象,它有一个Status 参数。
public class ServerSummary
{
public Guid Id { get; set; }
public string Status { get; set; }
}
此状态将通过检查服务器是否已在最后 X 分钟内同步来设置,其中 X 存储在我的 appsettings.json 文件中:
{
"SyncOffsetMinutes": "5"
}
我有一个模型类:
public class AppSettings
{
public int SyncOffsetMinutes { get; set; }
}
在我的 Startup.cs 类中配置:
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
...
services.Configure<AppSettings>(Configuration);
}
要解决这个 Status 属性,我在我的 AutoMapper 配置文件配置中有这个:
public class MyAutoMapperProfileConfiguration : Profile
{
public MyAutoMapperProfileConfiguration()
{
CreateMap<Server, ServerSummary>()
.ForMember(d => d.Status, o => o.ResolveUsing<ServerSyncStatusResolver>());
}
}
在我的自定义解析器中,我尝试使用 DI 注入我的 AppSettings,以便我可以在我的 Resolve 方法中使用应用设置:
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);
我收到一个错误提示
没有为此对象定义无参数构造函数
有没有办法将我的 AppSettings 文件注入到解析器中?我做错了吗?
【问题讨论】:
-
你是否为 AppSettings 添加了依赖注入?
-
请不要在问题标题中添加标签。见Tagging in Helpcenter
-
@Seminda 我不确定你的意思?
-
感谢@LucianBargaoanu 的链接,但我不确定我需要在解决方案中进行哪些更改才能使其正常工作。我需要在我的 Startup 类中添加一些东西吗?
标签: c# asp.net dependency-injection asp.net-core automapper