Beispiel #1
0
        private static ButterflyParser LoadStrategiesFromTypes(this ButterflyParser parser, IParseStrategyFactory strategyFactory, IEnumerable<Type> types)
        {
            var strategyInterface = typeof(ParseStrategy);
            types = types.Where(type => type.IsClass && !type.IsAbstract && strategyInterface.IsAssignableFrom(type));

            types.Walk(type => parser.AddStrategy(strategyFactory.Create(type)));

            return parser;
        }
Beispiel #2
0
        /// <summary>
        /// Loads the default parse strategies (everything from the <c>ButterflyNet.Parser.Strategies</c> namespace)
        /// </summary>
        public static ButterflyParser LoadDefaultStrategies(this ButterflyParser parser, IParseStrategyFactory strategyFactory = null)
        {
            var strongType = typeof(StrongStrategy);
            var types = Assembly
                .GetAssembly(strongType)
                .GetTypes()
                .Where(type => type.Namespace == strongType.Namespace && !type.HasAttribute<NonDefaultAttribute>() && !type.HasAttribute<ExcludeAttribute>());

            return parser.LoadStrategiesFromTypes(strategyFactory ?? new DefaultParseStrategyFactory(), types);
        }
Beispiel #3
0
 /// <summary>
 /// Loads all <see cref="ParseStrategy"/> implementations found in the specified assembly
 /// </summary>
 public static ButterflyParser LoadStrategiesFromAssembly(this ButterflyParser parser, IParseStrategyFactory strategyFactory, Assembly assembly)
 {
     return parser.LoadStrategiesFromTypes(strategyFactory, assembly.GetTypes().Where(type => !type.HasAttribute<ExcludeAttribute>()));
 }