【发布时间】:2011-05-26 21:13:56
【问题描述】:
我有一个自定义类型转换器,可以将 UTC DateTime 属性转换为公司的本地时间(在此讨论:Globally apply value resolver with AutoMapper)。
如果视图模型上的属性标记有自定义 DisplayInLocalTime 属性,我现在只想让这个转换器执行它的工作。
在类型转换器内部,如果我实现原始的ITypeConvert<TSource, TDestination> 接口,我可以检查被转换的目标视图模型属性是否具有属性:
public class LocalizedDateTimeConverter : ITypeConverter<DateTime, DateTime>
{
public DateTime Convert(ResolutionContext context)
{
var shouldConvert = context.Parent.DestinationType
.GetProperty(context.MemberName)
.GetCustomAttributes(false)[0].GetType() == typeof(DisplayInLocalTimeAttribute);
if (shouldConvert) {
// rest of the conversion logic...
}
}
}
所以这段代码工作得很好(显然为了便于阅读,这里有更多的错误检查和变量)。
我的问题:
- 这是解决此问题的正确方法吗?在 AutoMapper 代码库中,我没有发现任何在谷歌上搜索或探索的内容。
- 我将如何对此进行单元测试?我可以在传入的
ResolutionContext上设置父目标类型,有点时髦,但不能设置成员名称,因为IMemberAccessor的所有实现者都是AutoMapper 的内部。这一点,而且它的设置非常难看,这让我真的不支持它,或者我做错了。
我正在使用 AutoMapper 的最新 TeamCity 版本,顺便说一句。
【问题讨论】:
标签: automapper