需要参数化类型';s方法应用于存储库的实现

本文关键字:存储 应用于 实现 方法 参数化类型 | 更新日期: 2023-09-27 18:00:55

我有一个Repository类:

public class Repository<T> where T : IMappable
{
     public virtual List<IMappable> Get()
     {
          return new DataProvider().Get(/* somehow use T's Map() method */);
     }
}
internal class DataProvider
{
     public delegate IMappable Mapper(Object dataSource);
     public List<IMappable> Get(Mapper mapper)
     {
          List<IMappable> mappables = new List<IMappable>();
          //Paraphrasing
          foreach(var ds in dataSource)
          {
              mappables.Add(mapper(ds));
          }
          return mappables;
     }
}
public interface IMappable
{
     IMappable Map(Object dataSource);
}

当我生成Repository<TypeThatImplementsIMappable>时,我希望将其传递给使用泛型类型的Map方法。出于性能原因,我不能使用反射或代码DOM(我想这是允许我们具有的性能的截止点(。如何做到这一点?

需要参数化类型';s方法应用于存储库的实现

您可以向T:添加new约束

public class Repository<T> where T : IMappable, new()
{
     public virtual List<IMappable> Get()
     {
          T mapper = new T();
          return new DataProvider().Get(mapper.Map);
     }
}