标题可能不那么明确,我试着解释一个例子:
我用自定义DTO映射器替换AutoMapper,并且当时需要它们都能工作。它有一个自定义实现使用它,否则回退到AutoMapper。
自定义映射器看起来像这样:
public static class CustomMapper
{
public static Entity1DTO Map(Entity1 source){
... some mapping code ...
}
public static Entity2DTO Map(Entity2 source){
... some mapping code ...
}
...
}
我需要一种方法来检查Map
方法是否超出特定类型,而无需手动检查每种类型。我尝试创建另一个接受object
并返回object
的重载,但我不知道如何检查其他重载是否满足特定类型并调用它们。
基本上我想制作一个通用的包装器方法来处理重定向到CustomMapper或AutoMapper。类似的东西:
public static class Mapper
{
public static T Map<T>(object source){
return CustomMapper.Map(source) ?? AutoMapper.Map(source);
}
}
所以问题是如何在CustomMapper中创建一个方法,该方法将知道另一个Map
方法重载是否可以处理接受的类型。如果不返回null或抛出异常,那么我可以在包装器中回退到AutoMapper。
答案 0 :(得分:1)
嗯,你的自定义映射器有简单的静态方法,所以你可以利用通常的重载分辨率:
public static T Map<T>(Entity1 source) { ... }
public static T Map<T>(Entity2 source) { ... }
public static T Map<T>(EntityN source) { ... }
public static T Map<T>(object source) { ... }
最后一种方法是AutoMapper
后备 - 在没有更多直接过载的情况下使用。
要拨打此电话,您只需执行CustomMapper.Map<DTOEntityX>(whateverValue)
即可。如果您还需要使用实时类型的whateverValue
,则可以使用dynamic
- CustomMapper.Map<DTOEntityX>((dynamic)whateverValue)
;这将解决运行时的最佳重载。
完成转换后,只需删除后备方法,即可完成。