В [прошлой статье][1] я привел пример фабрики для получения реализаций IQuery, но не объяснил механизм ее работы
![][2] _queryFactory.GetQuery()
.Where(Product.ActiveRule)
.OrderBy(x => x.Id)
.Paged(0, 10) // получаем 10 продуктов для первой страницы
// Мы решили подключить полнотекстовый поиск и добавили ElasticSearch, не вопрос:
_queryFactory.GetQuery()
.Where(new FullTextSpecification(«зонтик»))
.All()
// Или EF тормозит и мы решили переделать на хранимую процедуру и Dapper
_queryFactory.GetQuery()
.Where(new DictionarySpecification (someDirctionary))
.All()
В данном материале я хочу поделиться техникой регистрации необходимых компонентов сборки по соглашениям. Сейчас у меня под рукой кодовая база с другой реализацией CQRS, поэтому примеры будут отличаться. Это не принципиально: основная идея остается неизменной.
Допустим у вас есть такой интерфейс, где _ListParams_ – спецификация, приходящая с фронтенда
public interface IListOperation
{
ListResult List(ListParams listParam);
}
**Задача**
Избавить прикладных разработчиков от необходимости написания контроллеров, проекций и сервисов.
[Решение под катом][3]
[1]:
https://habrahabr.ru/post/259829/
[2]:
https://habrastorage.org/files/0b6/bc8/2ac/0b6bc82acd4c43519049cbf6ae280257.jpg
[3]:
https://habrahabr.ru/post/305050/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut