|
From: <jer...@us...> - 2008-12-19 19:04:51
|
Revision: 203
http://structuremap.svn.sourceforge.net/structuremap/?rev=203&view=rev
Author: jeremydmiller
Date: 2008-12-19 19:04:47 +0000 (Fri, 19 Dec 2008)
Log Message:
-----------
fixing a bug reported in: http://groups.google.com/group/structuremap-users/browse_thread/thread/1ab08ef6c3ac6bf1?hl=en
Modified Paths:
--------------
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs
trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs
trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2008-12-19 15:46:37 UTC (rev 202)
+++ trunk/Source/StructureMap/Container.cs 2008-12-19 19:04:47 UTC (rev 203)
@@ -109,7 +109,9 @@
{
Instance defaultInstance = _pipelineGraph.GetDefault(pluginType);
- Instance instance = new ExplicitInstance(pluginType, args, defaultInstance);
+ BasicInstance basicInstance = defaultInstance as BasicInstance;
+
+ Instance instance = basicInstance == null ? defaultInstance : new ExplicitInstance(pluginType, args, basicInstance);
BuildSession session = withNewSession();
args.RegisterDefaults(session);
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2008-12-19 15:46:37 UTC (rev 202)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2008-12-19 19:04:47 UTC (rev 203)
@@ -4,7 +4,7 @@
namespace StructureMap.Pipeline
{
- public interface Copyable
+ public interface BasicInstance
{
Type PluggedType { get; }
Dictionary<string, string> Properties { get; }
@@ -13,7 +13,7 @@
}
- public abstract class ConfiguredInstanceBase<T> : Instance, IConfiguredInstance, IStructuredInstance, Copyable
+ public abstract class ConfiguredInstanceBase<T> : Instance, IConfiguredInstance, IStructuredInstance, BasicInstance
{
protected Dictionary<string, Instance[]> _arrays = new Dictionary<string, Instance[]>();
protected Dictionary<string, Instance> _children = new Dictionary<string, Instance>();
@@ -42,22 +42,22 @@
#region Copyable Members
- Type Copyable.PluggedType
+ Type BasicInstance.PluggedType
{
get { return _pluggedType; }
}
- Dictionary<string, string> Copyable.Properties
+ Dictionary<string, string> BasicInstance.Properties
{
get { return _properties; }
}
- Dictionary<string, Instance> Copyable.Children
+ Dictionary<string, Instance> BasicInstance.Children
{
get { return _children; }
}
- Dictionary<string, Instance[]> Copyable.Arrays
+ Dictionary<string, Instance[]> BasicInstance.Arrays
{
get { return _arrays; }
}
@@ -241,7 +241,7 @@
_properties[propertyName] = propertyValue;
}
- protected void mergeIntoThis(Copyable instance)
+ protected void mergeIntoThis(BasicInstance instance)
{
_pluggedType = instance.PluggedType;
Modified: trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2008-12-19 15:46:37 UTC (rev 202)
+++ trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2008-12-19 19:04:47 UTC (rev 203)
@@ -76,20 +76,11 @@
{
private readonly ExplicitArguments _args;
- public ExplicitInstance(Type pluginType, ExplicitArguments args, Instance defaultInstance) : base(null)
+ public ExplicitInstance(Type pluginType, ExplicitArguments args, BasicInstance defaultInstance) : base(null)
{
args.Configure(this);
_args = args;
-
- var defaultConfiguration = defaultInstance as Copyable;
- if (defaultConfiguration != null)
- {
- mergeIntoThis(defaultConfiguration);
- }
- else
- {
- setPluggedType(pluginType);
- }
+ mergeIntoThis(defaultInstance);
}
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2008-12-19 15:46:37 UTC (rev 202)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2008-12-19 19:04:47 UTC (rev 203)
@@ -40,7 +40,7 @@
{
string theProfileName = "something";
- IContainer manager = new Container(registry =>
+ IContainer container = new Container(registry =>
{
registry.CreateProfile(theProfileName, x =>
{
@@ -49,10 +49,10 @@
});
});
- manager.SetDefaultsToProfile(theProfileName);
+ container.SetDefaultsToProfile(theProfileName);
- Assert.IsInstanceOfType(typeof(AWidget), manager.GetInstance<IWidget>());
- Assert.IsInstanceOfType(typeof(DefaultRule), manager.GetInstance<Rule>());
+ Assert.IsInstanceOfType(typeof(AWidget), container.GetInstance<IWidget>());
+ Assert.IsInstanceOfType(typeof(DefaultRule), container.GetInstance<Rule>());
}
Modified: trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs 2008-12-19 15:46:37 UTC (rev 202)
+++ trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs 2008-12-19 19:04:47 UTC (rev 203)
@@ -1,5 +1,6 @@
using System.Collections;
using NUnit.Framework;
+using StructureMap.Configuration.DSL;
using StructureMap.Graph;
using StructureMap.Testing.GenericWidgets;
using StructureMap.Testing.TestData;
@@ -74,6 +75,20 @@
(IService<double>) manager.GetInstance(typeof (IService<double>), "Default");
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
[Test]
public void PicksUpAnExplicitlyDefinedGenericPluginFamilyFromConfiguration()
{
Modified: trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs 2008-12-19 15:46:37 UTC (rev 202)
+++ trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs 2008-12-19 19:04:47 UTC (rev 203)
@@ -1,5 +1,7 @@
+using System;
using System.Collections;
using System.Collections.Generic;
+using System.Diagnostics;
using NUnit.Framework;
using StructureMap.Pipeline;
using StructureMap.Testing.Pipeline;
@@ -96,13 +98,58 @@
}
[Test]
+ public void use_a_type_that_is_not_part_of_the_constructor_in_the_with()
+ {
+ var container = new Container();
+ container.With(new Address()).GetInstance<ClassWithNoArgs>()
+ .ShouldBeOfType<ClassWithNoArgs>();
+ }
+
+ [Test]
+ public void use_explicit_type_arguments_with_custom_instance()
+ {
+ var container = new Container(x =>
+ {
+ x.ForRequestedType<ClassWithNoArgs>().TheDefault.IsThis(new SpecialInstance());
+ });
+
+ Debug.WriteLine(container.WhatDoIHave());
+
+ var address = new Address();
+
+
+ container.With(address).GetInstance<ClassWithNoArgs>()
+ .TheAddress.ShouldBeTheSameAs(address);
+
+ }
+
+ public class ClassWithNoArgs
+ {
+ public Address TheAddress { get; set;}
+ }
+ public class Address{}
+
+ public class SpecialInstance : Instance
+ {
+ protected override string getDescription()
+ {
+ return string.Empty;
+ }
+
+ protected override object build(Type pluginType, BuildSession session)
+ {
+ return new ClassWithNoArgs() {TheAddress = (Address)session.CreateInstance(typeof (Address))};
+ }
+ }
+
+ [Test]
public void ExplicitArguments_can_return_child_by_name()
{
var args = new ExplicitArguments();
var theNode = new Node();
args.SetArg("node", theNode);
- IConfiguredInstance instance = new ExplicitInstance(typeof (Command), args, null);
+ IConfiguredInstance instance = new ExplicitInstance(typeof (Command), args, new SmartInstance<Command>());
Assert.AreSame(theNode, instance.GetChild("node", typeof (Node), new StubBuildSession()));
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|