получить тип из библиотеки сборки - PullRequest
2 голосов
/ 21 января 2020

Я хочу создать. NET Core REST API с MediatR. Мои проекты

  • Проект API
  • Проект приложения, содержащий команды, запросы и поведение конвейера

Чтобы настроить внедрение зависимостей, я должен вызвать

services.AddMediatR(typeof(Startup));

в методе ConfigureServices Startup.cs (проект API). Мои команды и запросы поступают из другой сборки (приложения), поэтому я должен передать библиотечную сборку вместо запуска. Пожалуйста, смотрите ответ из этого поста

Почему Mediatr не разрешает метод, когда энтиты находятся в разных проектах?

Мой код должен выглядеть как

services.AddMediatR(typeof(ApplicationAssembly));

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


Я решил это, передав класс из этой библиотеки

services.AddMediatR(typeof(Application.Queries.GetUsersQuery));

Я думаю, что это действительно плохой подход, потому что когда этот класс перемещается или удаляется, проекты API также должны быть исправлены.

Поэтому любые более лучшие решения высоко ценятся

1 Ответ

2 голосов
/ 03 февраля 2020

Если я правильно понял, вам нужно передать информацию о типе из сборки, а не указывать c типы классов.

В проекте github расширений вы увидите эту строку в примерах

..... или со сборкой:

services.AddMediatR (typeof (Startup) .GetTypeInfo (). Assembly);

То, что вы ищете, я думаю.
В вашем случае код будет выглядеть примерно так:

services.AddMediatR(typeof(GetUsersQuery).GetTypeInfo().Assembly);  

Если вы хотите быть полностью независимым от затем введите тип

services.AddMediatR(AppDomain.Current.GetAssemblies());  

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

...