Sto prendendo una brutta copia scrivendo il mio primo DSL per un semplice strumento al lavoro. Sto usando il pattern builder per configurare l'oggetto genitore complesso, ma sto correndo su muri di mattoni per costruire le collezioni figlio dell'oggetto genitore. Ecco un esempio:Scrivere il mio primo DSL in C# e rimanere agganciato su func <T> e azione
Usa: metodo
var myMorningCoffee = Coffee.Make.WithCream().PourIn(
x => {
x.ShotOfExpresso.AtTemperature(100);
x.ShotOfExpresso.AtTemperature(100).OfPremiumType();
}
).WithOuncesToServe(16);
classe Sample (senza il bambino pourin() come questo:
var myMorningCoffee = Coffee.Make.WithCream().WithOuncesToServe(16);
campione con chiusura (credo che sia come si chiamano) è quello che sto cercando di capire.)
public class Coffee
{
private bool _cream;
public Coffee Make { get new Coffee(); }
public Coffee WithCream()
{
_cream = true;
return this;
}
public Coffee WithOuncesToServe(int ounces)
{
_ounces = ounces;
return this;
}
}
Quindi nella mia app per lavoro ho il complesso oggetto di costruzione appena bene, ma non posso per la vita di me capire come ottenere il lambda codificato per la sub collection sull'oggetto genitore. (in questo esempio sono gli scatti (collezione bambino) di expresso).
Forse sto confondendo i concetti qui e non mi importa di essere diretto; tuttavia, mi piace molto come si legge e vorrei capire come farlo funzionare.
Grazie, Sam
Devo essere sincero; questo è veramente un uso terribile di un DSL, IMHO. Mi legge orribilmente. Ma a ciascuno il suo, suppongo. –
Quindi qual è il tuo problema? Tutto questo codice sembra proprietario, quindi non abbiamo modo di sapere cosa significhi. Ad esempio, qual è il tipo di parametro di IncludeApps? – tster
Puoi pubblicare la firma per il metodo IncludeApps? –