none
Autompper Genérico RRS feed

  • Pergunta

  • Olá.

    Estou desenvolvendo uma camada de serviço e idealizei da seguinte forma:

    É passado um parâmetro para a camada de serviço que por sua vez chama o repositório. O repositório retorna os dados segundo o modelo de dados, e é nesse ponto que eu quero usar o automapper para mapear com o modelo que será exposto, ou seja, o modelo do serviço. Segue abaixo a camada de serviço que se comunica com o repositório, é dela que será implementada os serviços.


        public abstract class ServiceBase<T> where T : class
        {
            private readonly IRepository<T> repository;
    
            public ServiceBase(IRepository<T> repository)
            {
                this.repository = repository;
            }
    
            public virtual T GetById(long id)
            {
                return repository.GetById(id);
            }
            public virtual T GetById(string id)
            {
                return repository.GetById(id);
            }
            public virtual IEnumerable<T> GetAll()
            {
                return repository.GetAll();
            }
            public virtual IEnumerable<T> GetMany(Expression<Func<T, bool>> where)
            {
                return repository.GetMany(where);
            }
            public T Get(Expression<Func<T, bool>> where)
            {
                return repository.GetMany(where).FirstOrDefault<T>();
            } 
        }
    

    Segue a implementação do serviço base:

        public class TipoService : ServiceBase<Tipo>, ITipoService
        {
    
            public TipoService(ITipoRepository tipoRepository) : base(tipoRepository)
            {
            }
        }
    
        public interface ITipoService : IService<Tipo>
        {
    
        }
    


    sexta-feira, 21 de fevereiro de 2014 16:51

Todas as Respostas

  • Acho que seria mais ou menos assim, mas como chamar o repository?

        public abstract class ServiceBase<T, TDominio, TModelo> where T : class
        {
            private readonly IRepository<T> repository;
    
            public ServiceBase(IRepository<T> repository)
            {
                this.repository = repository;
            }
    
            public IList<TDominio> GetAll(Func<T, IQueryable<TModelo>> func)
            {
                var list = Mapper.Map<TModelo[], TDominio[]>("Chamar repositório");
                return list.ToList();
            }
    
            public TDominio GetById(Func<T, TModelo> func)
            {
                return Mapper.Map<TModelo, TDominio>(func.Invoke("Chamar repositório"));
            }
    
        }
    


    sexta-feira, 21 de fevereiro de 2014 17:51