0
我想爲AutoMapper映射引擎創建通用包裝器。我的最終目標是綁定到一個接口。AutoMapper:爲映射引擎創建通用包裝器
public interface IMappingEngine
{
TDestination Map<TSource, TDestination>(TSource source);
}
我會用DI解決它。
然後我基於AutoMapper MappingEngine
創建此接口的實現。
public class AutoMapperMappingEngine : IMappingEngine
{
private readonly ConfigurationStore configurationStore;
private readonly MappingEngine mappingEngine;
public AutoMapperMappingEngine()
{
this.configurationStore = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.Mappers);
this.RegisterMappings();
this.configurationStore.AssertConfigurationIsValid();
this.mappingEngine = new MappingEngine(this.configurationStore);
}
/// <summary>
/// This method registers alternate mappings for already existing mappings.
/// </summary>
private void RegisterMappings()
{
// some code
// this.configurationStore.CreateMap<>
}
public TDestination Map<TSource, TDestination>(TSource source)
{
TDestination mappingResult = this.mappingEngine.Map<TDestination>(source);
return mappingResult;
}
}
但我堅持一個問題。如果我需要同一對類型的兩個以上不同映射,會發生什麼?
IMappingEngine autoMapperMappingEngine;
// Initialize autoMapperMappingEngine
FooModel result;
if(firstCondition)
{
result = autoMapperMappingEngine.Map<FooEntity, FooModel>(entity);
}
else
{
if(secondCondition)
{
result = autoMapperMappingEngine.Map<FooEntity, FooModel>(entity);
}
else
{
result = autoMapperMappingEngine.Map<FooEntity, FooModel>(entity);
}
}
如果我註冊的RegisterMappings
內按順序幾個不同的映射最後映射將重疊的休息。你可以給一些建議如何實現我想要的嗎?
的問題是,你看到的只是我的我堅持一個簡單的問題。我的一般項目有很多層次。在每一層我使用'Mapper.CreateMap <>'方法來註冊我的映射。當我需要一個備用映射時,我需要在某些特殊情況下使用'MappingEngine'。 –
@JosephKatzman對不起,我不明白你的意思?使用配置實例當然應該滿足任何要求,你可以試着解釋爲什麼這不起作用嗎?什麼特殊情況?爲什麼他們不包含具有不同映射的多個配置? – Milney
我有一個大項目。我不能重寫依賴於靜態Mapper.CreateMap <>'的代碼部分。這就是我使用'MappingEngine'的原因。我知道我應該使用上面介紹的接口來重寫我的項目。我們假設不可能重寫它。這對我來說是一個挑戰;)還有其他方法來實現我想要的? –