к силосам.
Генерим апи контроллеры по грейнам через Source Generator.
Соответственно: интерфейс грейна = контроллер, метод грейна = экшн. И сам контроллер, получается, дёргает грейны.
Все аргументы метода грейна оборачиваем в сгенерированный реквест класс.
Итого получается следующая структура проектов:
XZ.Models - доменная модель
XZ.Grains.Interfaces - интерфейсы грейнов
XZ.Grains - реализация грейнов
XZ.ApiService - фасад, который ссылается на модели и интерфейсы
XZ.ApiService.Client - rest клиент, ссылается на модели, генерится через nswag без автогенерации моделей.
Проблема: сейчас реквесты генерируются в сборке с апи сервисом. А значит в клиенте к ним нет доступа, но отдать на генерацию все модели nswag-у я не хочу, он часто туфту генерит.
Появилась мысль:
Ввести сборку XZ.ApiService.Contracts, на которую будет ссылаться апи сервис и клиент. Вот в неё я хочу нагенерить те самые классы реквестов. Но нет прямого доступа к интерфейсам грейнов.
И есть ограничение: апи клиент net standard, а все орлеановское .net 5, плюс, нахрена ссылаться апи клиенту на интерфейсы грейнов.
Вопрос: как можно нагенерить код в сборку по интерфейсам из другой сборки без добавления ссылки на проект в XZ.ApiService.Contracts?
Можно добавить референс на либу с интерфейсами орлеанса через ReferenceOutputAssembly=false
Не прокатит. Апи клиент нет стандарт, а интерфейсы орлеана на net 5. Именно поэтому у нас есть апи прокси, потому что не все потребители могут резко съехать на .net 5 :) поэтому для них пилим рест.
Обсуждают сегодня