Chciałbym mieć możliwość zrobienia czegoś takiego:
var users = repo.GetUsers<UserViewModel>(); // powinno być typu IEnumerable<UserViewModel>
var anotherUsers = repo.GetUsers<AnotherUserViewModel>(); // powinno być typu IEnumerable<AnotherUserViewModel>
Skorzystałem więc z AutoMapper
. Repozytorium wygląda tak:
public IEnumerable<T> GetUsers<T>()
{
Mapper.Initialize(cfg =>
cfg.CreateMap<IQueryable<User>, IQueryable<T>>());
return OnConnect<IEnumerable<T>>(db =>
{
return db.Users.ProjectTo<T>().ToList();
});
}
Za pierwszym razem zadziała, za drugim nie. No w końcu inicjalizację muszę zrobić tylko raz. Wyglądałoby to wtedy tak:
Mapper.Initialize(cfg => {
cfg.CreateMap<User, UserViewModel>();
cfg.CreateMap<User, AnotherUserViewModel>();
...
cfg.CreateMap<User, BlablaUserViewModel>();
});
No i jeśli w projekcie mam 100 viewModeli, to muszę dodać 100 linii kodu? Nie da się tego zrobić prościej? Po co w ogóle jest ta inicjalizacja? Nie mogę w jednej linii wskazać z jakiego typu na jaki ma zamienić?