Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AutoMapper:为映射引擎创建通用包装器_C#_Automapper - Fatal编程技术网

C# AutoMapper:为映射引擎创建通用包装器

C# AutoMapper:为映射引擎创建通用包装器,c#,automapper,C#,Automapper,我想为AutoMapper映射引擎创建一个通用包装器。我的最终目标是绑定到接口 public interface IMappingEngine { TDestination Map<TSource, TDestination>(TSource source); } 但我遇到了一个问题。如果同一对类型需要两个以上不同的映射,会发生什么 IMappingEngine autoMapperMappingEngine; // Initialize autoMapperMapping

我想为AutoMapper映射引擎创建一个通用包装器。我的最终目标是绑定到接口

public interface IMappingEngine
{
    TDestination Map<TSource, TDestination>(TSource source);
}
但我遇到了一个问题。如果同一对类型需要两个以上不同的映射,会发生什么

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);
    }
}
IMappingEngine自动映射引擎;
//初始化自动映射引擎
模型结果;
如果(第一个条件)
{
结果=AutoMappingEngine.Map(实体);
} 
其他的
{
如果(第二个条件)
{
结果=AutoMappingEngine.Map(实体);
}
其他的
{
结果=AutoMappingEngine.Map(实体);
}
}

如果我在
RegisterMappings
中按顺序注册几个不同的映射,最后一个映射将与其余映射重叠。你能给我一些建议如何实现我想要的吗

改用实例API


这涉及到创建一个配置并使用它进行映射,以便您可以拥有多个配置。。。当然,您必须扩展您的界面

问题是您只看到了我遇到的一个问题的简单示例。我的一般项目有很多层。在每个层上,我都使用
Mapper.CreateMap
方法注册映射。在某些特殊情况下,当我需要备用映射时,我需要使用
MappingEngine
。@JosephKatzman对不起,我不明白你的意思?使用配置实例当然应该满足任何要求,您能否尝试解释一下为什么这不起作用?什么特殊情况?为什么它们不包括在具有不同映射的多个配置中?我有一个大项目。我无法重写依赖于静态
Mapper.CreateMap
的部分代码。这就是为什么我使用
MappingEngine
。我知道我应该使用上面描述的接口重写我的项目。让我们假设不可能重写它。这对我来说是一个挑战;)还有其他方法可以实现我想要的吗?@JosephKatzman您可以使用映射配置的可选参数扩展接口,然后按照当前不需要的方式进行扩展。这样,您只需更改支持新场景的代码,就可以保留所有不需要执行此操作的旧代码,并实现两全其美!我看不出有什么办法可以改变它,不知怎的。。。
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);
    }
}