|
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.
|