[#] Рентабельный код 3: Немного особой контейнерной магии
habrabot(difrex,1) — All
2016-07-07 18:30:04


В [прошлой статье][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