如何映射类库中的类型而不会从该库中泄漏映射的类

本文关键字:映射 泄漏 类库 何映射 类型 | 更新日期: 2023-09-27 17:50:27

我有一个web项目和一个类库,我需要映射库中的类型,例如

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。问题是,我只能使用静态Mapper创建映射。如果我要在web项目中这样做,我必须使EF类(例如Type2)公开,以便web项目可以看到它们(EF类型泄漏到web项目)。当然,我可以调用Mapper。creatatemap在Repository中,但是感觉不太对。

有人知道该怎么做吗?

如何映射类库中的类型而不会从该库中泄漏映射的类

我最后做的是在Library项目中声明一个静态方法,如

namespace Library.Infrastructure.AutoMapper
{
   public static class Configuration
   {
      public static void MapTypes()
      {
         Mapper.CreateMap<Type2, Type1>()
            .ConstructUsing(t => new Type1(t.Guid, ...));
         ...
      }
   }
}

,然后我可以从我的AutoMapper设置在我的web项目中调用,像这样:

namespace Web
{
   public class AutoMapperConfig
   {
      public static void MapTypes(...)
      {
         ...
         Library.Infrastructure.AutoMapper.Configuration
            .MapTypes();
      }
   }
}

这样我就可以在启动时映射类型,而不必将库中的类型泄漏到web项目中,也不必在存储库中映射类型。