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