Предположим, что есть некоторая многоуровневая система, которую необходимо сконфигурировать.
Например, стандартные методы контроллера типа CRUD, консюмеры, продюсеры и т.д. Это можно сделать стандартными средствами библиотек (через ServiceCollectionExtentions), а можно накрутить свой конфигуратор со своим DSL.
Что-то типа:
Configuration()
.DefineCrudController()
.ForEntity<Order>()
.WithEntityFrameworkContext<MyDbContext>()
.EndDefineCrudController()
.DefineConsumer<MyOrdersConsumer>()
.ForChannel("my-queue")
.EndDefineConsumer<>()
Потом это все разматывается и вызываются соответствующие вызовы ServiceCollectionExtentions библиотек.
Главный плюс этого подхода — декларативность, мы собираем в одном модуле всю логическую структуру, т.е. можем эти модули независимо друг от друга компоновать и управлять (разделяй и властвуй).
Но, какие еще варианты есть в C# задать этот самый DSL, кроме описанного приема MethodsChain?
Xml/Json — нет проверки типов при компиляции, есть вариант нацепить на них
source generators, но пока там все "сырое".