Использование AutoMapper в .NET Core в проекте библиотеки - PullRequest
0 голосов
/ 21 марта 2019

Это структура решения:

  • MyProject.WebApplication
  • MyProject.Core
  • MyProject.DAL

Сервисы расположены в MyProject.Core. Поэтому я хочу использовать сопоставление между моделями, которые исходят из MyProject.DAL. (Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection)

return _mapper.Map<Core.Model>(DAL.model);

и, конечно, наоборот.

Вопрос: нужно ли ссылаться на AutoMapper в обоих проектах?

Или создайте класс ConfigureAutoMapper в MyProject.Core и вызовите его в классе запуска MyProject.WebApplication?

Но как насчет этого?

services.AddAutoMapper();

1 Ответ

0 голосов
/ 21 марта 2019

Поскольку в ваших сервисах будет выполнено преобразование в обоих направлениях, просто оберните autopper во вставленный интерфейс, и все готово.Все должно быть сделано в MyProject.Core.

РЕДАКТИРОВАТЬ:

Что касается услуг, это зависит от того, как вы их создаете.По сути, вам нужен сервис отображения, поэтому создайте его как любой другой сервис и внедрите его в классы, которые требуют отображения.

Мне нравится этот шаблон:

public class MyService : IMyService
{
  public MyService(IDepedencySolver ds, IRepository rep = null, IMapper mapper = null)
  { 
     _rep = rep ?? ds.GetService<IDependencySolver>();
     _mapper = mapper ?? ds.GetService<IMapper>();



    ...
   }
}

Он позволяет вам вводить либо просто распознаватель служб, например Autofac / Splat / etc, либо вставлять все как фиктивные в тестах.

Некоторым людям нравится иметь преобразователь по умолчанию в качестве статической переменной, чтобы избежать первого аргумента.

Итак, чтобы ответить на вопрос, нужна ли вам ссылка на AM в обоих проектах: нет, только в MyProject.Ядро, где вы на самом деле используете классы Automapper.

Вы должны обернуть их в IMapperService или что-то в этом роде.Затем в MVC, когда вы регистрируете сервисы, вы регистрируете экземпляр new MapperService() - и для этого вам нужна только ссылка на MyProject.Core

...