我如何映射 class 库中的类型而不从该库中泄漏映射的 classes
How can I map types in a class library without mapped classes leaking from that library
我有一个 Web 项目和一个 class 库,我需要映射库中的类型,例如
namespace Library
{
public class Type1 { ... }
internal class Type2 { ... }
public class Repository : IRepository
{
private readonly IMappingEngine mappingEngine;
public Repository(..., IMappingEngine mappingEngine)
{
this.mappingEngine = mappingEngine;
...
}
public void Add(Type1 type1)
{
var type2 = this.mappingEngine.Map<Type1, Type2>(type1);
...
}
}
}
这里的 Type1 是一个域模型类型,而 Type2 是一个 EF 实体对象(为了简洁起见,它们都在同一个命名空间中)。现在在我的存储库中,我想使用 AutoMapper 将 Type1 映射到 Type2。问题是,我只能使用静态映射器创建地图。如果我要在 web 项目中这样做,我必须使 EF classes(例如 Type2)public 以便 web 项目可以看到它们(EF 类型泄漏到 web 项目) .当然,我可以在存储库中调用 Mapper.CreateMap,但感觉不对。
有人知道该怎么办吗?
我最终做的是在Library项目中声明一个静态方法,例如
namespace Library.Infrastructure.AutoMapper
{
public static class Configuration
{
public static void MapTypes()
{
Mapper.CreateMap<Type2, Type1>()
.ConstructUsing(t => new Type1(t.Guid, ...));
...
}
}
}
然后我可以从我的 Web 项目中的 AutoMapper 设置中调用它,如下所示:
namespace Web
{
public class AutoMapperConfig
{
public static void MapTypes(...)
{
...
Library.Infrastructure.AutoMapper.Configuration
.MapTypes();
}
}
}
这样我就可以在启动时映射类型,而不会将库中的类型泄漏到 Web 项目中,也不必在存储库中映射类型。
我有一个 Web 项目和一个 class 库,我需要映射库中的类型,例如
namespace Library
{
public class Type1 { ... }
internal class Type2 { ... }
public class Repository : IRepository
{
private readonly IMappingEngine mappingEngine;
public Repository(..., IMappingEngine mappingEngine)
{
this.mappingEngine = mappingEngine;
...
}
public void Add(Type1 type1)
{
var type2 = this.mappingEngine.Map<Type1, Type2>(type1);
...
}
}
}
这里的 Type1 是一个域模型类型,而 Type2 是一个 EF 实体对象(为了简洁起见,它们都在同一个命名空间中)。现在在我的存储库中,我想使用 AutoMapper 将 Type1 映射到 Type2。问题是,我只能使用静态映射器创建地图。如果我要在 web 项目中这样做,我必须使 EF classes(例如 Type2)public 以便 web 项目可以看到它们(EF 类型泄漏到 web 项目) .当然,我可以在存储库中调用 Mapper.CreateMap,但感觉不对。
有人知道该怎么办吗?
我最终做的是在Library项目中声明一个静态方法,例如
namespace Library.Infrastructure.AutoMapper
{
public static class Configuration
{
public static void MapTypes()
{
Mapper.CreateMap<Type2, Type1>()
.ConstructUsing(t => new Type1(t.Guid, ...));
...
}
}
}
然后我可以从我的 Web 项目中的 AutoMapper 设置中调用它,如下所示:
namespace Web
{
public class AutoMapperConfig
{
public static void MapTypes(...)
{
...
Library.Infrastructure.AutoMapper.Configuration
.MapTypes();
}
}
}
这样我就可以在启动时映射类型,而不会将库中的类型泄漏到 Web 项目中,也不必在存储库中映射类型。