Автоматическое сопоставление внутренних сервисных ссылок

Я создаю библиотеку aC#, которая использует сервисные ссылки. Я не хочу, чтобы весь сервис был доступен за пределами библиотеки. Поэтому я сначала использовал AutoMapper для копирования нужных мне классов обслуживания в похожие классы в моей библиотеке. Вторым шагом было сделать ссылки на сервисы внутренними. Моя главная проблема сейчас заключается в том, что нет библиотек автоматического сопоставления, которые поддерживают внутренний доступ. Я пробовал библиотеки AutoMapper, EmitMapper и ValueInjecter, и все мои скопированные объекты имеют значения null / default. У AutoMapper есть проблема с github, связанная с поддержкой внутренних, но нет никаких указаний на то, когда мы ее увидим.

Я решил попробовать что-то странное: сериализовать класс обслуживания с помощью JSON.NET, а затем десериализовать его в класс библиотеки. Это работает довольно хорошо, но мне интересно, как это сравнивается с библиотеками, такими как AutoMapper, с точки зрения производительности. Я знаю, что EmitMapper король, насколько производительность.

Кто-нибудь нашел решение для автоматического сопоставления, которое работает для внутренних органов?

1 ответ

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

Я создаю 10000 объектов, которые имеют 6 строковых свойств, которые установлены как GUID. Каждый тест проходит через эти объекты, автоматически сопоставляя их с новым объектом другого типа. Я запускаю тест 10 раз для каждой библиотеки автоматического сопоставления и вычисляю среднее время для каждого теста в миллисекундах.

  1. EmitMapper Среднее время: 6,96822 миллисекунд
  2. ValueInjector Среднее время: 71,87465 миллисекунд
  3. AutoMapper Среднее время: 116,4615 миллисекунд
  4. JsonMapper Среднее время: 154.02429 миллисекунд

Основная цель этого заключалась в том, чтобы определить, является ли использование JSON.NET реалистичной альтернативой другим основным библиотекам автоматического сопоставления. Вначале он кажется конкурентоспособным с AutoMapper, поэтому я думаю, что у меня есть ответ.

Другие вопросы по тегам