public InventoryManager( ISendsEmails emailer, IAmqpQueue queue, IDatabase database, IRecipesApi recipesApi) { _emailer = emailer; _queue = queue; _database = database; _recipesApi = recipesApi; }
/// <summary> /// Invoked by the client (our Main method). This method decides based on data at run-time /// which DeliveryCreator type we're eventually binding. Thanks to (dynamic) polymorphism, the /// compiler is cool with us declaring the return type of this method as an abstract type. /// even though it will return a concrete subclass. /// In this case, the decision of which concrete type will eventually be bound is made by evaluating the /// value of a string `deliveryType` provided by the user of our client. /// </summary> /// <param name="deliveryType"></param> /// <param name="deliveryQueue"></param> /// <returns></returns> public static DeliveryCreator BuildDeliveryCreator(string deliveryType, IAmqpQueue deliveryQueue) { var logger = new ConsoleLogger(); List <string> validDeliveryOptions = new() { "bicycle", "car" }; if (!validDeliveryOptions.Contains(deliveryType)) { logger.LogInfo("Please enter a type of delivery [bicycle, car]"); throw new InvalidOperationException("Cannot set up delivery without valid deliveryType."); } return(deliveryType switch { "bicycle" => new BicycleDeliveryCreator(deliveryQueue, logger), "car" => new CarDeliveryCreator(deliveryQueue, logger), _ => throw new InvalidOperationException("Cannot set up delivery without valid Delivery Type."), }); }
public DeliveryCreator(IAmqpQueue deliveryQueue, IApplicationLogger logger) { _deliveryQueue = deliveryQueue; _logger = logger; }
public AddressQueueCommand(IApplicationLogger logger, IAmqpQueue queue, string address) { _logger = logger; _queue = queue; _address = address; }
public CarDeliveryCreator(IAmqpQueue deliveryQueue, IApplicationLogger logger) : base(deliveryQueue, logger) { }
public SmsMessageDecorator(Notifier component, IAmqpQueue queue) : base(component) { _queue = queue; }