public static void Main(string[] args) { InvoicingPath InvoicePath = new InvoicingPath(); AvailabilityPath AvailabilityPath = new AvailabilityPath(); (Order order, ProcessConfiguration processConfiguration) = setConfiguration(); Func <Order, Double> CostOfOrder = CalcAdjustedCostofOrder(processConfiguration, InvoicePath, AvailabilityPath); Console.WriteLine(CostOfOrder(order)); Console.ReadLine(); }
/// /// Return AvailabilityPath Composed Funcrtion public static Func <Order, ShippingDate> AvailabilityPathFunc(ProcessConfiguration c, AvailabilityPath spl) { Func <Order, ShippingDate> p = spl.AvailabilityFunctions.Where((x) => x.availabilityChoose == c.availabilityChoice).Select((x) => x.calcAvailability).FirstOrDefault() .Compose(spl.ShippingDateFunctions.Where((x) => x.shippingDateChoose == c.shippingDateChoice).Select((x) => x.calcShippingDate).FirstOrDefault()); return(p); }
//Adjusted Cost for Order public static Func <Order, double> CalcAdjustedCostofOrder(ProcessConfiguration c, InvoicingPath InvoicePath, AvailabilityPath AvailabilityPath) { return((x) => AdjustCost(x, InvoicePathFunc(c, InvoicePath), AvailabilityPathFunc(c, AvailabilityPath))); }