public void Should_be_able_to_Scan_for_the_Specification_and_Register()
        {
            SpecificationScanner.ScanSpecificationInAssembly <CustomerSpecification>();
            var Specification = SpecificationScanner.container.GetInstance <ISpecification <Customer> >();

            Specification.Should().BeOfType <CustomerSpecification>();
        }
예제 #2
0
        public void Should_Apply_all_the_Rule_and_execute()
        {
            SpecificationScanner.ScanSpecificationInAssembly <CustomerSpecification>();
            IRuleEngine ruleEngine = new RuleEngine();

            ruleEngine.ExecuteRules <Customer>(new Customer {
                PurchasedAmount = 100001
            }).customerType.Should().Be(CustomerType.Premium);
        }
        /// <summary>
        /// The scan for specification.
        /// </summary>
        /// <param name="isForce">
        /// The is force.
        /// </param>
        public static void ScanForSpecification(bool isForce = false)
        {
            isForce = isForce || foundSpecifications == null;

            if (!isForce)
            {
                return;
            }

            var scanner = new SpecificationScanner();

            scanner.AddAssemblies(CurrentDomainTypes.GetAssemblies().ToList());

            var fieldSpecsFound = scanner.GetType().GetField("_specifications", BindingFlags.Instance | BindingFlags.NonPublic);

            foundSpecifications = (List <Type>)fieldSpecsFound.GetValue(scanner);

            if (foundSpecifications.Count == 0)
            {
                foundSpecifications.Add(typeof(DummySpecification));
            }
        }