diff --git a/src/Spring/Spring.Core/Context/Attributes/AssemblyObjectDefinitionScanner.cs b/src/Spring/Spring.Core/Context/Attributes/AssemblyObjectDefinitionScanner.cs index cb86ef5a..093c2f0a 100644 --- a/src/Spring/Spring.Core/Context/Attributes/AssemblyObjectDefinitionScanner.cs +++ b/src/Spring/Spring.Core/Context/Attributes/AssemblyObjectDefinitionScanner.cs @@ -35,28 +35,20 @@ namespace Spring.Context.Attributes { private readonly List> _assemblyExclusionPredicates = new List>(); - private readonly IList _springAssemblies = new List() - { - "Spring.Core", - "Spring.Core.Configuration", - "Spring.Aop", - "Spring.Data", - "Spring.Services", - "Spring.Messaging", - "Spring.Messaging.Ems", - "Spring.Messaging.Nms", - "Spring.Template.Velocity", - "Spring.Messaging.Quartz", - "Spring.Testing.Microsoft", - "Spring.Testing.Nunit", - "Spring.Data.NHibernate12", - "Spring.Data.NHibernate21", - "Spring.Data.NHibernate20", - "Spring.Data.NHibernate30", - "Spring.Web", - "Spring.Web.Extensions", - "Spring.Web.Mvc", - }; + private readonly IList _springAssemblyExcludePrefixes = new List() + { + "Spring.", + "NHibernate.", + "Common.Logging.", + "log4net", + "Quartz" + }; + + //TODO: HACK -- required to permit testing since testing assy also starts with excluded name "Spring." + private readonly IList _springAssemblyIncludeNames = new List() + { + "Spring.Core.Tests" + }; private IObjectNameGenerator _objectNameGenerator = new AttributeObjectNameGenerator(); @@ -122,7 +114,7 @@ namespace Spring.Context.Attributes try { return Attribute.GetCustomAttribute(type, typeof(ComponentAttribute), true) != null && - !type.IsAbstract; + !type.IsAbstract; } catch (AmbiguousMatchException) { @@ -135,7 +127,7 @@ namespace Spring.Context.Attributes foreach (CustomAttributeData customAttributeData in CustomAttributeData.GetCustomAttributes(type)) { - if (customAttributeData.Constructor.DeclaringType != null && + if (customAttributeData.Constructor.DeclaringType != null && (customAttributeData.Constructor.DeclaringType.FullName == typeof(ComponentAttribute).FullName && !type.IsAbstract)) { @@ -156,7 +148,9 @@ namespace Spring.Context.Attributes base.SetDefaultFilters(); //add the desired assembly exclusions to the list - _assemblyExclusionPredicates.Add(a => _springAssemblies.Contains(a.GetName().Name)); + _assemblyExclusionPredicates.Add(a => _springAssemblyExcludePrefixes.Any(n => n.StartsWith(a.GetName().Name))); + //_assemblyExclusionPredicates.Add(a => a.GetName().Name.StartsWith(_springAssemblyPrefix)); + //_assemblyExclusionPredicates.Add(a => _springAssemblies.Contains(a.GetName().Name)); _assemblyExclusionPredicates.Add(a => a.GetName().Name.StartsWith("System.")); _assemblyExclusionPredicates.Add(a => a.GetName().Name.StartsWith("Microsoft.")); _assemblyExclusionPredicates.Add(a => a.GetName().Name == "mscorlib"); @@ -178,7 +172,9 @@ namespace Spring.Context.Attributes /// public AssemblyObjectDefinitionScanner() { - AssemblyLoadExclusionPredicates.Add(name => _springAssemblies.Contains(name)); + //AssemblyLoadExclusionPredicates.Add(name => _springAssemblyExcludePrefixes.Any(n => name.StartsWith(n) && !name.Contains(".Tests"))); + AssemblyLoadExclusionPredicates.Add(candidate => _springAssemblyExcludePrefixes.Any(excludeName => candidate.StartsWith(excludeName) && _springAssemblyIncludeNames.All(includeName => includeName != candidate))); + //AssemblyLoadExclusionPredicates.Add(name => _springAssemblies.Contains(name)); AssemblyLoadExclusionPredicates.Add(name => name.StartsWith("System.")); AssemblyLoadExclusionPredicates.Add(name => name.StartsWith("Microsoft.")); AssemblyLoadExclusionPredicates.Add(name => name == "mscorlib"); diff --git a/test/Spring/Spring.Core.Tests/Context/Attributes/AssemblyTypeScannerTests.cs b/test/Spring/Spring.Core.Tests/Context/Attributes/AssemblyTypeScannerTests.cs index f7e2bab7..ac4c8ded 100644 --- a/test/Spring/Spring.Core.Tests/Context/Attributes/AssemblyTypeScannerTests.cs +++ b/test/Spring/Spring.Core.Tests/Context/Attributes/AssemblyTypeScannerTests.cs @@ -45,7 +45,7 @@ namespace Spring.Context.Attributes public void AssemblyHavingType_T_Adds_Assembly() { _scanner.AssemblyHavingType(); - Assert.That(TypeSources.Any(t => t.Contains(typeof (IOrdered)))); + Assert.That(TypeSources.Any(t => t.Contains(typeof(IOrdered)))); } [Test] @@ -54,8 +54,8 @@ namespace Spring.Context.Attributes _scanner.IncludeType(); _scanner.IncludeType(); - IncludePredicates.Any(p => p(typeof (IOrdered))); - IncludePredicates.Any(p => p(typeof (IPriorityOrdered))); + IncludePredicates.Any(p => p(typeof(IOrdered))); + IncludePredicates.Any(p => p(typeof(IPriorityOrdered))); } [Test] @@ -66,23 +66,14 @@ namespace Spring.Context.Attributes _scanner.IncludeType(); _scanner.IncludeType(); _scanner.WithExcludeFilter(t => t.Name.StartsWith("TheImported")); - try - { - IEnumerable types = _scanner.Scan(); + + IEnumerable types = _scanner.Scan(); - //Assert.That(types.Any(t => t.Name == "TheConfigurationClass")); - //Assert.False(types.Any(t => t.Name == "TheImportedConfigurationClass")); + //Assert.That(types.Any(t => t.Name == "TheConfigurationClass")); + //Assert.False(types.Any(t => t.Name == "TheImportedConfigurationClass")); - Assert.That(types, Contains.Item((typeof (TheConfigurationClass)))); - Assert.False(types.Contains(typeof (TheImportedConfigurationClass))); - } catch (ReflectionTypeLoadException e) - { - //Console.WriteLine(e); - foreach (var ee in e.LoaderExceptions) - { - //Console.WriteLine(ee); - } - } + Assert.That(types, Contains.Item((typeof(TheConfigurationClass)))); + Assert.False(types.Contains(typeof(TheImportedConfigurationClass))); } [Test] @@ -91,10 +82,10 @@ namespace Spring.Context.Attributes _scanner.WithIncludeFilter(t => t.Name.Contains("ConfigurationClass")); IEnumerable types = _scanner.Scan(); - - Assert.That(types, Contains.Item((typeof (TheConfigurationClass)))); - Assert.That(types, Contains.Item((typeof (TheImportedConfigurationClass)))); - Assert.That(types.Count(),Is.EqualTo(2)); + + Assert.That(types, Contains.Item((typeof(TheConfigurationClass)))); + Assert.That(types, Contains.Item((typeof(TheImportedConfigurationClass)))); + Assert.That(types.Count(), Is.EqualTo(2)); } [Serializable] @@ -115,7 +106,7 @@ namespace Spring.Context.Attributes //get at the collection of excludePredicates from the private field //(yuck!-- test smell, but at least its wrapped up in a neat private property getter!) return - (List>) (ReflectionUtils.GetInstanceFieldValue(_scanner, "TypeExclusionPredicates")); + (List>)(ReflectionUtils.GetInstanceFieldValue(_scanner, "TypeExclusionPredicates")); } } @@ -126,7 +117,7 @@ namespace Spring.Context.Attributes //get at the collection of includePredicates from the private field //(yuck!-- test smell, but at least its wrapped up in a neat private property getter!) return - (List>) (ReflectionUtils.GetInstanceFieldValue(_scanner, "TypeInclusionPredicates")); + (List>)(ReflectionUtils.GetInstanceFieldValue(_scanner, "TypeInclusionPredicates")); } } @@ -136,7 +127,7 @@ namespace Spring.Context.Attributes { //get at the collection of typeSources from the private field //(yuck!-- test smell, but at least its wrapped up in a neat private property getter!) - return (List>) (ReflectionUtils.GetInstanceFieldValue(_scanner, "TypeSources")); + return (List>)(ReflectionUtils.GetInstanceFieldValue(_scanner, "TypeSources")); } } }