From: <jer...@us...> - 2009-09-16 00:06:37
|
Revision: 262 http://structuremap.svn.sourceforge.net/structuremap/?rev=262&view=rev Author: jeremydmiller Date: 2009-09-16 00:06:24 +0000 (Wed, 16 Sep 2009) Log Message: ----------- changing the concrete class behavior so that it can still build a concrete class that is not specified, but it doesn't get into the GetAllInstances() Modified Paths: -------------- trunk/Source/StructureMap/Graph/AssemblyScanner.cs trunk/Source/StructureMap/Graph/PluginFamily.cs trunk/Source/StructureMap/PipelineGraph.cs trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs trunk/Source/StructureMap.Testing/Graph/TypeFindingTester.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj Added Paths: ----------- trunk/Source/StructureMap.Testing/ConcreteClassCreationTester.cs Modified: trunk/Source/StructureMap/Graph/AssemblyScanner.cs =================================================================== --- trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-09-13 14:12:42 UTC (rev 261) +++ trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-09-16 00:06:24 UTC (rev 262) @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Linq; using System.Reflection; @@ -404,9 +405,7 @@ public void AssembliesFromApplicationBaseDirectory() { - var baseDirectory = AppDomain.CurrentDomain.BaseDirectory; - - AssembliesFromPath(baseDirectory, a => true); + AssembliesFromApplicationBaseDirectory(a => true); } public void AssembliesFromApplicationBaseDirectory(Predicate<Assembly> assemblyFilter) @@ -414,6 +413,13 @@ var baseDirectory = AppDomain.CurrentDomain.BaseDirectory; AssembliesFromPath(baseDirectory, assemblyFilter); + var binPath = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath; + if (Directory.Exists(binPath)) + { + AssembliesFromPath(binPath, assemblyFilter); + } + + } public void AssembliesFromPath(string path) Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-09-13 14:12:42 UTC (rev 261) +++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-09-16 00:06:24 UTC (rev 262) @@ -33,14 +33,14 @@ PluginFamilyAttribute.ConfigureFamily(this); - if (IsConcrete(pluginType)) - { - Plugin plugin = PluginCache.GetPlugin(pluginType); - if (plugin.CanBeCreated()) - { - AddPlugin(pluginType, Plugin.DEFAULT); - } - } + //if (IsConcrete(pluginType)) + //{ + // Plugin plugin = PluginCache.GetPlugin(pluginType); + // if (plugin.CanBeCreated()) + // { + // AddPlugin(pluginType, Plugin.DEFAULT); + // } + //} } public void SetScopeTo(ILifecycle lifecycle) @@ -109,6 +109,12 @@ validatePluggabilityOfInstances(); + if (_pluginType.IsConcrete() && PluginCache.GetPlugin(_pluginType).CanBeAutoFilled) + { + MissingInstance = new ConfiguredInstance(_pluginType); + } + + if (_instances.Count == 1) { _defaultKey = _instances.First.Name; @@ -136,11 +142,12 @@ { _pluggedTypes.Each((key, plugin) => { - if (plugin.CanBeAutoFilled && !hasInstanceWithPluggedType(plugin)) - { - ConfiguredInstance instance = new ConfiguredInstance(plugin.PluggedType).WithName(key); - AddInstance(instance); - } + if (!plugin.CanBeAutoFilled) return; + + if (hasInstanceWithPluggedType(plugin)) return; + + ConfiguredInstance instance = new ConfiguredInstance(plugin.PluggedType).WithName(key); + AddInstance(instance); }); } Modified: trunk/Source/StructureMap/PipelineGraph.cs =================================================================== --- trunk/Source/StructureMap/PipelineGraph.cs 2009-09-13 14:12:42 UTC (rev 261) +++ trunk/Source/StructureMap/PipelineGraph.cs 2009-09-16 00:06:24 UTC (rev 262) @@ -167,7 +167,7 @@ { // Need to ensure that the factory exists first createFactoryIfMissing(pluginType); - return _profileManager.GetDefault(pluginType); + return _profileManager.GetDefault(pluginType) ?? _factories[pluginType].MissingInstance; } public void SetDefault(Type pluginType, Instance instance) Added: trunk/Source/StructureMap.Testing/ConcreteClassCreationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/ConcreteClassCreationTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/ConcreteClassCreationTester.cs 2009-09-16 00:06:24 UTC (rev 262) @@ -0,0 +1,44 @@ +using NUnit.Framework; +using StructureMap.Testing.Widget; + +namespace StructureMap.Testing +{ + [TestFixture] + public class ConcreteClassCreationTester + { + private Container container; + + [SetUp] + public void SetUp() + { + container = new Container(x => + { + x.For<IWidget>().Use(new ColorWidget("red")); + }); + } + + [Test] + public void can_create_a_concrete_class_by_default() + { + container.GetInstance<ConcreteClass>().Widget1.ShouldBeOfType<ColorWidget>(); + } + + [Test] + public void the_instance_count_is_zero() + { + container.GetAllInstances<ConcreteClass>().Count.ShouldEqual(0); + } + + public class ConcreteClass + { + private readonly IWidget _widget; + + public ConcreteClass(IWidget widget) + { + _widget = widget; + } + + public IWidget Widget1 { get { return _widget; } } + } + } +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs 2009-09-13 14:12:42 UTC (rev 261) +++ trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs 2009-09-16 00:06:24 UTC (rev 262) @@ -146,7 +146,7 @@ { ValidationBuildSession session = validatedSession( - registry => registry.BuildInstancesOf<SomethingThatHasValidationFailures>()); + registry => registry.BuildInstancesOf<SomethingThatHasValidationFailures>().TheDefaultIsConcreteType<SomethingThatHasValidationFailures>()); Assert.AreEqual(2, session.ValidationErrors.Length); } Modified: trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs 2009-09-13 14:12:42 UTC (rev 261) +++ trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs 2009-09-16 00:06:24 UTC (rev 262) @@ -126,20 +126,6 @@ } [Test] - public void Create_PluginFamily_for_concrete_type_that_can_be_autofilled_and_create_default_instance() - { - var family = new PluginFamily(GetType()); - family.Seal(); - - Assert.AreEqual(Plugin.DEFAULT, family.DefaultInstanceKey); - Assert.AreEqual(1, family.PluginCount); - Assert.AreEqual(1, family.InstanceCount); - var instance = (IConfiguredInstance) family.FirstInstance(); - Assert.AreEqual(Plugin.DEFAULT, instance.Name); - Assert.AreEqual(GetType(), instance.PluggedType); - } - - [Test] public void FillDefault_happy_path() { var family = new PluginFamily(typeof (IWidget)); @@ -178,14 +164,6 @@ } [Test] - public void If_PluginType_is_concrete_automatically_add_a_plugin_called_default() - { - var family = new PluginFamily(GetType()); - family.PluginCount.ShouldEqual(1); - family.FindPlugin(Plugin.DEFAULT).PluggedType.ShouldEqual(GetType()); - } - - [Test] public void ImplicitPluginFamilyCreatesASingletonInterceptorWhenIsSingletonIsTrue() { var family = new PluginFamily(typeof (ISingletonRepository)); Modified: trunk/Source/StructureMap.Testing/Graph/TypeFindingTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Graph/TypeFindingTester.cs 2009-09-13 14:12:42 UTC (rev 261) +++ trunk/Source/StructureMap.Testing/Graph/TypeFindingTester.cs 2009-09-16 00:06:24 UTC (rev 262) @@ -12,7 +12,7 @@ [SetUp] public void SetUp() { - _manager = new Container(registry => + container = new Container(registry => { registry.BuildInstancesOf<INormalType>(); registry.Scan(x => @@ -26,7 +26,7 @@ #endregion - private IContainer _manager; + private IContainer container; [Test] public void DoNotFindPluginWithNoPublicCTOR() @@ -38,19 +38,19 @@ [Test] public void FoundTheRightNumberOfInstancesForATypeWithNoPlugins() { - Assert.AreEqual(3, _manager.GetAllInstances<TypeIWantToFind>().Count); + Assert.AreEqual(3, container.GetAllInstances<TypeIWantToFind>().Count); } [Test] public void FoundTheRightNumberOfInstancesForATypeWithNoPlugins2() { - Assert.AreEqual(2, _manager.GetAllInstances<OtherType>().Count); + container.GetAllInstances<OtherType>().Count.ShouldEqual(2); } [Test] public void ScanAssembliesForAPluginAndOnlyGetExplicitlyAttributedClassesWithPluginAttributes() { - IList<INormalType> instances = _manager.GetAllInstances<INormalType>(); + IList<INormalType> instances = container.GetAllInstances<INormalType>(); Assert.AreEqual(1, instances.Count); Assert.IsInstanceOfType(typeof (NormalTypeWithPluggableAttribute), instances[0]); Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-09-13 14:12:42 UTC (rev 261) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-09-16 00:06:24 UTC (rev 262) @@ -189,6 +189,7 @@ <Compile Include="BuildSessionTester.cs" /> <Compile Include="BuildUpIntegratedTester.cs" /> <Compile Include="BuildUpTester.cs" /> + <Compile Include="ConcreteClassCreationTester.cs" /> <Compile Include="Configuration\ConfigurationParserBuilderTester.cs" /> <Compile Include="Configuration\ConfigurationParserTester.cs" /> <Compile Include="Configuration\DefaultInstanceNodeTester.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |