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; }
/// <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); }
/// <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>())); }