|
From: <jer...@us...> - 2009-06-08 15:10:13
|
Revision: 249
http://structuremap.svn.sourceforge.net/structuremap/?rev=249&view=rev
Author: jeremydmiller
Date: 2009-06-08 15:10:10 +0000 (Mon, 08 Jun 2009)
Log Message:
-----------
fixing a bug with nested containers
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-06-03 17:47:44 UTC (rev 248)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-06-08 15:10:10 UTC (rev 249)
@@ -113,6 +113,16 @@
}
/// <summary>
+ /// Shorthand to say TheDefault.Is.ConstructedBy(func)
+ /// </summary>
+ /// <param name="func"></param>
+ /// <returns></returns>
+ public ConstructorInstance<PLUGINTYPE> Use(Func<IContext, PLUGINTYPE> func)
+ {
+ return TheDefault.Is.ConstructedBy(func);
+ }
+
+ /// <summary>
/// Sets the object creation of the instances of the PluginType. For example: PerRequest,
/// Singleton, ThreadLocal, HttpContext, or Hybrid
/// </summary>
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-06-03 17:47:44 UTC (rev 248)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-06-08 15:10:10 UTC (rev 249)
@@ -47,20 +47,7 @@
void SelectConstructor<T>(Expression<Func<T>> expression);
}
- public static class RegistryExtensions
- {
- public static CreatePluginFamilyExpression<PLUGINTYPE> For<PLUGINTYPE>(this IRegistry registry)
- {
- return registry.ForRequestedType<PLUGINTYPE>();
- }
- public static GenericFamilyExpression For(this IRegistry registry, Type pluginType)
- {
- return registry.ForRequestedType(pluginType);
- }
- }
-
-
/// <summary>
/// A Registry class provides methods and grammars for configuring a Container or ObjectFactory.
/// Using a Registry subclass is the recommended way of configuring a StructureMap Container.
@@ -403,5 +390,25 @@
{
ForRequestedType<PLUGINTYPE>().TheDefault.IsThis(instance);
}
+
+ /// <summary>
+ /// Shorthand for ForRequestedType<PLUGINTYPE>()
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ public CreatePluginFamilyExpression<PLUGINTYPE> For<PLUGINTYPE>()
+ {
+ return ForRequestedType<PLUGINTYPE>();
+ }
+
+ /// <summary>
+ /// Shorthand for ForRequestedType(pluginType)
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ public GenericFamilyExpression For(Type pluginType)
+ {
+ return ForRequestedType(pluginType);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-06-03 17:47:44 UTC (rev 248)
+++ trunk/Source/StructureMap/Container.cs 2009-06-08 15:10:10 UTC (rev 249)
@@ -430,12 +430,17 @@
/// <returns></returns>
public IContainer GetNestedContainer()
{
- return new Container
+ var container = new Container
{
_interceptorLibrary = _interceptorLibrary,
_pipelineGraph = _pipelineGraph.Clone(),
_transientCache = new MainObjectCache()
};
+
+ // Fixes a mild bug. The child container should inject itself
+ container._pipelineGraph.Inject<IContainer>(container);
+
+ return container;
}
/// <summary>
Modified: trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs 2009-06-03 17:47:44 UTC (rev 248)
+++ trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs 2009-06-08 15:10:10 UTC (rev 249)
@@ -14,7 +14,19 @@
{
}
+ [Test]
+ public void the_nested_container_delivers_itself_as_the_IContainer()
+ {
+ var parent = new Container(x =>
+ {
+ x.For<IWidget>().Use<AWidget>();
+ });
+ var child = parent.GetNestedContainer();
+
+ child.GetInstance<IContainer>().ShouldBeTheSameAs(child);
+ }
+
[Test]
public void transient_service_in_the_parent_container_is_effectively_a_singleton_for_the_nested_container()
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|