2014-04-30 4 views
0

У меня есть 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 по соображениям производительности (я думаю, это отсечка для производительности, которую нам разрешено иметь). Как это может быть сделано?

ответ

1

Вы можете добавить new ограничение на T:

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

Спасибо, забыл совсем о том, что ограничение :) – jokulmorder

Смежные вопросы