/// <summary> /// Scans for types using the provided scanner. /// </summary> /// <param name="context">The context.</param> /// <param name="scanner">The scanner.</param> public static void Scan(this GenericApplicationContext context, AssemblyObjectDefinitionScanner scanner) { var registry = context.ObjectFactory as IObjectDefinitionRegistry; scanner.ScanAndRegisterTypes(registry); AttributeConfigUtils.RegisterAttributeConfigProcessors(registry); }
private void ParseNameGeneratorAttribute(AssemblyObjectDefinitionScanner scanner, XmlElement element) { var nameGeneratorString = element.GetAttribute(NAME_GENERATOR_ATTRIBUTE); var nameGenerator = CustomTypeFactory.GetNameGenerator(nameGeneratorString); if (nameGenerator != null) { scanner.ObjectNameGenerator = nameGenerator; } }
/// <summary> /// Parse the specified XmlElement and register the resulting /// ObjectDefinitions with the <see cref="P:Spring.Objects.Factory.Xml.ParserContext.Registry"/> IObjectDefinitionRegistry /// embedded in the supplied <see cref="T:Spring.Objects.Factory.Xml.ParserContext"/> /// </summary> /// <param name="element">The element to be parsed.</param> /// <param name="parserContext">TThe object encapsulating the current state of the parsing process. /// Provides access to a IObjectDefinitionRegistry</param> /// <returns>The primary object definition.</returns> /// <remarks> /// <p> /// This method is never invoked if the parser is namespace aware /// and was called to process the root node. /// </p> /// </remarks> public IObjectDefinition ParseElement(XmlElement element, ParserContext parserContext) { AssemblyObjectDefinitionScanner scanner = ConfigureScanner(parserContext, element); IObjectDefinitionRegistry registry = parserContext.Registry; // Actually scan for objects definitions and register them. scanner.ScanAndRegisterTypes(registry); RegisterComponents(element, registry); return(null); }
/// <summary> /// Configures the scanner. /// </summary> /// <param name="parserContext">The parser context.</param> /// <param name="element">The element.</param> /// <returns></returns> protected virtual AssemblyObjectDefinitionScanner ConfigureScanner(ParserContext parserContext, XmlElement element) { var scanner = new AssemblyObjectDefinitionScanner(); ParseBaseAssembliesAttribute(scanner, element); ParseNameGeneratorAttribute(scanner, element); ParseTypeFilters(scanner, element); scanner.Defaults = parserContext.ParserHelper.Defaults; return(scanner); }
/// <summary> /// Scans for types that satisfy specified predicates located in the specified scan path. /// </summary> /// <param name="context">The context.</param> /// <param name="assemblyScanPath">The assembly scan path.</param> /// <param name="assemblyPredicate">The assembly predicate.</param> /// <param name="typePredicate">The type predicate.</param> public static void Scan(this GenericApplicationContext context, string assemblyScanPath, Predicate <Assembly> assemblyPredicate, Predicate <Type> typePredicate) { //create a scanner instance using the scan path var scanner = new AssemblyObjectDefinitionScanner(); //configure the scanner per the provided constraints scanner.WithAssemblyFilter(assemblyPredicate).WithIncludeFilter(typePredicate); //pass the scanner to primary Scan method to actually do the work Scan(context, scanner); }
public void Can_Filter_For_Specific_Types_With_Multiple_Include_Filters() { var scanner = new AssemblyObjectDefinitionScanner(); scanner.WithIncludeFilter(type => type.FullName.Contains(typeof(TheImportedConfigurationClass).Name)); scanner.WithIncludeFilter(type => type.FullName.Contains(typeof(TheConfigurationClass).Name)); _context.Scan(scanner); _context.Refresh(); AssertExpectedObjectsAreRegisteredWith(_context, 19); }
/// <summary> /// Scans the specified context. /// </summary> /// <param name="context">The context.</param> /// <param name="assemblyScanPath">The assembly scan path.</param> /// <param name="assemblyPredicate">The assembly predicate.</param> /// <param name="typePredicate">The type predicate.</param> /// <param name="assembliesToScan">The assemblies to scan.</param> public static void Scan(this GenericApplicationContext context, string assemblyScanPath, Func <Assembly, bool> assemblyPredicate, Func <Type, bool> typePredicate, params string[] assembliesToScan) { AssemblyObjectDefinitionScanner scanner = ArrayUtils.HasElements(assembliesToScan) ? new AssemblyObjectDefinitionScanner(assembliesToScan) : new AssemblyObjectDefinitionScanner(); scanner.ScanStartFolderPath = assemblyScanPath; //configure the scanner per the provided constraints scanner.WithAssemblyFilter(assemblyPredicate).WithIncludeFilter(typePredicate); //pass the scanner to primary Scan method to actually do the work Scan(context, scanner); }
private void ParseBaseAssembliesAttribute(AssemblyObjectDefinitionScanner scanner, XmlElement element) { var baseAssemblies = element.GetAttribute(BASE_ASSEMBLIES_ATTRIBUTE); if (string.IsNullOrEmpty(baseAssemblies)) { return; } foreach (var baseAssembly in baseAssemblies.Split(',')) { scanner.WithAssemblyFilter(assy => assy.FullName.StartsWith(baseAssembly)); } }
private void ParseTypeFilters(AssemblyObjectDefinitionScanner scanner, XmlElement element) { foreach (XmlNode node in element.ChildNodes) { if (node.Name.Contains(INCLUDE_FILTER_ELEMENT)) { scanner.WithIncludeFilter(CreateTypeFilter(node)); } else if (node.Name.Contains(EXCLUDE_FILTER_ELEMENT)) { scanner.WithExcludeFilter(CreateTypeFilter(node)); } } }
private void ParseTypeFilters(AssemblyObjectDefinitionScanner scanner, XmlElement element) { foreach (XmlNode node in element.ChildNodes) { if (node.Name.Contains(INCLUDE_FILTER_ELEMENT)) { var filter = CreateTypeFilter(node); Logger.Debug(m => m("Inlude Filter: {0}", filter)); scanner.WithIncludeFilter(filter); } else if (node.Name.Contains(EXCLUDE_FILTER_ELEMENT)) { var filter = CreateTypeFilter(node); Logger.Debug(m => m("Exclude Filter: {0}", filter)); scanner.WithExcludeFilter(filter); } } }
public void _TestSetup() { context = new CodeConfigApplicationContext(); scanner = new AssemblyObjectDefinitionScanner(); }
public void Scanner() { AssemblyObjectDefinitionScanner scanner = new AssemblyObjectDefinitionScanner(); scanner.AssemblyHavingType <TheConfigurationClass>(); }