예제 #1
0
        public double GetTotal()
        {
            List <Type> priceCaluclatorImplementations = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes())
                                                         .Where(x => typeof(ProductPriceCalculatorDec).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract).ToList();

            IProductPriceCalculator priceCalculator = new PriceCalculator(Items);

            priceCalculator.CalculatePrice();

            foreach (var implementation in priceCaluclatorImplementations)
            {
                priceCalculator = (IProductPriceCalculator)Activator.CreateInstance(implementation, new object[] { priceCalculator });
                priceCalculator.CalculatePrice();
            }


            _logger.Info(new { ItemsInfo = priceCalculator.Items, AppliedDiscounts = priceCalculator.GetAppliedDiscounts() });

            return(priceCalculator.GetTotal());
        }