/// <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;
            }
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 6
0
        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));
         }
     }
 }
Exemplo n.º 10
0
 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();
 }
Exemplo n.º 12
0
        public void Scanner()
        {
            AssemblyObjectDefinitionScanner scanner = new AssemblyObjectDefinitionScanner();

            scanner.AssemblyHavingType <TheConfigurationClass>();
        }