You can subscribe to this list here.
| 2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2007 |
Jan
|
Feb
(5) |
Mar
(9) |
Apr
(9) |
May
(4) |
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(3) |
| 2008 |
Jan
(11) |
Feb
(6) |
Mar
|
Apr
(16) |
May
(28) |
Jun
(13) |
Jul
(3) |
Aug
(19) |
Sep
(11) |
Oct
(37) |
Nov
(1) |
Dec
(17) |
| 2009 |
Jan
(16) |
Feb
(6) |
Mar
|
Apr
(6) |
May
(1) |
Jun
(10) |
Jul
(4) |
Aug
(4) |
Sep
(4) |
Oct
(8) |
Nov
(3) |
Dec
(45) |
| 2010 |
Jan
(8) |
Feb
(21) |
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
|
From: <wbi...@us...> - 2010-01-28 01:27:34
|
Revision: 325
http://structuremap.svn.sourceforge.net/structuremap/?rev=325&view=rev
Author: wbinford
Date: 2010-01-28 01:27:28 +0000 (Thu, 28 Jan 2010)
Log Message:
-----------
Modified cruise.build to copy the license.txt file to the deploy folder in the post-clean target.
Modified Paths:
--------------
trunk/cruise.build
Modified: trunk/cruise.build
===================================================================
--- trunk/cruise.build 2010-01-08 21:06:26 UTC (rev 324)
+++ trunk/cruise.build 2010-01-28 01:27:28 UTC (rev 325)
@@ -134,6 +134,7 @@
<copy todir="deploy" file="bin\Rhino.Mocks.dll"/>
<copy todir="deploy" file="StructureMap.chm"/>
+ <copy todir="deploy" file="LICENSE.TXT"/>
<copy todir="deploy" file="Source\StructureMapDoctor\bin\${project.config}\StructureMapDoctor.exe" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fli...@us...> - 2010-01-08 21:06:33
|
Revision: 324
http://structuremap.svn.sourceforge.net/structuremap/?rev=324&view=rev
Author: flimflan
Date: 2010-01-08 21:06:26 +0000 (Fri, 08 Jan 2010)
Log Message:
-----------
Added 'release' target in build for http://hornget.net support
Modified Paths:
--------------
trunk/cruise.build
Modified: trunk/cruise.build
===================================================================
--- trunk/cruise.build 2010-01-08 20:59:52 UTC (rev 323)
+++ trunk/cruise.build 2010-01-08 21:06:26 UTC (rev 324)
@@ -8,6 +8,7 @@
<property name="project.config" value="release" />
<property name="archive.dir" value="archive"/>
<target name="all" depends="compile, unit-test, post-clean"/>
+ <target name="release" depends="compile, post-clean"/>
<target name="ci" depends="compile, unit-test, post-clean, archive" />
<target name="pre-clean">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fli...@us...> - 2010-01-08 21:00:05
|
Revision: 323
http://structuremap.svn.sourceforge.net/structuremap/?rev=323&view=rev
Author: flimflan
Date: 2010-01-08 20:59:52 +0000 (Fri, 08 Jan 2010)
Log Message:
-----------
Added 'release' target in build for http://hornget.net support
Modified Paths:
--------------
branches/2.5.4/cruise.build
Modified: branches/2.5.4/cruise.build
===================================================================
--- branches/2.5.4/cruise.build 2010-01-06 23:28:45 UTC (rev 322)
+++ branches/2.5.4/cruise.build 2010-01-08 20:59:52 UTC (rev 323)
@@ -8,6 +8,7 @@
<property name="project.config" value="release" />
<property name="archive.dir" value="archive"/>
<target name="all" depends="compile, unit-test, post-clean"/>
+ <target name="release" depends="compile, post-clean"/>
<target name="ci" depends="compile, unit-test, post-clean, archive" />
<target name="pre-clean">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fli...@us...> - 2010-01-06 23:28:52
|
Revision: 322
http://structuremap.svn.sourceforge.net/structuremap/?rev=322&view=rev
Author: flimflan
Date: 2010-01-06 23:28:45 +0000 (Wed, 06 Jan 2010)
Log Message:
-----------
Minor fix to obselete warning message
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2010-01-04 19:08:50 UTC (rev 321)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2010-01-06 23:28:45 UTC (rev 322)
@@ -141,7 +141,7 @@
/// </summary>
/// <param name="scope"></param>
/// <returns></returns>
- [Obsolete("Change to LifecycleIs(scope)")]
+ [Obsolete("Change to LifecycleIs(scope) or use Singleton(), HttpContextScoped(), HybridHttpOrThreadLocalScoped()")]
public CreatePluginFamilyExpression<PLUGINTYPE> CacheBy(InstanceScope scope)
{
return alterAndContinue(family => family.SetScopeTo(scope));
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2010-01-04 19:08:50 UTC (rev 321)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2010-01-06 23:28:45 UTC (rev 322)
@@ -156,7 +156,7 @@
/// </summary>
/// <param name="scope"></param>
/// <returns></returns>
- [Obsolete("Change to LifecycleIs()")]
+ [Obsolete("Change to LifecycleIs() or use Singleton(), HttpContextScoped(), HybridHttpOrThreadLocalScoped().")]
public GenericFamilyExpression CacheBy(InstanceScope scope)
{
return alterAndContinue(family => family.SetScopeTo(scope));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2010-01-04 19:08:59
|
Revision: 321
http://structuremap.svn.sourceforge.net/structuremap/?rev=321&view=rev
Author: jeremydmiller
Date: 2010-01-04 19:08:50 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
removed ForRequestedType() methods. It's all For() from here on out
Modified Paths:
--------------
trunk/Source/HTML/ConfiguringStructureMap.htm
trunk/Source/HTML/Generics.htm
trunk/Source/HTML/Interception.htm
trunk/Source/HTML/RegistryDSL.htm
trunk/Source/StructureMap/BuildSession.cs
trunk/Source/StructureMap/Configuration/DSL/IRegistry.cs
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/SystemRegistry.cs
trunk/Source/StructureMap.DebuggerVisualizers.Testing/Program.cs
trunk/Source/StructureMap.Testing/AutoWiringExamples.cs
trunk/Source/StructureMap.Testing/BidirectionalDependencies.cs
trunk/Source/StructureMap.Testing/Bugs/FillAllPropertiesShouldWorkForAlreadyConfiguredPluginsBug.cs
trunk/Source/StructureMap.Testing/Bugs/HttpSessionNullRefBug.cs
trunk/Source/StructureMap.Testing/Bugs/LambdaCreatesNullBugTester.cs
trunk/Source/StructureMap.Testing/Bugs/MixedConfigureAndInitializeMissingInstanceProblem.cs
trunk/Source/StructureMap.Testing/Bugs/SingletonShouldBeLazy.cs
trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs
trunk/Source/StructureMap.Testing/BuildSessionTester.cs
trunk/Source/StructureMap.Testing/BuildUpIntegratedTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/AddTypesTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/InterceptAllInstancesOfPluginTypeTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/InterceptorTesting.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs
trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs
trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs
trunk/Source/StructureMap.Testing/Examples/CustomInstance.cs
trunk/Source/StructureMap.Testing/Examples/Interception.cs
trunk/Source/StructureMap.Testing/Examples/RegisteringWithTheAPI.cs
trunk/Source/StructureMap.Testing/Examples.cs
trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs
trunk/Source/StructureMap.Testing/Graph/ArrayConstructorTester.cs
trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs
trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs
trunk/Source/StructureMap.Testing/Graph/ConventionBasedSetterInjectionTester.cs
trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs
trunk/Source/StructureMap.Testing/Graph/FillDependenciesTester.cs
trunk/Source/StructureMap.Testing/Graph/FullStackFacadeTester.cs
trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
trunk/Source/StructureMap.Testing/Graph/InstanceFactoryTester.cs
trunk/Source/StructureMap.Testing/Graph/IntegratedTester.cs
trunk/Source/StructureMap.Testing/Graph/Interceptors/TypeInterceptionTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginGraphBuilderTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginTester.cs
trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs
trunk/Source/StructureMap.Testing/Graph/TypeFindingTester.cs
trunk/Source/StructureMap.Testing/ModelQueryTester.cs
trunk/Source/StructureMap.Testing/ObjectFactoryTester.cs
trunk/Source/StructureMap.Testing/PerRequestInterceptorTester.cs
trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ConditionalInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/GenericsHelperExpressionTester.cs
trunk/Source/StructureMap.Testing/Pipeline/HybridBuildLifecycleTester.cs
trunk/Source/StructureMap.Testing/Pipeline/MissingInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ObjectBuilderTester.cs
trunk/Source/StructureMap.Testing/Pipeline/OptionalSetterInjectionTester.cs
trunk/Source/StructureMap.Testing/Pipeline/SmartInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ThreadLocalStorageLifecycleTester.cs
trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs
Modified: trunk/Source/HTML/ConfiguringStructureMap.htm
===================================================================
--- trunk/Source/HTML/ConfiguringStructureMap.htm 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/HTML/ConfiguringStructureMap.htm 2010-01-04 19:08:50 UTC (rev 321)
@@ -142,7 +142,7 @@
these methods
for all all the possible configuration directives.</p>
<!--
-{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red0\green128\blue0;}??\fs20 \cf3 public\cf0 \cf3 interface\cf0 \cf4 IInitializationExpression\par ??\cf0 \{\par ?? \cf5 // Directives on how to treat the StructureMap.config file\par ??\cf0 \cf3 bool\cf0 UseDefaultStructureMapConfigFile \{ \cf3 set\cf0 ; \}\par ?? \cf3 bool\cf0 IgnoreStructureMapConfig \{ \cf3 set\cf0 ; \}\par ??\par ?? \cf5 // Xml configuration from the App.Config file\par ??\cf0 \cf3 bool\cf0 PullConfigurationFromAppConfig \{ \cf3 set\cf0 ; \}\par ??\par ?? \cf5 // Ancillary sources of Xml configuration\par ??\cf0 \cf3 void\cf0 AddConfigurationFromXmlFile(\cf3 string\cf0 fileName);\par ?? \cf3 void\cf0 AddConfigurationFromNode(\cf4 XmlNode\cf0 node);\par ??\par ?? \cf5 // Specifying Registry's\par ??\cf0 \cf3 void\cf0 AddRegistry<T>() \cf3 where\cf0 T : \cf4 Registry\cf0 , \cf3 new\cf0 ();\par ?? \cf3 void\cf0 AddRegistry(\cf4 Registry\cf0 registry);\par ??\par ?? \cf5 // Designate the Default Profile. This will be applied as soon as the \par ??\cf0 \cf5 // Container is initialized.\par ??\cf0 \cf3 string\cf0 DefaultProfileName \{ \cf3 get\cf0 ; \cf3 set\cf0 ; \}\par ??\par ?? \cf5 // ... and the Registry DSL as well\par ??\par ??\cf0 \cf5 // The Registry DSL\par ??\cf0 \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();\par ?? \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> ForRequestedType<PLUGINTYPE>();\par ?? \cf4 GenericFamilyExpression\cf0 ForRequestedType(\cf4 Type\cf0 pluginType);\par ?? \cf4 Registry\cf0 .\cf4 BuildWithExpression\cf0 <T> ForConcreteType<T>();\par ??\par ?? \cf4 IsExpression\cf0 <T> InstanceOf<T>();\par ?? \cf4 GenericIsExpression\cf0 InstanceOf(\cf4 Type\cf0 pluginType);\par ??\par ?? \cf4 ProfileExpression\cf0 CreateProfile(\cf3 string\cf0 profileName);\par ?? \cf3 void\cf0 CreateProfile(\cf3 string\cf0 profileName, \cf4 Action\cf0 <\cf4 ProfileExpression\cf0 > action);\par ??\par ?? \cf3 void\cf0 RegisterInterceptor(\cf4 TypeInterceptor\cf0 interceptor);\par ?? \cf4 MatchedTypeInterceptor\cf0 IfTypeMatches(\cf4 Predicate\cf0 <\cf4 Type\cf0 > match);\par ??\par ?? \cf3 void\cf0 Scan(\cf4 Action\cf0 <\cf4 IAssemblyScanner\cf0 > action);\par ??\par ?? \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> FillAllPropertiesOfType<PLUGINTYPE>();\par ?? \}}
+{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red0\green128\blue0;}??\fs20 \cf3 public\cf0 \cf3 interface\cf0 \cf4 IInitializationExpression\par ??\cf0 \{\par ?? \cf5 // Directives on how to treat the StructureMap.config file\par ??\cf0 \cf3 bool\cf0 UseDefaultStructureMapConfigFile \{ \cf3 set\cf0 ; \}\par ?? \cf3 bool\cf0 IgnoreStructureMapConfig \{ \cf3 set\cf0 ; \}\par ??\par ?? \cf5 // Xml configuration from the App.Config file\par ??\cf0 \cf3 bool\cf0 PullConfigurationFromAppConfig \{ \cf3 set\cf0 ; \}\par ??\par ?? \cf5 // Ancillary sources of Xml configuration\par ??\cf0 \cf3 void\cf0 AddConfigurationFromXmlFile(\cf3 string\cf0 fileName);\par ?? \cf3 void\cf0 AddConfigurationFromNode(\cf4 XmlNode\cf0 node);\par ??\par ?? \cf5 // Specifying Registry's\par ??\cf0 \cf3 void\cf0 AddRegistry<T>() \cf3 where\cf0 T : \cf4 Registry\cf0 , \cf3 new\cf0 ();\par ?? \cf3 void\cf0 AddRegistry(\cf4 Registry\cf0 registry);\par ??\par ?? \cf5 // Designate the Default Profile. This will be applied as soon as the \par ??\cf0 \cf5 // Container is initialized.\par ??\cf0 \cf3 string\cf0 DefaultProfileName \{ \cf3 get\cf0 ; \cf3 set\cf0 ; \}\par ??\par ?? \cf5 // ... and the Registry DSL as well\par ??\par ??\cf0 \cf5 // The Registry DSL\par ??\cf0 \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();\par ?? \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> ForRequestedType<PLUGINTYPE>();\par ?? \cf4 GenericFamilyExpression\cf0 For(\cf4 Type\cf0 pluginType);\par ?? \cf4 Registry\cf0 .\cf4 BuildWithExpression\cf0 <T> ForConcreteType<T>();\par ??\par ?? \cf4 IsExpression\cf0 <T> InstanceOf<T>();\par ?? \cf4 GenericIsExpression\cf0 InstanceOf(\cf4 Type\cf0 pluginType);\par ??\par ?? \cf4 ProfileExpression\cf0 CreateProfile(\cf3 string\cf0 profileName);\par ?? \cf3 void\cf0 CreateProfile(\cf3 string\cf0 profileName, \cf4 Action\cf0 <\cf4 ProfileExpression\cf0 > action);\par ??\par ?? \cf3 void\cf0 RegisterInterceptor(\cf4 TypeInterceptor\cf0 interceptor);\par ?? \cf4 MatchedTypeInterceptor\cf0 IfTypeMatches(\cf4 Predicate\cf0 <\cf4 Type\cf0 > match);\par ??\par ?? \cf3 void\cf0 Scan(\cf4 Action\cf0 <\cf4 IAssemblyScanner\cf0 > action);\par ??\par ?? \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> FillAllPropertiesOfType<PLUGINTYPE>();\par ?? \}}
-->
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border: black thin solid;">
<p style="margin: 0px;">
Modified: trunk/Source/HTML/Generics.htm
===================================================================
--- trunk/Source/HTML/Generics.htm 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/HTML/Generics.htm 2010-01-04 19:08:50 UTC (rev 321)
@@ -237,7 +237,7 @@
<p>Great, but now let's move on to registering these classes with a Container.
This unit test fixture from the code illustrates this very scenario:</p>
<!--
-{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red43\green145\blue175;\red0\green0\blue255;\red0\green128\blue0;}??\fs20 [\cf3 SetUp\cf0 ]\par ?? \cf4 public\cf0 \cf4 void\cf0 SetUp()\par ?? \{\par ?? container = \cf4 new\cf0 \cf3 Container\cf0 (x =>\par ?? \{\par ?? \cf5 // Define the basic open type for IFlattener<>\par ??\cf0 x.ForRequestedType(\cf4 typeof\cf0 (\cf3 IFlattener\cf0 <>)).TheDefaultIsConcreteType(\cf4 typeof\cf0 (\cf3 PassthroughFlattener\cf0 <>));\par ?? \par ?? \cf5 // Explicitly Register a specific closed type for Address\par ??\cf0 x.ForRequestedType<\cf3 IFlattener\cf0 <\cf3 Address\cf0 >>().TheDefaultIsConcreteType<\cf3 AddressFlattener\cf0 >();\par ?? \});\par ?? \}}
+{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red43\green145\blue175;\red0\green0\blue255;\red0\green128\blue0;}??\fs20 [\cf3 SetUp\cf0 ]\par ?? \cf4 public\cf0 \cf4 void\cf0 SetUp()\par ?? \{\par ?? container = \cf4 new\cf0 \cf3 Container\cf0 (x =>\par ?? \{\par ?? \cf5 // Define the basic open type for IFlattener<>\par ??\cf0 x.For(\cf4 typeof\cf0 (\cf3 IFlattener\cf0 <>)).TheDefaultIsConcreteType(\cf4 typeof\cf0 (\cf3 PassthroughFlattener\cf0 <>));\par ?? \par ?? \cf5 // Explicitly Register a specific closed type for Address\par ??\cf0 x.ForRequestedType<\cf3 IFlattener\cf0 <\cf3 Address\cf0 >>().TheDefaultIsConcreteType<\cf3 AddressFlattener\cf0 >();\par ?? \});\par ?? \}}
-->
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border: black thin solid;">
<p style="margin: 0px;">
@@ -258,7 +258,7 @@
<span style="color: green;">// Define the basic open type for IFlattener<></span></p>
<p style="margin: 0px;">
- x.ForRequestedType(<span style="color: blue;">typeof</span> (<span
+ x.For(<span style="color: blue;">typeof</span> (<span
style="color: #2b91af;">IFlattener</span><>)).TheDefaultIsConcreteType(<span
style="color: blue;">typeof</span> (<span style="color: #2b91af;">PassthroughFlattener</span><>));</p>
<p style="margin: 0px;">
Modified: trunk/Source/HTML/Interception.htm
===================================================================
--- trunk/Source/HTML/Interception.htm 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/HTML/Interception.htm 2010-01-04 19:08:50 UTC (rev 321)
@@ -329,7 +329,7 @@
<h2>Apply Interception to all Instances of a PluginType</h2>
<p>The same OnCreation(), EnrichWith(), and InterceptWith() methods can be applied
- to all Instances of a given PluginType off of the ForRequestedType() or
+ to all Instances of a given PluginType off of the For() or
BuildInstancesOf() methods of the <a href="RegistryDSL.htm">Registry DSL</a>:</p>
<!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green128\blue0;\red43\green145\blue175;\red0\green0\blue255;}??\fs20 \cf3 // Place the Interception at the PluginType level\par ??\cf0 ForRequestedType<\cf4 IConnectionListener\cf0 >()\par ?? .OnCreation(x => x.StartConnection()) \cf3 // OnCreation\par ??\cf0 .EnrichWith(x => \cf5 new\cf0 \cf4 LoggingDecorator\cf0 (x)) \cf3 // Enrich\par ??\cf0 .InterceptWith(\cf5 new\cf0 \cf4 CustomInterceptor\cf0 ()) \cf3 // Custom Interceptor\par ??\par ??\par ??\cf0 .TheDefaultIsConcreteType<\cf4 ClassThatNeedsSomeBootstrapping\cf0 >();}
Modified: trunk/Source/HTML/RegistryDSL.htm
===================================================================
--- trunk/Source/HTML/RegistryDSL.htm 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/HTML/RegistryDSL.htm 2010-01-04 19:08:50 UTC (rev 321)
@@ -166,12 +166,12 @@
<p>The Registry class exposes these methods for configuration. Most of these
methods are the root of a Fluent Interface expression.</p>
<!--
-{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green128\blue0;\red43\green145\blue175;\red0\green0\blue255;}??\fs20 \cf3 // Registering Types -- BuildInstancesOf() and ForRequestedType() are Synonyms\par ??\cf0 \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();\par ?? \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> ForRequestedType<PLUGINTYPE>();\par ?? \par ?? \cf4 GenericFamilyExpression\cf0 ForRequestedType(\cf4 Type\cf0 pluginType);\par ??\par ?? \cf3 // Shortcut for configuring the default configuration of a concrete type\par ??\cf0 \cf4 Registry\cf0 .\cf4 BuildWithExpression\cf0 <T> ForConcreteType<T>();\par ??\par ?? \cf3 // Adding additional Instances of a PluginType\par ??\cf0 \cf4 IsExpression\cf0 <T> InstanceOf<T>();\par ?? \cf4 GenericIsExpression\cf0 InstanceOf(\cf4 Type\cf0 pluginType);\par ??\par ?? \cf3 // Creating or Adding to a Profile\par ??\cf0 \cf4 ProfileExpression\cf0 CreateProfile(\cf5 string\cf0 profileName);\par ?? \cf5 void\cf0 CreateProfile(\cf5 string\cf0 profileName, \cf4 Action\cf0 <\cf4 ProfileExpression\cf0 > action);\par ??\par ?? \cf3 // Interception\par ??\cf0 \cf5 void\cf0 RegisterInterceptor(\cf4 TypeInterceptor\cf0 interceptor);\par ?? \cf4 MatchedTypeInterceptor\cf0 IfTypeMatches(\cf4 Predicate\cf0 <\cf4 Type\cf0 > match);\par ??\par ?? \cf3 // Type Scanning and Auto Registration\par ??\cf0 \cf5 void\cf0 Scan(\cf4 Action\cf0 <\cf4 IAssemblyScanner\cf0 > action);\par ??\par ?? \cf3 // Controlling Setter Injection Behavior\par ??\cf0 \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> FillAllPropertiesOfType<PLUGINTYPE>();\par ?? \cf5 void\cf0 SetAllProperties(\cf4 Action\cf0 <\cf4 SetterConvention\cf0 > action);}
+{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green128\blue0;\red43\green145\blue175;\red0\green0\blue255;}??\fs20 \cf3 // Registering Types -- BuildInstancesOf() and For() are Synonyms\par ??\cf0 \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();\par ?? \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> ForRequestedType<PLUGINTYPE>();\par ?? \par ?? \cf4 GenericFamilyExpression\cf0 For(\cf4 Type\cf0 pluginType);\par ??\par ?? \cf3 // Shortcut for configuring the default configuration of a concrete type\par ??\cf0 \cf4 Registry\cf0 .\cf4 BuildWithExpression\cf0 <T> ForConcreteType<T>();\par ??\par ?? \cf3 // Adding additional Instances of a PluginType\par ??\cf0 \cf4 IsExpression\cf0 <T> InstanceOf<T>();\par ?? \cf4 GenericIsExpression\cf0 InstanceOf(\cf4 Type\cf0 pluginType);\par ??\par ?? \cf3 // Creating or Adding to a Profile\par ??\cf0 \cf4 ProfileExpression\cf0 CreateProfile(\cf5 string\cf0 profileName);\par ?? \cf5 void\cf0 CreateProfile(\cf5 string\cf0 profileName, \cf4 Action\cf0 <\cf4 ProfileExpression\cf0 > action);\par ??\par ?? \cf3 // Interception\par ??\cf0 \cf5 void\cf0 RegisterInterceptor(\cf4 TypeInterceptor\cf0 interceptor);\par ?? \cf4 MatchedTypeInterceptor\cf0 IfTypeMatches(\cf4 Predicate\cf0 <\cf4 Type\cf0 > match);\par ??\par ?? \cf3 // Type Scanning and Auto Registration\par ??\cf0 \cf5 void\cf0 Scan(\cf4 Action\cf0 <\cf4 IAssemblyScanner\cf0 > action);\par ??\par ?? \cf3 // Controlling Setter Injection Behavior\par ??\cf0 \cf4 CreatePluginFamilyExpression\cf0 <PLUGINTYPE> FillAllPropertiesOfType<PLUGINTYPE>();\par ?? \cf5 void\cf0 SetAllProperties(\cf4 Action\cf0 <\cf4 SetterConvention\cf0 > action);}
-->
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border: black thin solid;">
<p style="margin: 0px;">
<span style="color: green;">// Registering Types --
- BuildInstancesOf() and ForRequestedType() are Synonyms</span></p>
+ BuildInstancesOf() and For() are Synonyms</span></p>
<p style="margin: 0px;">
<span style="color: #2b91af;">
CreatePluginFamilyExpression</span><PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();</p>
@@ -182,7 +182,7 @@
</p>
<p style="margin: 0px;">
<span style="color: #2b91af;">GenericFamilyExpression</span>
- ForRequestedType(<span style="color: #2b91af;">Type</span> pluginType);</p>
+ For(<span style="color: #2b91af;">Type</span> pluginType);</p>
<p style="margin: 0px;">
</p>
<p style="margin: 0px;">
@@ -319,7 +319,7 @@
cannot use the generic ForRequestedType<T>() method. For example, with
open generic types, you have to use this syntax:</p>
<!--
-{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs20 \cf3 var\cf0 container = \cf3 new\cf0 \cf4 Container\cf0 (r =>\par ?? \{\par ?? r.ForRequestedType(\cf3 typeof\cf0 (\cf4 IRepository\cf0 <>)).TheDefaultIsConcreteType(\cf3 typeof\cf0 (\cf4 OnlineRepository\cf0 <>));\par ?? \});}
+{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs20 \cf3 var\cf0 container = \cf3 new\cf0 \cf4 Container\cf0 (r =>\par ?? \{\par ?? r.For(\cf3 typeof\cf0 (\cf4 IRepository\cf0 <>)).TheDefaultIsConcreteType(\cf3 typeof\cf0 (\cf4 OnlineRepository\cf0 <>));\par ?? \});}
-->
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border: black thin solid;">
<p style="margin: 0px;">
@@ -330,7 +330,7 @@
{</p>
<p style="margin: 0px;">
- r.ForRequestedType(<span style="color: blue;">typeof</span> (<span
+ r.For(<span style="color: blue;">typeof</span> (<span
style="color: #2b91af;">IRepository</span><>)).TheDefaultIsConcreteType(<span
style="color: blue;">typeof</span> (<span style="color: #2b91af;">OnlineRepository</span><>));</p>
<p style="margin: 0px;">
Modified: trunk/Source/StructureMap/BuildSession.cs
===================================================================
--- trunk/Source/StructureMap/BuildSession.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap/BuildSession.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -146,7 +146,6 @@
return result;
}
- [Obsolete("Move all of this into the new EnumerableInstance")]
public virtual Array CreateInstanceArray(Type pluginType, Instance[] instances)
{
if (instances == null)
Modified: trunk/Source/StructureMap/Configuration/DSL/IRegistry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/IRegistry.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap/Configuration/DSL/IRegistry.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -44,25 +44,6 @@
void IncludeRegistry(Registry registry);
/// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. BuildInstancesOf()
- /// and ForRequestedType() are synonyms
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- [Obsolete("Change to For<T>()")]
- CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();
-
- /// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. This method is specifically
- /// meant for registering open generic types
- /// </summary>
- /// <returns></returns>
- [Obsolete("Change to For(pluginType)")]
- GenericFamilyExpression ForRequestedType(Type pluginType);
-
- /// <summary>
/// This method is a shortcut for specifying the default constructor and
/// setter arguments for a ConcreteType. ForConcreteType is shorthand for:
/// ForRequestedType[T]().TheDefault.Is.OfConcreteType[T].**************
@@ -73,20 +54,10 @@
Registry.BuildWithExpression<T> ForConcreteType<T>();
/// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. BuildInstancesOf()
- /// and ForRequestedType() are synonyms
+ /// Convenience method. Equivalent of For[PluginType]().AsSingletons()
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <returns></returns>
- [Obsolete("Change to For<T>()")]
- CreatePluginFamilyExpression<PLUGINTYPE> ForRequestedType<PLUGINTYPE>();
-
- /// <summary>
- /// Convenience method. Equivalent of ForRequestedType[PluginType]().AsSingletons()
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
CreatePluginFamilyExpression<PLUGINTYPE> ForSingletonOf<PLUGINTYPE>();
/// <summary>
@@ -188,28 +159,28 @@
void Forward<FROM, TO>() where FROM : class where TO : class;
/// <summary>
- /// Syntactic Sugar for saying ForRequestedType().TheDefault.IsThis( @object )
+ /// Syntactic Sugar for saying For().TheDefault.IsThis( @object )
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <param name="object"></param>
void Register<PLUGINTYPE>(PLUGINTYPE @object);
/// <summary>
- /// Syntactic Sugar for saying ForRequestedType().TheDefault.IsThis( instance )
+ /// Syntactic Sugar for saying For().TheDefault.IsThis( instance )
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <param name="instance"></param>
void Register<PLUGINTYPE>(Instance instance);
/// <summary>
- /// Shorthand for ForRequestedType<PLUGINTYPE>()
+ /// Shorthand for For<PLUGINTYPE>()
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <returns></returns>
CreatePluginFamilyExpression<PLUGINTYPE> For<PLUGINTYPE>();
/// <summary>
- /// Shorthand for ForRequestedType(pluginType)
+ /// Shorthand for For(pluginType)
/// </summary>
/// <param name="pluginType"></param>
/// <returns></returns>
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -17,7 +17,7 @@
/// {
/// public MyRegistry()
/// {
- /// ForRequestedType(typeof(IService)).TheDefaultIsConcreteType(typeof(Service));
+ /// For(typeof(IService)).TheDefaultIsConcreteType(typeof(Service));
/// }
/// }
/// </example>
@@ -77,33 +77,7 @@
_actions.Add(registry.ConfigurePluginGraph);
}
-
/// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. BuildInstancesOf()
- /// and ForRequestedType() are synonyms
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- [Obsolete("Change to For<T>()")]
- public CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>()
- {
- return new CreatePluginFamilyExpression<PLUGINTYPE>(this);
- }
-
- /// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. This method is specifically
- /// meant for registering open generic types
- /// </summary>
- /// <returns></returns>
- [Obsolete("Change to For(pluginType)")]
- public GenericFamilyExpression ForRequestedType(Type pluginType)
- {
- return new GenericFamilyExpression(pluginType, this);
- }
-
- /// <summary>
/// This method is a shortcut for specifying the default constructor and
/// setter arguments for a ConcreteType. ForConcreteType is shorthand for:
/// For[T]().Use[T].**************
@@ -113,31 +87,19 @@
/// <returns></returns>
public BuildWithExpression<T> ForConcreteType<T>()
{
- SmartInstance<T> instance = ForRequestedType<T>().TheDefault.Is.OfConcreteType<T>();
+ SmartInstance<T> instance = For<T>().TheDefault.Is.OfConcreteType<T>();
return new BuildWithExpression<T>(instance);
}
+
/// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. BuildInstancesOf()
- /// and ForRequestedType() are synonyms
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- [Obsolete("Change to For<T>()")]
- public CreatePluginFamilyExpression<PLUGINTYPE> ForRequestedType<PLUGINTYPE>()
- {
- return new CreatePluginFamilyExpression<PLUGINTYPE>(this);
- }
-
- /// <summary>
/// Convenience method. Equivalent of ForRequestedType[PluginType]().Singletons()
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <returns></returns>
public CreatePluginFamilyExpression<PLUGINTYPE> ForSingletonOf<PLUGINTYPE>()
{
- return ForRequestedType<PLUGINTYPE>().Singleton();
+ return For<PLUGINTYPE>().Singleton();
}
/// <summary>
@@ -259,7 +221,7 @@
public CreatePluginFamilyExpression<PLUGINTYPE> FillAllPropertiesOfType<PLUGINTYPE>()
{
PluginCache.AddFilledType(typeof (PLUGINTYPE));
- return ForRequestedType<PLUGINTYPE>();
+ return For<PLUGINTYPE>();
}
/// <summary>
@@ -298,31 +260,31 @@
/// <summary>
- /// Syntactic Sugar for saying ForRequestedType().TheDefault.IsThis( @object )
+ /// Syntactic Sugar for saying For().TheDefault.IsThis( @object )
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <param name="object"></param>
[Obsolete("Prefer For<T>().Use(value)")]
public void Register<PLUGINTYPE>(PLUGINTYPE @object)
{
- ForRequestedType<PLUGINTYPE>().TheDefault.IsThis(@object);
+ For<PLUGINTYPE>().TheDefault.IsThis(@object);
}
/// <summary>
- /// Syntactic Sugar for saying ForRequestedType().TheDefault.IsThis( instance )
+ /// Syntactic Sugar for saying For().TheDefault.IsThis( instance )
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <param name="instance"></param>
[Obsolete("Prefer For<T>().Use(instance)")]
public void Register<PLUGINTYPE>(Instance instance)
{
- ForRequestedType<PLUGINTYPE>().TheDefault.IsThis(instance);
+ For<PLUGINTYPE>().TheDefault.IsThis(instance);
}
/// <summary>
/// Expression Builder used to define policies for a PluginType including
/// Scoping, the Default Instance, and interception. BuildInstancesOf()
- /// and ForRequestedType() are synonyms
+ /// and For() are synonyms
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <returns></returns>
@@ -339,7 +301,7 @@
/// <returns></returns>
public GenericFamilyExpression For(Type pluginType)
{
- return ForRequestedType(pluginType);
+ return new GenericFamilyExpression(pluginType, this);
}
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap/Container.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -526,8 +526,7 @@
_pipelineGraph = new PipelineGraph(pluginGraph);
}
- [Obsolete("delegate to something cleaner in BuildSession")]
- private IList<T> getListOfTypeWithSession<T>(BuildSession session)
+ private static IList<T> getListOfTypeWithSession<T>(BuildSession session)
{
var list = new List<T>();
foreach (T instance in session.CreateInstanceArray(typeof (T), null))
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -132,7 +132,7 @@
return _factories[pluginType];
}
- [Obsolete("Replace this with a Cache")]
+ // TODO -- Replace this with a Cache
private void createFactoryIfMissing(Type pluginType)
{
if (!_factories.ContainsKey(pluginType))
Modified: trunk/Source/StructureMap/SystemRegistry.cs
===================================================================
--- trunk/Source/StructureMap/SystemRegistry.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap/SystemRegistry.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -10,7 +10,7 @@
{
addExpression(graph => graph.AddType(typeof (MementoSource), typeof (XmlFileMementoSource), "XmlFile"));
- ForRequestedType<MementoSource>().TheDefaultIsConcreteType<MemoryMementoSource>();
+ For<MementoSource>().TheDefaultIsConcreteType<MemoryMementoSource>();
AddMementoSourceType<DirectoryXmlMementoSource>("DirectoryXml");
AddMementoSourceType<EmbeddedFolderXmlMementoSource>("EmbeddedXmlFolder");
AddMementoSourceType<SingleEmbeddedXmlMementoSource>("EmbeddedXmlFile");
Modified: trunk/Source/StructureMap.DebuggerVisualizers.Testing/Program.cs
===================================================================
--- trunk/Source/StructureMap.DebuggerVisualizers.Testing/Program.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.DebuggerVisualizers.Testing/Program.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -14,15 +14,15 @@
s.TheCallingAssembly();
s.WithDefaultConventions();
});
- x.ForRequestedType<IDoMore<string>>().TheDefaultIsConcreteType<DoForStrings>();
- x.ForRequestedType<IDoThat>().AddInstances(i =>
+ x.For<IDoMore<string>>().TheDefaultIsConcreteType<DoForStrings>();
+ x.For<IDoThat>().AddInstances(i =>
{
i.OfConcreteType<DoThat>().WithName("Red");
i.OfConcreteType<DoThat>().WithName("Blue");
});
});
- ObjectFactory.Initialize(i => i.ForRequestedType<IDoThat>().TheDefaultIsConcreteType<DoThat>());
+ ObjectFactory.Initialize(i => i.For<IDoThat>().TheDefaultIsConcreteType<DoThat>());
Debug.WriteLine(container.WhatDoIHave());
ContainerDetail details = ContainerVisualizerObjectSource.BuildContainerDetails(container);
Modified: trunk/Source/StructureMap.Testing/AutoWiringExamples.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AutoWiringExamples.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/AutoWiringExamples.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -51,7 +51,7 @@
{
container = new Container(x =>
{
- x.ForRequestedType<IValidator>().AddInstances(o =>
+ x.For<IValidator>().AddInstances(o =>
{
o.OfConcreteType<Validator>().WithCtorArg("name").EqualTo("Red").WithName("Red");
o.OfConcreteType<Validator>().WithCtorArg("name").EqualTo("Blue").WithName("Blue");
@@ -59,7 +59,7 @@
o.OfConcreteType<Validator>().WithCtorArg("name").EqualTo("Green").WithName("Green");
});
- x.ForRequestedType<ClassThatUsesValidators>().AddInstances(o =>
+ x.For<ClassThatUsesValidators>().AddInstances(o =>
{
// Define an Instance of ClassThatUsesValidators that depends on AutoWiring
o.OfConcreteType<ClassThatUsesValidators>().WithName("WithAutoWiring");
Modified: trunk/Source/StructureMap.Testing/BidirectionalDependencies.cs
===================================================================
--- trunk/Source/StructureMap.Testing/BidirectionalDependencies.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/BidirectionalDependencies.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -13,8 +13,8 @@
{
container = new Container(x =>
{
- x.ForRequestedType<IBiView>().TheDefaultIsConcreteType<BiView>();
- x.ForRequestedType<IBiPresenter>().TheDefaultIsConcreteType<BiPresenter>();
+ x.For<IBiView>().TheDefaultIsConcreteType<BiView>();
+ x.For<IBiPresenter>().TheDefaultIsConcreteType<BiPresenter>();
});
}
Modified: trunk/Source/StructureMap.Testing/Bugs/FillAllPropertiesShouldWorkForAlreadyConfiguredPluginsBug.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/FillAllPropertiesShouldWorkForAlreadyConfiguredPluginsBug.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/Bugs/FillAllPropertiesShouldWorkForAlreadyConfiguredPluginsBug.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -16,7 +16,7 @@
container.Configure(x =>
{
- x.ForRequestedType<ISomeDependency>()
+ x.For<ISomeDependency>()
.TheDefaultIsConcreteType<ClassThatImplementsDependency>();
x.FillAllPropertiesOfType<ISomeDependency>();
Modified: trunk/Source/StructureMap.Testing/Bugs/HttpSessionNullRefBug.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/HttpSessionNullRefBug.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/Bugs/HttpSessionNullRefBug.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -11,7 +11,7 @@
{
var container = new Container(x =>
{
- x.ForRequestedType<IGateway>()
+ x.For<IGateway>()
.CacheBy(InstanceScope.HybridHttpSession)
.TheDefaultIsConcreteType<DefaultGateway>();
});
Modified: trunk/Source/StructureMap.Testing/Bugs/LambdaCreatesNullBugTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/LambdaCreatesNullBugTester.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/Bugs/LambdaCreatesNullBugTester.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -20,9 +20,9 @@
{
var container = new Container(x =>
{
- x.ForRequestedType<IPrincipal>().TheDefault.Is.ConstructedBy(() => null);
+ x.For<IPrincipal>().TheDefault.Is.ConstructedBy(() => null);
- x.ForRequestedType<TestClass>().TheDefaultIsConcreteType<TestClass>();
+ x.For<TestClass>().TheDefaultIsConcreteType<TestClass>();
});
container.GetInstance<TestClass>().ShouldNotBeNull();
Modified: trunk/Source/StructureMap.Testing/Bugs/MixedConfigureAndInitializeMissingInstanceProblem.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/MixedConfigureAndInitializeMissingInstanceProblem.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/Bugs/MixedConfigureAndInitializeMissingInstanceProblem.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -15,7 +15,7 @@
new Container(
x =>
{
- x.ForRequestedType<IWidget>().MissingNamedInstanceIs.Conditional(
+ x.For<IWidget>().MissingNamedInstanceIs.Conditional(
o => { o.TheDefault.Is.ConstructedBy(c => new ColorWidget(c.RequestedName)); });
});
}
@@ -27,7 +27,7 @@
[Test]
public void configure_again_and_try_to_fetch_the_missing_instance()
{
- container.Configure(x => { x.ForRequestedType<IWidget>().TheDefaultIsConcreteType<AWidget>(); });
+ container.Configure(x => { x.For<IWidget>().TheDefaultIsConcreteType<AWidget>(); });
container.GetInstance<IWidget>("Red").ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Red");
}
@@ -35,12 +35,12 @@
[Test]
public void configure_the_missing_method_instance_in_the_configure()
{
- container = new Container(x => { x.ForRequestedType<IWidget>().TheDefaultIsConcreteType<AWidget>(); });
+ container = new Container(x => { x.For<IWidget>().TheDefaultIsConcreteType<AWidget>(); });
container.Configure(
x =>
{
- x.ForRequestedType<IWidget>().MissingNamedInstanceIs.Conditional(
+ x.For<IWidget>().MissingNamedInstanceIs.Conditional(
o => { o.TheDefault.Is.ConstructedBy(c => new ColorWidget(c.RequestedName)); });
});
Modified: trunk/Source/StructureMap.Testing/Bugs/SingletonShouldBeLazy.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/SingletonShouldBeLazy.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/Bugs/SingletonShouldBeLazy.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -32,7 +32,7 @@
{
var container = new Container(x =>
{
- x.ForRequestedType<IGateway>().CacheBy(InstanceScope.Singleton).TheDefaultIsConcreteType
+ x.For<IGateway>().CacheBy(InstanceScope.Singleton).TheDefaultIsConcreteType
<SingletonShouldBeLazy>();
});
}
@@ -78,7 +78,7 @@
ObjectFactory.Initialize(registry =>
registry.UseDefaultStructureMapConfigFile = false);
ObjectFactory.Configure(registry =>
- registry.ForRequestedType<ICrm>().TheDefaultIsConcreteType<Crm>
+ registry.For<ICrm>().TheDefaultIsConcreteType<Crm>
().CacheBy(InstanceScope.Singleton));
}
}
Modified: trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -12,7 +12,7 @@
var container = new Container(x => { });
container.Configure(x =>
{
- x.ForRequestedType<IGateway>().CacheBy(InstanceScope.Singleton)
+ x.For<IGateway>().CacheBy(InstanceScope.Singleton)
.TheDefaultIsConcreteType<DefaultGateway>();
});
Modified: trunk/Source/StructureMap.Testing/BuildSessionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/BuildSessionTester.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/BuildSessionTester.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -97,7 +97,7 @@
{
IContainer manager = new Container(r =>
{
- r.ForRequestedType<IWidget>().AddInstances(x =>
+ r.For<IWidget>().AddInstances(x =>
{
x.Object(new ColorWidget("Red"));
x.Object(new ColorWidget("Blue"));
@@ -144,7 +144,7 @@
return new ColorRule("Red");
});
var registry = new Registry();
- registry.ForRequestedType<ColorRule>().TheDefault.IsThis(instance);
+ registry.For<ColorRule>().TheDefault.IsThis(instance);
PluginGraph graph = registry.Build();
var session = new BuildSession(graph);
Modified: trunk/Source/StructureMap.Testing/BuildUpIntegratedTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/BuildUpIntegratedTester.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/BuildUpIntegratedTester.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -23,7 +23,7 @@
var theGateway = new DefaultGateway();
var container = new Container(x =>
{
- x.ForRequestedType<IGateway>().TheDefault.IsThis(theGateway);
+ x.For<IGateway>().TheDefault.IsThis(theGateway);
x.SetAllProperties(y => { y.OfType<IGateway>(); });
});
@@ -41,7 +41,7 @@
ObjectFactory.Initialize(x =>
{
x.IgnoreStructureMapConfig = true;
- x.ForRequestedType<IGateway>().TheDefault.IsThis(theGateway);
+ x.For<IGateway>().TheDefault.IsThis(theGateway);
// First we create a new Setter Injection Policy that
// forces StructureMap to inject all public properties
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/AddTypesTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/AddTypesTester.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/AddTypesTester.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -29,7 +29,7 @@
[Test]
public void A_concrete_type_is_available_by_name_when_it_is_added_by_the_shorthand_mechanism()
{
- IContainer container = new Container(r => r.ForRequestedType<IAddTypes>().AddInstances(x =>
+ IContainer container = new Container(r => r.For<IAddTypes>().AddInstances(x =>
{
x.OfConcreteType<RedAddTypes>().WithName("Red");
x.OfConcreteType<GreenAddTypes>().WithName("Green");
@@ -45,7 +45,7 @@
[Test]
public void A_concrete_type_is_available_when_it_is_added_by_the_shorthand_mechanism()
{
- IContainer manager = new Container(registry => registry.ForRequestedType<IAddTypes>()
+ IContainer manager = new Container(registry => registry.For<IAddTypes>()
.AddConcreteType<RedAddTypes>()
.AddConcreteType<GreenAddTypes>()
.AddConcreteType<BlueAddTypes>()
@@ -60,7 +60,7 @@
public void Make_sure_that_we_dont_double_dip_instances_when_we_register_a_type_with_a_name()
{
IContainer manager = new Container(r =>
- r.ForRequestedType<IAddTypes>().AddInstances(x =>
+ r.For<IAddTypes>().AddInstances(x =>
{
x.OfConcreteType<GreenAddTypes>();
x.OfConcreteType<BlueAddTypes>();
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -21,7 +21,7 @@
var concretion2 = new Concretion();
IContainer container = new Container(r =>
- r.ForRequestedType<Abstraction>().AddInstances(x =>
+ r.For<Abstraction>().AddInstances(x =>
{
x.ConstructedBy(() => concretion1).WithName("One");
x.ConstructedBy(() => concretion2).WithName("Two");
@@ -38,7 +38,7 @@
IContainer container =
new Container(
- registry => registry.ForRequestedType<Abstraction>().TheDefault.Is.ConstructedBy(() => concretion));
+ registry => registry.For<Abstraction>().TheDefault.Is.ConstructedBy(() => concretion));
container.GetInstance<Abstraction>().ShouldBeTheSameAs(concretion);
}
@@ -50,7 +50,7 @@
IContainer manager = new Container(registry =>
{
- registry.ForRequestedType<Abstraction>().AddInstances(x =>
+ registry.For<Abstraction>().AddInstances(x =>
{
x.ConstructedBy(() => concretion1).WithName("One");
x.ConstructedBy(() => concretion2).WithName("Two");
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -87,7 +87,7 @@
{
var registry = new Registry();
CreatePluginFamilyExpression<IGateway> expression =
- registry.BuildInstancesOf<IGateway>().CacheBy(InstanceScope.ThreadLocal);
+ registry.For<IGateway>().CacheBy(InstanceScope.ThreadLocal);
Assert.IsNotNull(expression);
PluginGraph pluginGraph = registry.Build();
@@ -102,7 +102,7 @@
public void BuildInstancesOfType()
{
var registry = new Registry();
- registry.BuildInstancesOf<IGateway>();
+ registry.For<IGateway>();
PluginGraph pluginGraph = registry.Build();
Assert.IsTrue(pluginGraph.ContainsFamily(typeof (IGateway)));
@@ -114,7 +114,7 @@
{
var registry = new Registry();
CreatePluginFamilyExpression<IGateway> expression =
- registry.BuildInstancesOf<IGateway>();
+ registry.For<IGateway>();
Assert.IsNotNull(expression);
PluginGraph pluginGraph = registry.Build();
@@ -128,7 +128,7 @@
{
var registry = new Registry();
CreatePluginFamilyExpression<IGateway> expression =
- registry.BuildInstancesOf<IGateway>().Singleton();
+ registry.For<IGateway>().Singleton();
Assert.IsNotNull(expression);
PluginGraph pluginGraph = registry.Build();
@@ -143,7 +143,7 @@
{
var container = new Container(x =>
{
- x.ForRequestedType<ClassWithStringInConstructor>().TheDefaultIsConcreteType
+ x.For<ClassWithStringInConstructor>().TheDefaultIsConcreteType
<ClassWithStringInConstructor>();
});
Assert.Fail("Should have thrown exception 231");
@@ -159,7 +159,7 @@
{
var registry = new Registry();
// Specify the default implementation for an interface
- registry.BuildInstancesOf<IGateway>().TheDefaultIsConcreteType<StubbedGateway>();
+ registry.For<IGateway>().TheDefaultIsConcreteType<StubbedGateway>();
PluginGraph pluginGraph = registry.Build();
Assert.IsTrue(pluginGraph.ContainsFamily(typeof (IGateway)));
@@ -174,7 +174,7 @@
public void CanOverrideTheDefaultInstanceAndCreateAnAllNewPluginOnTheFly()
{
var registry = new Registry();
- registry.BuildInstancesOf<IGateway>().TheDefaultIsConcreteType<FakeGateway>();
+ registry.For<IGateway>().TheDefaultIsConcreteType<FakeGateway>();
PluginGraph pluginGraph = registry.Build();
Assert.IsTrue(pluginGraph.ContainsFamily(typeof (IGateway)));
@@ -190,7 +190,7 @@
{
var container = new Container(r =>
{
- r.ForRequestedType<IWidget>().TheDefault.Is.OfConcreteType<ColorWidget>()
+ r.For<IWidget>().TheDefault.Is.OfConcreteType<ColorWidget>()
.WithCtorArg("color").EqualTo("Red");
});
@@ -203,7 +203,7 @@
var lifecycle = new StubbedLifecycle();
var registry = new Registry();
- registry.BuildInstancesOf<IGateway>().LifecycleIs(lifecycle);
+ registry.For<IGateway>().LifecycleIs(lifecycle);
PluginGraph pluginGraph = registry.Build();
@@ -215,7 +215,7 @@
{
var manager =
new Container(
- registry => registry.ForRequestedType<IWidget>().TheDefault.Is.ConstructedBy(() => new AWidget()));
+ registry => registry.For<IWidget>().TheDefault.Is.ConstructedBy(() => new AWidget()));
Assert.IsInstanceOfType(typeof (AWidget), manager.GetInstance<IWidget>());
}
@@ -227,7 +227,7 @@
var manager =
new Container(
- registry => registry.ForRequestedType<IWidget>().TheDefault.Is.Object(aWidget));
+ registry => registry.For<IWidget>().TheDefault.Is.Object(aWidget));
Assert.AreSame(aWidget, manager.GetInstance<IWidget>());
}
@@ -240,7 +240,7 @@
{
var manager =
new Container(
- registry => registry.ForRequestedType<Guid>().TheDefault.Is.ConstructedBy(() => Guid.NewGuid()));
+ registry => registry.For<Guid>().TheDefault.Is.ConstructedBy(() => Guid.NewGuid()));
Assert.IsInstanceOfType(typeof (Guid), manager.GetInstance<Guid>());
}
@@ -249,7 +249,7 @@
public void TheDefaultInstanceIsConcreteType()
{
IContainer manager = new Container(
- registry => registry.BuildInstancesOf<Rule>().TheDefaultIsConcreteType<ARule>());
+ registry => registry.For<Rule>().TheDefaultIsConcreteType<ARule>());
Assert.IsInstanceOfType(typeof (ARule), manager.GetInstance<Rule>());
}
@@ -258,7 +258,7 @@
public void TheDefaultInstanceIsPickedUpFromTheAttribute()
{
var registry = new Registry();
- registry.BuildInstancesOf<IGateway>();
+ registry.For<IGateway>();
registry.Scan(x => x.AssemblyContainingType<IGateway>());
PluginGraph pluginGraph = registry.Build();
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs 2010-01-04 18:56:18 UTC (rev 320)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs 2010-01-04 19:08:50 UTC (rev 321)
@@ -21,12 +21,12 @@
{
assertThingMatches(r =>
{
- r.ForRequestedType<IWidget>().TheDefault.Is.OfConcreteType<ColorWidget>()
+ r.For<IWidget>().TheDefault.Is.OfConcreteType<ColorWidget>()
.WithProperty("color").EqualTo("yellow");
- r.ForRequestedType<Rule>().TheDefaultIsConcreteType<WidgetRule>();
+ r.For<Rule>().TheDefaultIsConcreteType<WidgetRule>();
- r.ForRequestedType<Thing>().TheDefault.Is.OfConcreteType<Thing>()
+ r.For<Thing>().TheDefault.Is.OfConcreteType<Thing>()
.WithCtorArg("average").EqualTo(.333)
.WithCtorArg("name").EqualTo("Jeremy")
.WithCtorArg("count").EqualTo(4);
@@ -38,11 +38,11 @@
{
assertThingMatches(r =>
{
- r.ForRequestedType<IWidget>().TheDefault.IsThis(new ColorWidget("yellow"));
+ r.For<IWidget>().TheDefault.IsThis(new ColorWidget("yellow"));
- r.ForRequestedType<Rule>().TheDefaultIsConcreteType<WidgetRule>();
+ r.For<Rule>().TheDefaultIsConcreteType<WidgetRule>();
- r.ForRequestedType<Thing>().TheDefault.Is.OfConcreteType<Thing>()
+ r.For<Thing>().TheDefault.Is.OfConcreteType<Thing>()
.WithProperty("average").EqualTo(.333)
.WithProperty("name").EqualTo("Jeremy")
.WithProperty("count").EqualTo(4);
@@ -55,11 +55,11 @@
{
assertThingMatches(r =>
{
- r.ForRequestedType<IWidget>().TheDefault.Is.PrototypeOf(new ColorWidget("yellow"));
+ r.For<IWidget>().TheDefault.Is.PrototypeOf(new ColorWidget("yellow"));
- r.BuildInstancesOf<Rule>().TheDefaultIsConcreteType<WidgetRule>();
+ r.For<Rule>().TheDefaultIsConcreteType<WidgetRule>();
- r.ForRequestedType<Thing>().TheDefault.Is.OfConcreteType<Thing>()
+ r.For<Thing>().TheDefault.Is.OfConcreteType<Thing>()
.WithProperty("average").EqualTo(.333)
.WithProperty("name").EqualTo("Jeremy")
.WithProperty("count").EqualTo(4);
@@ -82,7 +82,7 @@
.WithName("TheWidgetRule")
.CtorDependency<IWidget>().Is(i => i.TheInstanceNamed("Yellow"));
- registry.BuildInstancesOf<Thing>().TheDefault.Is.OfConcreteType<Thing>()
+ registry.For<Thing>().TheDefault.Is.OfConcreteType<Thing>()
.WithCtorArg("average").EqualTo(.333)
.WithCtorArg("name").EqualTo("Jeremy")
.WithCtorArg("count").EqualTo(4)
@@ -96,7 +96,7 @@
{
assertThingMatches(registry =>
{
- registry.ForRequestedType<Thing>().TheDefault.Is.OfConcreteType<Thing>()
+ registry.For<Thing>().TheDefault.Is.OfConcreteType<Thing>()
...
[truncated message content] |
|
From: <jer...@us...> - 2010-01-04 18:56:27
|
Revision: 320
http://structuremap.svn.sourceforge.net/structuremap/?rev=320&view=rev
Author: jeremydmiller
Date: 2010-01-04 18:56:18 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
Eliminated the FillDependencies methods
Modified Paths:
--------------
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/IContainer.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs
trunk/Source/StructureMap.Testing/Graph/FillDependenciesTester.cs
Added Paths:
-----------
trunk/Source/StructureMap/Pipeline/BasicInstance.cs
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-29 19:22:20 UTC (rev 319)
+++ trunk/Source/StructureMap/Container.cs 2010-01-04 18:56:18 UTC (rev 320)
@@ -155,11 +155,6 @@
return (T) GetInstance(typeof (T));
}
- [Obsolete("Please use GetInstance<T>() instead.")]
- public T FillDependencies<T>()
- {
- return (T) FillDependencies(typeof (T));
- }
/// <summary>
@@ -282,24 +277,7 @@
_pipelineGraph.SetDefault(pluginType, instance);
}
- [Obsolete("Please use GetInstance(Type) instead")]
- public object FillDependencies(Type type)
- {
- if (!type.IsConcrete())
- {
- throw new StructureMapException(230, type.FullName);
- }
- var plugin = new Plugin(type);
- if (!plugin.CanBeAutoFilled)
- {
- throw new StructureMapException(230, type.FullName);
- }
-
- return GetInstance(type);
- }
-
-
/// <summary>
/// Creates or resolves all registered instances of the pluginType
/// </summary>
Modified: trunk/Source/StructureMap/IContainer.cs
===================================================================
--- trunk/Source/StructureMap/IContainer.cs 2009-12-29 19:22:20 UTC (rev 319)
+++ trunk/Source/StructureMap/IContainer.cs 2010-01-04 18:56:18 UTC (rev 320)
@@ -104,13 +104,6 @@
/// <returns></returns>
T TryGetInstance<T>(string instanceKey);
-
- [Obsolete("Please use GetInstance<T>() instead.")]
- T FillDependencies<T>();
-
- [Obsolete("Please use GetInstance(Type) instead")]
- object FillDependencies(Type type);
-
/// <summary>
/// Used to add additional configuration to a Container *after* the initialization.
/// </summary>
Added: trunk/Source/StructureMap/Pipeline/BasicInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/BasicInstance.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/BasicInstance.cs 2010-01-04 18:56:18 UTC (rev 320)
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+
+namespace StructureMap.Pipeline
+{
+ public interface BasicInstance
+ {
+ Type PluggedType { get; }
+
+
+ Dictionary<string, string> Properties { get; }
+ Dictionary<string, Instance> Children { get; }
+ Dictionary<string, Instance[]> Arrays { get; }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-12-29 19:22:20 UTC (rev 319)
+++ trunk/Source/StructureMap/StructureMap.csproj 2010-01-04 18:56:18 UTC (rev 320)
@@ -368,6 +368,7 @@
<Compile Include="Graph\PluggableAttributeScanner.cs" />
<Compile Include="Graph\PluginCache.cs" />
<Compile Include="IContext.cs" />
+ <Compile Include="Pipeline\BasicInstance.cs" />
<Compile Include="Pipeline\HybridLifecycle.cs" />
<Compile Include="Query\EmptyConfiguration.cs" />
<Compile Include="Query\GenericFamilyConfiguration.cs" />
@@ -403,7 +404,6 @@
<Compile Include="Query\Model.cs" />
<Compile Include="Pipeline\BuildFrame.cs" />
<Compile Include="Pipeline\BuildStack.cs" />
- <Compile Include="Pipeline\ConfiguredInstanceBase.cs" />
<Compile Include="Pipeline\InstanceKey.cs" />
<Compile Include="Pipeline\IStructuredInstance.cs" />
<Compile Include="Pipeline\PropertyExpression.cs" />
Modified: trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2009-12-29 19:22:20 UTC (rev 319)
+++ trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2010-01-04 18:56:18 UTC (rev 320)
@@ -45,7 +45,7 @@
var service2 = _container.GetInstance<IMockedService2>();
var service3 = _container.GetInstance<IMockedService3>();
- var concreteClass = _container.FillDependencies<ConcreteClass>();
+ var concreteClass = _container.GetInstance<ConcreteClass>();
Assert.AreSame(service, concreteClass.Service);
Assert.AreSame(service2, concreteClass.Service2);
Modified: trunk/Source/StructureMap.Testing/Graph/FillDependenciesTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/FillDependenciesTester.cs 2009-12-29 19:22:20 UTC (rev 319)
+++ trunk/Source/StructureMap.Testing/Graph/FillDependenciesTester.cs 2010-01-04 18:56:18 UTC (rev 320)
@@ -17,7 +17,7 @@
});
var concreteClass =
- (FilledConcreteClass) container.FillDependencies(typeof (FilledConcreteClass));
+ (FilledConcreteClass) container.GetInstance(typeof (FilledConcreteClass));
Assert.IsNotNull(concreteClass.Widget);
Assert.IsNotNull(concreteClass.Strategy);
@@ -27,7 +27,7 @@
public void TryToFillDependenciesOnAbstractClassThrowsException()
{
var manager = new Container();
- manager.FillDependencies(typeof (AbstractClass));
+ manager.GetInstance(typeof (AbstractClass));
}
@@ -35,7 +35,7 @@
public void TryToFillDependenciesOnClassWithPrimitiveArgumentsThrowsException()
{
var manager = new Container();
- manager.FillDependencies(typeof (CannotBeFilledConcreteClass));
+ manager.GetInstance(typeof (CannotBeFilledConcreteClass));
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-29 19:22:26
|
Revision: 319
http://structuremap.svn.sourceforge.net/structuremap/?rev=319&view=rev
Author: jeremydmiller
Date: 2009-12-29 19:22:20 +0000 (Tue, 29 Dec 2009)
Log Message:
-----------
made a copy
Added Paths:
-----------
branches/2.5.4/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-29 17:15:05
|
Revision: 318
http://structuremap.svn.sourceforge.net/structuremap/?rev=318&view=rev
Author: jeremydmiller
Date: 2009-12-29 17:14:57 +0000 (Tue, 29 Dec 2009)
Log Message:
-----------
last minute fixes for scanning, ObjectInstance.ConcreteType, PluginFamily.AddType()
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/Pipeline/ObjectInstance.cs
trunk/Source/StructureMap/Query/IModel.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-29 14:40:45 UTC (rev 317)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-29 17:14:57 UTC (rev 318)
@@ -140,7 +140,6 @@
/// <summary>
/// Configure this type as the supplied value
/// </summary>
- /// <param name="instance"></param>
/// <returns></returns>
public ObjectInstance Add(object @object)
{
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-29 14:40:45 UTC (rev 317)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-29 17:14:57 UTC (rev 318)
@@ -294,11 +294,16 @@
return templatedFamily;
}
+ private bool hasType(Type concreteType)
+ {
+ return FindPlugin(concreteType) != null || _instances.Any(x => x.ConcreteType == concreteType);
+ }
+
public void AddType(Type concreteType)
{
if (!concreteType.CanBeCastTo(_pluginType)) return;
- if (FindPlugin(concreteType) == null)
+ if (!hasType(concreteType))
{
AddPlugin(concreteType);
}
@@ -308,7 +313,7 @@
{
if (!concreteType.CanBeCastTo(_pluginType)) return;
- if (FindPlugin(name) == null)
+ if (!hasType(concreteType))
{
AddPlugin(concreteType, name);
}
Modified: trunk/Source/StructureMap/Pipeline/ObjectInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ObjectInstance.cs 2009-12-29 14:40:45 UTC (rev 317)
+++ trunk/Source/StructureMap/Pipeline/ObjectInstance.cs 2009-12-29 17:14:57 UTC (rev 318)
@@ -63,5 +63,10 @@
{
return string.Format("LiteralInstance: {0}", _object);
}
+
+ protected override Type getConcreteType(Type pluginType)
+ {
+ return _object.GetType();
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/IModel.cs
===================================================================
--- trunk/Source/StructureMap/Query/IModel.cs 2009-12-29 14:40:45 UTC (rev 317)
+++ trunk/Source/StructureMap/Query/IModel.cs 2009-12-29 17:14:57 UTC (rev 318)
@@ -10,7 +10,7 @@
public interface IModel
{
/// <summary>
- /// Access to all the <seealso cref="PluginTypeConfiguration">Plugin Type</seealso> registrations
+ /// Access to all the <seealso cref="IPluginTypeConfiguration">Plugin Type</seealso> registrations
/// </summary>
IEnumerable<IPluginTypeConfiguration> PluginTypes { get; }
@@ -35,14 +35,14 @@
bool HasDefaultImplementationFor<T>();
/// <summary>
- /// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
+ /// Queryable access to all of the <see cref="InstanceRef">InstanceRef</see> for a given PluginType
/// </summary>
/// <param name="pluginType"></param>
/// <returns></returns>
IEnumerable<InstanceRef> InstancesOf(Type pluginType);
/// <summary>
- /// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
+ /// Queryable access to all of the <see cref="InstanceRef">InstanceRef</see> for a given PluginType
/// </summary>
/// <returns></returns>
IEnumerable<InstanceRef> InstancesOf<T>();
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs 2009-12-29 14:40:45 UTC (rev 317)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs 2009-12-29 17:14:57 UTC (rev 318)
@@ -14,8 +14,12 @@
{
ObjectFactory.Initialize(x =>
{
+ x.IgnoreStructureMapConfig = true;
+
x.Scan(s =>
{
+
+
s.AssemblyContainingType<RedGreenRegistry>();
s.LookForRegistries();
});
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-29 14:40:53
|
Revision: 317
http://structuremap.svn.sourceforge.net/structuremap/?rev=317&view=rev
Author: jeremydmiller
Date: 2009-12-29 14:40:45 +0000 (Tue, 29 Dec 2009)
Log Message:
-----------
last minute fixes to scanning found in regression test runs
Modified Paths:
--------------
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Graph/ITypeScanner.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/IContainer.cs
trunk/Source/StructureMap/InitializationExpression.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap/Util/Cache.cs
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-29 04:51:11 UTC (rev 316)
+++ trunk/Source/StructureMap/Container.cs 2009-12-29 14:40:45 UTC (rev 317)
@@ -482,6 +482,11 @@
Configure(x => x.For<PLUGINTYPE>().Use(instance));
}
+ public void Inject<PLUGINTYPE>(string name, PLUGINTYPE value)
+ {
+ Configure(x => x.For<PLUGINTYPE>().Use(value).Named(name));
+ }
+
/// <summary>
/// Injects the given object into a Container as the default for the designated
/// pluginType. Mostly used for temporarily setting up return values of the Container
Modified: trunk/Source/StructureMap/Graph/ITypeScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/ITypeScanner.cs 2009-12-29 04:51:11 UTC (rev 316)
+++ trunk/Source/StructureMap/Graph/ITypeScanner.cs 2009-12-29 14:40:45 UTC (rev 317)
@@ -24,7 +24,7 @@
Type pluginType = FindPluginType(type);
if (pluginType != null && Constructor.HasConstructors(type))
{
- registry.For(pluginType).Add(type);
+ registry.AddType(pluginType, type);
}
}
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-29 04:51:11 UTC (rev 316)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-29 14:40:45 UTC (rev 317)
@@ -34,14 +34,6 @@
PluginFamilyAttribute.ConfigureFamily(this);
- //if (IsConcrete(pluginType))
- //{
- // Plugin plugin = PluginCache.GetPlugin(pluginType);
- // if (plugin.CanBeCreated())
- // {
- // AddPlugin(pluginType, Plugin.DEFAULT);
- // }
- //}
}
public PluginGraph Parent { get { return _parent; } set { _parent = value; } }
@@ -362,7 +354,6 @@
/// <summary>
/// The InstanceKey of the default instance of the PluginFamily
/// </summary>
- [Obsolete]
public string DefaultInstanceKey { get { return _defaultKey; } set { _defaultKey = value ?? string.Empty; } }
#endregion
Modified: trunk/Source/StructureMap/IContainer.cs
===================================================================
--- trunk/Source/StructureMap/IContainer.cs 2009-12-29 04:51:11 UTC (rev 316)
+++ trunk/Source/StructureMap/IContainer.cs 2009-12-29 14:40:45 UTC (rev 317)
@@ -126,6 +126,9 @@
/// <param name="instance"></param>
void Inject<PLUGINTYPE>(PLUGINTYPE instance);
+ void Inject<PLUGINTYPE>(string name, PLUGINTYPE value);
+
+
/// <summary>
/// Injects the given object into a Container as the default for the designated
/// pluginType. Mostly used for temporarily setting up return values of the Container
Modified: trunk/Source/StructureMap/InitializationExpression.cs
===================================================================
--- trunk/Source/StructureMap/InitializationExpression.cs 2009-12-29 04:51:11 UTC (rev 316)
+++ trunk/Source/StructureMap/InitializationExpression.cs 2009-12-29 14:40:45 UTC (rev 317)
@@ -7,7 +7,7 @@
namespace StructureMap
{
- public interface IInitializationExpression
+ public interface IInitializationExpression : IRegistry
{
/// <summary>
/// If true, makes the existence of the StructureMap.config mandatory.
@@ -61,118 +61,6 @@
/// <param name="registry"></param>
void AddRegistry(Registry registry);
-
- /// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. BuildInstancesOf()
- /// and ForRequestedType() are synonyms
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();
-
- /// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. BuildInstancesOf()
- /// and ForRequestedType() are synonyms
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- CreatePluginFamilyExpression<PLUGINTYPE> ForRequestedType<PLUGINTYPE>();
-
- /// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. This method is specifically
- /// meant for registering open generic types
- /// </summary>
- /// <returns></returns>
- GenericFamilyExpression ForRequestedType(Type pluginType);
-
- /// <summary>
- /// This method is a shortcut for specifying the default constructor and
- /// setter arguments for a ConcreteType. ForConcreteType is shorthand for:
- /// ForRequestedType[T]().TheDefault.Is.OfConcreteType[T].**************
- /// when the PluginType and ConcreteType are the same Type
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- Registry.BuildWithExpression<T> ForConcreteType<T>();
-
- /// <summary>
- /// Adds an additional, non-Default Instance to the PluginType T.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- IsExpression<T> InstanceOf<T>();
-
- /// <summary>
- /// Adds an additional, non-Default Instance to the designated pluginType
- /// This method is mostly meant for open generic types
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- GenericIsExpression InstanceOf(Type pluginType);
-
- /// <summary>
- /// Expression Builder to define the defaults for a named Profile. Each call
- /// to CreateProfile is additive.
- /// </summary>
- /// <param name="profileName"></param>
- /// <returns></returns>
- ProfileExpression Profile(string profileName);
-
- /// <summary>
- /// An alternative way to use CreateProfile that uses ProfileExpression
- /// as a Nested Closure. This usage will result in cleaner code for
- /// multiple declarations
- /// </summary>
- /// <param name="profileName"></param>
- /// <param name="action"></param>
- void Profile(string profileName, Action<ProfileExpression> action);
-
- /// <summary>
- /// Registers a new TypeInterceptor object with the Container
- /// </summary>
- /// <param name="interceptor"></param>
- void RegisterInterceptor(TypeInterceptor interceptor);
-
- /// <summary>
- /// Allows you to define a TypeInterceptor inline with Lambdas or anonymous delegates
- /// </summary>
- /// <param name="match"></param>
- /// <returns></returns>
- /// <example>
- /// IfTypeMatches( ... ).InterceptWith( o => new ObjectWrapper(o) );
- /// </example>
- MatchedTypeInterceptor IfTypeMatches(Predicate<Type> match);
-
- /// <summary>
- /// Expresses a single "Scanning" action
- /// </summary>
- /// <param name="action"></param>
- /// <example>
- /// Scan(x => {
- /// x.Assembly("Foo.Services");
- /// x.WithDefaultConventions();
- /// });
- /// </example>
- void Scan(Action<IAssemblyScanner> action);
-
- /// <summary>
- /// Directs StructureMap to always inject dependencies into any and all public Setter properties
- /// of the type PLUGINTYPE.
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- CreatePluginFamilyExpression<PLUGINTYPE> FillAllPropertiesOfType<PLUGINTYPE>();
-
- /// <summary>
- /// Creates automatic "policies" for which public setters are considered mandatory
- /// properties by StructureMap that will be "setter injected" as part of the
- /// construction process.
- /// </summary>
- /// <param name="action"></param>
- void SetAllProperties(Action<SetterConvention> action);
}
public class InitializationExpression : ConfigurationExpression, IInitializationExpression
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-12-29 04:51:11 UTC (rev 316)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-12-29 14:40:45 UTC (rev 317)
@@ -234,7 +234,10 @@
public void EachInstance(Action<Type, Instance> action)
{
- _factories.Values.Each(f => { f.AllInstances.Each(i => action(f.PluginType, i)); });
+ _factories.Values.ToArray().Each(f =>
+ {
+ f.AllInstances.ToArray().Each(i => action(f.PluginType, i));
+ });
}
public IObjectCache FindCache(Type pluginType)
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-29 04:51:11 UTC (rev 316)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-29 14:40:45 UTC (rev 317)
@@ -5,7 +5,7 @@
namespace StructureMap
{
- public static class BasicExtensions
+ internal static class BasicExtensions
{
public static string ToName(this ILifecycle lifecycle)
{
@@ -30,7 +30,7 @@
}
}
- public static T As<T>(this object target) where T : class
+ internal static T As<T>(this object target) where T : class
{
return target as T;
}
Modified: trunk/Source/StructureMap/Util/Cache.cs
===================================================================
--- trunk/Source/StructureMap/Util/Cache.cs 2009-12-29 04:51:11 UTC (rev 316)
+++ trunk/Source/StructureMap/Util/Cache.cs 2009-12-29 14:40:45 UTC (rev 317)
@@ -1,127 +1,147 @@
using System;
+using System.Collections;
using System.Collections.Generic;
-using System.Threading;
+using StructureMap.Graph;
+using StructureMap.Pipeline;
namespace StructureMap.Util
{
- [Serializable]
- public class Cache<TKey, TValue> where TValue : class
+ public class Cache<KEY, VALUE> : IEnumerable<VALUE> where VALUE : class
{
- private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
- private readonly IDictionary<TKey, TValue> _values;
- private Func<TValue, TKey> _getKey = delegate { throw new NotImplementedException(); };
+ private readonly object _locker = new object();
+ private readonly IDictionary<KEY, VALUE> _values;
- private Action<TValue> _onAddition = x => { };
+ private Func<VALUE, KEY> _getKey = delegate { throw new NotImplementedException(); };
- private Func<TKey, TValue> _onMissing = delegate(TKey key)
+ private Func<KEY, VALUE> _onMissing = delegate(KEY key)
{
string message = string.Format("Key '{0}' could not be found", key);
throw new KeyNotFoundException(message);
};
public Cache()
- : this(new Dictionary<TKey, TValue>())
+ : this(new Dictionary<KEY, VALUE>())
{
}
- public Cache(Func<TKey, TValue> onMissing)
- : this(new Dictionary<TKey, TValue>(), onMissing)
+ public Cache(Func<KEY, VALUE> onMissing)
+ : this(new Dictionary<KEY, VALUE>(), onMissing)
{
}
- public Cache(IDictionary<TKey, TValue> dictionary, Func<TKey, TValue> onMissing)
+ public Cache(IDictionary<KEY, VALUE> dictionary, Func<KEY, VALUE> onMissing)
: this(dictionary)
{
_onMissing = onMissing;
}
- public Cache(IDictionary<TKey, TValue> dictionary)
+ public Cache(IDictionary<KEY, VALUE> dictionary)
{
_values = dictionary;
}
- public Func<TKey, TValue> OnMissing { set { _onMissing = value; } }
+ public Func<KEY, VALUE> OnMissing
+ {
+ set { _onMissing = value; }
+ }
- public Action<TValue> OnAddition { set { _onAddition = value; } }
+ public Func<VALUE, KEY> GetKey
+ {
+ get { return _getKey; }
+ set { _getKey = value; }
+ }
- public Func<TValue, TKey> GetKey { get { return _getKey; } set { _getKey = value; } }
-
public int Count
{
- get
- {
- using (ReadLock())
- return _values.Count;
- }
+ get { return _values.Count; }
}
- public TValue First
+ public VALUE First
{
get
{
- using (ReadLock())
- foreach (var pair in _values)
- {
- return pair.Value;
- }
+ foreach (var pair in _values)
+ {
+ return pair.Value;
+ }
return null;
}
}
- public TValue this[TKey key]
+ public VALUE this[KEY key]
{
get
{
- using (ReadLockToken @lock = ReadLock())
+ if (!_values.ContainsKey(key))
{
- if (!_values.ContainsKey(key))
+ lock (_locker)
{
- @lock.Upgrade();
if (!_values.ContainsKey(key))
{
- TValue value = _onMissing(key);
- _values.Add(key, value);
+ VALUE value = _onMissing(key);
+ //Check to make sure that the onMissing didn't cache this already
+ if(!_values.ContainsKey(key))
+ _values.Add(key, value);
}
}
-
- return _values[key];
}
+
+ return _values[key];
}
set
{
- _onAddition(value);
-
- using (WriteLockToken @lock = WriteLock())
+ if (_values.ContainsKey(key))
{
- if (_values.ContainsKey(key))
- {
- _values[key] = value;
- }
- else
- {
- _values.Add(key, value);
- }
+ _values[key] = value;
}
+ else
+ {
+ _values.Add(key, value);
+ }
}
}
- public void Fill(TKey key, TValue value)
+ #region IEnumerable<VALUE> Members
+
+ IEnumerator IEnumerable.GetEnumerator()
{
- using (WriteLock())
+ return ((IEnumerable<VALUE>)this).GetEnumerator();
+ }
+
+ public IEnumerator<VALUE> GetEnumerator()
+ {
+ return _values.Values.GetEnumerator();
+ }
+
+ #endregion
+
+ public void Fill(KEY key, VALUE value)
+ {
+ if (_values.ContainsKey(key))
{
- if (_values.ContainsKey(key))
- {
- return;
- }
+ return;
+ }
- _values.Add(key, value);
+ _values.Add(key, value);
+ }
+
+ public bool TryRetrieve(KEY key, out VALUE value)
+ {
+ value = default(VALUE);
+
+ if (_values.ContainsKey(key))
+ {
+ value = _values[key];
+ return true;
}
+
+ return false;
}
- public void Each(Action<TValue> action)
+ public void Each(Action<VALUE> action)
{
- using (ReadLock())
+ lock (_locker)
{
foreach (var pair in _values)
{
@@ -130,159 +150,76 @@
}
}
- public void Each(Action<TKey, TValue> action)
+ public void Each(Action<KEY, VALUE> action)
{
- using (ReadLock())
+ foreach (var pair in _values)
{
- foreach (var pair in _values)
- {
- action(pair.Key, pair.Value);
- }
+ action(pair.Key, pair.Value);
}
}
- public bool Has(TKey key)
+ public bool Has(KEY key)
{
- using (ReadLock())
- return _values.ContainsKey(key);
+ return _values.ContainsKey(key);
}
- public bool Exists(Predicate<TValue> predicate)
+ public bool Exists(Predicate<VALUE> predicate)
{
bool returnValue = false;
- Each(delegate(TValue value) { returnValue |= predicate(value); });
+ Each(delegate(VALUE value) { returnValue |= predicate(value); });
return returnValue;
}
- public TValue Find(Predicate<TValue> predicate)
+ public VALUE Find(Predicate<VALUE> predicate)
{
- using (ReadLock())
- foreach (var pair in _values)
+ foreach (var pair in _values)
+ {
+ if (predicate(pair.Value))
{
- if (predicate(pair.Value))
- {
- return pair.Value;
- }
+ return pair.Value;
}
+ }
return null;
}
- public TKey Find(TValue value)
+ public VALUE[] GetAll()
{
- using (ReadLock())
- foreach (var pair in _values)
- {
- if (pair.Value == value)
- {
- return pair.Key;
- }
- }
+ var returnValue = new VALUE[Count];
+ _values.Values.CopyTo(returnValue, 0);
- return default(TKey);
- }
-
- public TValue[] GetAll()
- {
- var returnValue = new TValue[Count];
- using (ReadLock())
- _values.Values.CopyTo(returnValue, 0);
-
return returnValue;
}
- public void Remove(TKey key)
+ public void Remove(KEY key)
{
- using (ReadLock())
- if (_values.ContainsKey(key))
- {
- _values.Remove(key);
- }
+ if (_values.ContainsKey(key))
+ {
+ _values.Remove(key);
+ }
}
public void Clear()
{
- using (WriteLock())
- _values.Clear();
+ _values.Clear();
}
- public void WithValue(TKey key, Action<TValue> callback)
+ public Cache<KEY, VALUE> Clone()
{
- using (ReadLock())
- _values.TryGet(key, callback);
- }
+ var clone = new Cache<KEY, VALUE>(_onMissing);
+ _values.Each(pair => clone[pair.Key] = pair.Value);
- private ReadLockToken ReadLock()
- {
- return new ReadLockToken(_lock);
+ return clone;
}
- private WriteLockToken WriteLock()
+ public void WithValue(KEY key, Action<VALUE> action)
{
- return new WriteLockToken(_lock);
- }
-
- public Cache<TKey, TValue> Clone()
- {
- var cache = new Cache<TKey, TValue>();
- cache._onMissing = _onMissing;
-
- Each((key, value) => cache[key] = value);
-
- return cache;
- }
-
- #region Nested type: ReadLockToken
-
- private class ReadLockToken : IDisposable
- {
- private readonly ReaderWriterLockSlim _lock;
- private bool upgraded;
-
- public ReadLockToken(ReaderWriterLockSlim @lock)
+ if (_values.ContainsKey(key))
{
- _lock = @lock;
- _lock.EnterReadLock();
+ action(this[key]);
}
-
- public void Dispose()
- {
- if (upgraded)
- _lock.ExitWriteLock();
- else
- _lock.ExitReadLock();
- }
-
- public void Upgrade()
- {
- _lock.ExitReadLock();
- _lock.EnterWriteLock();
- upgraded = true;
- }
}
-
- #endregion
-
- #region Nested type: WriteLockToken
-
- private class WriteLockToken : IDisposable
- {
- private readonly ReaderWriterLockSlim _lock;
-
- public WriteLockToken(ReaderWriterLockSlim @lock)
- {
- _lock = @lock;
- _lock.EnterWriteLock();
- }
-
- public void Dispose()
- {
- _lock.EnterWriteLock();
- }
- }
-
- #endregion
}
-}
\ No newline at end of file
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-29 04:51:24
|
Revision: 316
http://structuremap.svn.sourceforge.net/structuremap/?rev=316&view=rev
Author: jeremydmiller
Date: 2009-12-29 04:51:11 +0000 (Tue, 29 Dec 2009)
Log Message:
-----------
fix to the explicit args functionality introduced in the recent changes
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Graph/Plugin.cs
trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs
trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs
trunk/Source/StructureMap.Testing/Examples/Interception.cs
trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-29 03:50:13 UTC (rev 315)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-29 04:51:11 UTC (rev 316)
@@ -120,6 +120,11 @@
return TheDefault.Is.ConstructedBy(func);
}
+ public void Use(Instance instance)
+ {
+ TheDefault.IsThis(instance);
+ }
+
/// <summary>
/// Shorthand to say TheDefault.IsThis(@object)
/// </summary>
Modified: trunk/Source/StructureMap/Graph/Plugin.cs
===================================================================
--- trunk/Source/StructureMap/Graph/Plugin.cs 2009-12-29 03:50:13 UTC (rev 315)
+++ trunk/Source/StructureMap/Graph/Plugin.cs 2009-12-29 04:51:11 UTC (rev 316)
@@ -74,7 +74,7 @@
public string FindArgumentNameForType<T>()
{
- return FindArgumentNameForType(typeof (T));
+ return FindArgumentNameForType(typeof (T), CannotFindProperty.ThrowException);
}
public string FindArgumentNameForEnumerableOf(Type type)
@@ -87,13 +87,13 @@
}).FirstOrDefault(x => x != null);
}
- public string FindArgumentNameForType(Type type)
+ public string FindArgumentNameForType(Type type, CannotFindProperty cannotFind)
{
string returnValue =
_constructor.FindFirstConstructorArgumentOfType(type) ??
_setters.FindFirstWriteablePropertyOfType(type);
- if (returnValue == null)
+ if (returnValue == null && cannotFind == CannotFindProperty.ThrowException)
{
throw new StructureMapException(302, type.FullName, _pluggedType.FullName);
}
Modified: trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs 2009-12-29 03:50:13 UTC (rev 315)
+++ trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs 2009-12-29 04:51:11 UTC (rev 316)
@@ -47,10 +47,10 @@
SetChild(name, instance);
}
- public void SetValue(Type type, object value)
+ public void SetValue(Type type, object value, CannotFindProperty cannotFind)
{
- string name = _plugin.FindArgumentNameForType(type);
- SetValue(name, value);
+ string name = _plugin.FindArgumentNameForType(type, cannotFind);
+ if (name != null) SetValue(name, value);
}
void IConfiguredInstance.SetValue(string name, object value)
@@ -175,7 +175,7 @@
protected string findPropertyName(Type dependencyType)
{
- string propertyName = _plugin.FindArgumentNameForType(dependencyType);
+ string propertyName = _plugin.FindArgumentNameForType(dependencyType, CannotFindProperty.ThrowException);
if (string.IsNullOrEmpty(propertyName))
{
Modified: trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2009-12-29 03:50:13 UTC (rev 315)
+++ trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2009-12-29 04:51:11 UTC (rev 316)
@@ -52,7 +52,11 @@
{
_args.Each(pair => { instance.SetValue(pair.Key, pair.Value); });
- _children.Each(pair => { instance.SetValue(pair.Key, pair.Value); });
+ _children.Each(pair =>
+ {
+ instance.SetValue(pair.Key, pair.Value, CannotFindProperty.Ignore);
+
+ });
}
public bool Has(Type type)
Modified: trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs 2009-12-29 03:50:13 UTC (rev 315)
+++ trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs 2009-12-29 04:51:11 UTC (rev 316)
@@ -3,6 +3,12 @@
namespace StructureMap.Pipeline
{
+ public enum CannotFindProperty
+ {
+ ThrowException,
+ Ignore
+ }
+
public interface IConfiguredInstance
{
string Name { get; }
@@ -15,7 +21,7 @@
bool HasProperty(string propertyName, BuildSession session);
void SetChild(string name, Instance instance);
- void SetValue(Type type, object value);
+ void SetValue(Type type, object value, CannotFindProperty cannotFind);
void SetValue(string name, object value);
void SetCollection(string name, IEnumerable<Instance> children);
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs 2009-12-29 03:50:13 UTC (rev 315)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs 2009-12-29 04:51:11 UTC (rev 316)
@@ -117,21 +117,7 @@
container.GetInstance<ITarget>().ShouldBeOfType<Target2>();
}
- [Test, Explicit]
- public void Add_default_instance2()
- {
- var container =
- new Container(
- r => { r.ForRequestedType(typeof (IRepository<>)).TheDefaultIsConcreteType(typeof (OnlineRepository<>)); });
- Assert.IsInstanceOfType(typeof (Target2), container.GetInstance<ITarget>());
-
-
- var repository =
- ObjectFactory.GetInstance<IRepository<Invoice>>();
- }
-
-
[Test]
public void Add_instance_directly()
{
Modified: trunk/Source/StructureMap.Testing/Examples/Interception.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Examples/Interception.cs 2009-12-29 03:50:13 UTC (rev 315)
+++ trunk/Source/StructureMap.Testing/Examples/Interception.cs 2009-12-29 04:51:11 UTC (rev 316)
@@ -16,7 +16,6 @@
{
public void StartConnection()
{
- throw new NotImplementedException();
}
public void Start()
@@ -96,19 +95,6 @@
}
}
- [TestFixture, Explicit]
- public class InterceptionRegistryInAction
- {
- [Test]
- public void see_the_enrichment_with_a_decorator_in_action()
- {
- var container = new Container(new InterceptionRegistry());
- container.GetInstance<IConnectionListener>()
- .ShouldBeOfType<LoggingDecorator>()
- .Inner.ShouldBeOfType<ClassThatNeedsSomeBootstrapping>();
- }
- }
-
public class CustomInterceptor : InstanceInterceptor
{
public object Process(object target, IContext context)
Modified: trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs 2009-12-29 03:50:13 UTC (rev 315)
+++ trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs 2009-12-29 04:51:11 UTC (rev 316)
@@ -6,7 +6,7 @@
namespace StructureMap.Testing
{
- [TestFixture, Ignore("Putting right back on")]
+ [TestFixture]
public class GenericsIntegrationTester
{
#region Setup/Teardown
@@ -49,7 +49,7 @@
private Container manager;
- [Test]
+ [Test, Ignore("not sure I want this behavior anyway")]
public void AllTypesWithSpecificImplementation()
{
IList objectConcepts = manager.GetAllInstances(typeof (IConcept<object>));
@@ -136,7 +136,7 @@
Assert.AreNotSame(object1, object4);
}
- [Test]
+ [Test, Ignore("not sure we want this behavior anyway")]
public void SpecificImplementation()
{
var concept = (IConcept<object>) manager.GetInstance(typeof (IConcept<object>), "Specific");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-29 03:50:22
|
Revision: 315
http://structuremap.svn.sourceforge.net/structuremap/?rev=315&view=rev
Author: jeremydmiller
Date: 2009-12-29 03:50:13 +0000 (Tue, 29 Dec 2009)
Log Message:
-----------
marking more things [Obsolete]. Depending on what happens with the migration to other projects, this might be the 2.5.4 release
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Extensions.cs
trunk/Source/StructureMap/Graph/Plugin.cs
trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs
trunk/Source/StructureMap/Pipeline/PropertyExpression.cs
trunk/Source/StructureMap/Pipeline/SmartInstance.cs
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginTester.cs
trunk/Source/StructureMap.Testing/ObjectFactoryInitializeTester.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -374,6 +374,14 @@
return instance;
}
+ public SmartInstance<PLUGGEDTYPE> Add<PLUGGEDTYPE>()
+ {
+ var instance = new SmartInstance<PLUGGEDTYPE>();
+ Add(instance);
+
+ return instance;
+ }
+
/// <summary>
/// Add an Instance to this type created by a Lambda
/// </summary>
Modified: trunk/Source/StructureMap/Extensions.cs
===================================================================
--- trunk/Source/StructureMap/Extensions.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap/Extensions.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -15,6 +15,16 @@
return enumerable;
}
+ public static bool IsEmpty(this string value)
+ {
+ return string.IsNullOrEmpty(value);
+ }
+
+ public static bool IsNotEmpty(this string value)
+ {
+ return !value.IsEmpty();
+ }
+
public static string ToFormat(this string template, params object[] parameters)
{
return string.Format(template, parameters);
Modified: trunk/Source/StructureMap/Graph/Plugin.cs
===================================================================
--- trunk/Source/StructureMap/Graph/Plugin.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap/Graph/Plugin.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -1,8 +1,10 @@
using System;
+using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
using StructureMap.Pipeline;
using StructureMap.TypeRules;
+using System.Linq;
namespace StructureMap.Graph
{
@@ -75,11 +77,21 @@
return FindArgumentNameForType(typeof (T));
}
+ public string FindArgumentNameForEnumerableOf(Type type)
+ {
+ var enumerableTypes = EnumerableInstance.OpenEnumerableTypes.Select(x => x.MakeGenericType(type)).Union(new []{type.MakeArrayType()});
+ return enumerableTypes.Select(t =>
+ {
+ return _constructor.FindFirstConstructorArgumentOfType(t) ??
+ _setters.FindFirstWriteablePropertyOfType(t);
+ }).FirstOrDefault(x => x != null);
+ }
+
public string FindArgumentNameForType(Type type)
{
string returnValue =
_constructor.FindFirstConstructorArgumentOfType(type) ??
- _setters.FindFirstConstructorArgumentOfType(type);
+ _setters.FindFirstWriteablePropertyOfType(type);
if (returnValue == null)
{
Modified: trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs
===================================================================
--- trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -107,7 +107,7 @@
return returnValue;
}
- public string FindFirstConstructorArgumentOfType(Type type)
+ public string FindFirstWriteablePropertyOfType(Type type)
{
foreach (SetterProperty setterProperty in this)
{
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -6,12 +6,19 @@
{
public partial class ConfiguredInstance
{
+ [Obsolete("Change to Named()")]
public ConfiguredInstance WithName(string instanceKey)
{
Name = instanceKey;
return this;
}
+ public ConfiguredInstance Named(string instanceKey)
+ {
+ Name = instanceKey;
+ return this;
+ }
+
/// <summary>
/// Register an Action to perform on the object created by this Instance
/// before it is returned to the caller
@@ -202,6 +209,7 @@
/// </summary>
/// <param name="propertyName"></param>
/// <returns></returns>
+ [Obsolete("Change to DependencyExpression<CTORTYPE> instead")]
public PropertyExpression<ConfiguredInstance> WithCtorArg(string propertyName)
{
return new PropertyExpression<ConfiguredInstance>(this, propertyName);
Modified: trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -13,6 +13,14 @@
typeof (List<>)
};
+ public static IEnumerable<Type> OpenEnumerableTypes
+ {
+ get
+ {
+ return _enumerableTypes;
+ }
+ }
+
private readonly IEnumerable<Instance> _children;
private readonly IEnumerableCoercion _coercion;
private readonly string _description;
@@ -83,5 +91,7 @@
return type.IsGenericType && type.GetGenericTypeDefinition().IsIn(_enumerableTypes);
}
+
+
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/PropertyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/PropertyExpression.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap/Pipeline/PropertyExpression.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -6,6 +6,7 @@
/// <summary>
/// Defines the value of a primitive argument to a constructur argument
/// </summary>
+ [Obsolete("Change to DependencyExpression<CTORTYPE> instead")]
public class PropertyExpression<T> where T : ConstructorInstance
{
private readonly ConstructorInstance _instance;
Modified: trunk/Source/StructureMap/Pipeline/SmartInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/SmartInstance.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap/Pipeline/SmartInstance.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Configuration;
using System.Diagnostics;
using System.Linq.Expressions;
using StructureMap.Configuration.DSL.Expressions;
@@ -26,6 +27,7 @@
/// </summary>
/// <param name="instanceKey"></param>
/// <returns></returns>
+ [Obsolete("Please change to Named(instanceKey)")]
public SmartInstance<T> WithName(string instanceKey)
{
Name = instanceKey;
@@ -33,6 +35,17 @@
}
/// <summary>
+ /// Sets the name of this Instance
+ /// </summary>
+ /// <param name="instanceKey"></param>
+ /// <returns></returns>
+ public SmartInstance<T> Named(string instanceKey)
+ {
+ Name = instanceKey;
+ return this;
+ }
+
+ /// <summary>
/// Register an Action to perform on the object created by this Instance
/// before it is returned to the caller
/// </summary>
@@ -132,6 +145,7 @@
/// </summary>
/// <param name="argumentName"></param>
/// <returns></returns>
+ [Obsolete("Use CtorDependency() instead")]
public PropertyExpression<SmartInstance<T>> WithCtorArg(string argumentName)
{
return new PropertyExpression<SmartInstance<T>>(this, argumentName);
@@ -187,12 +201,25 @@
/// </summary>
/// <typeparam name="CTORTYPE"></typeparam>
/// <returns></returns>
+ [Obsolete("Change to Ctor<>()")]
public DependencyExpression<CTORTYPE> CtorDependency<CTORTYPE>()
{
string constructorArg = getArgumentNameForType<CTORTYPE>();
return CtorDependency<CTORTYPE>(constructorArg);
}
+ /// <summary>
+ /// Inline definition of a constructor dependency. Select the constructor argument by type. Do not
+ /// use this method if there is more than one constructor arguments of the same type
+ /// </summary>
+ /// <typeparam name="CTORTYPE"></typeparam>
+ /// <returns></returns>
+ public DependencyExpression<CTORTYPE> Ctor<CTORTYPE>()
+ {
+ string constructorArg = getArgumentNameForType<CTORTYPE>();
+ return CtorDependency<CTORTYPE>(constructorArg);
+ }
+
private string getArgumentNameForType<CTORTYPE>()
{
Plugin plugin = PluginCache.GetPlugin(getConcreteType(null));
@@ -206,17 +233,31 @@
/// <typeparam name="CTORTYPE"></typeparam>
/// <param name="constructorArg"></param>
/// <returns></returns>
+ [Obsolete("Use Ctor<CTORTYPE>(constructorArg)")]
public DependencyExpression<CTORTYPE> CtorDependency<CTORTYPE>(string constructorArg)
{
return new DependencyExpression<CTORTYPE>(this, constructorArg);
}
/// <summary>
+ /// Inline definition of a constructor dependency. Select the constructor argument by type and constructor name.
+ /// Use this method if there is more than one constructor arguments of the same type
+ /// </summary>
+ /// <typeparam name="CTORTYPE"></typeparam>
+ /// <param name="constructorArg"></param>
+ /// <returns></returns>
+ public DependencyExpression<CTORTYPE> Ctor<CTORTYPE>(string constructorArg)
+ {
+ return new DependencyExpression<CTORTYPE>(this, constructorArg);
+ }
+
+ /// <summary>
/// Inline definition of a setter dependency. The property name is specified with an Expression
/// </summary>
/// <typeparam name="SETTERTYPE"></typeparam>
/// <param name="expression"></param>
/// <returns></returns>
+ [Obsolete("Use Setter()")]
public DependencyExpression<SETTERTYPE> SetterDependency<SETTERTYPE>(
Expression<Func<T, SETTERTYPE>> expression)
{
@@ -224,23 +265,51 @@
return new DependencyExpression<SETTERTYPE>(this, propertyName);
}
+
/// <summary>
+ /// Inline definition of a setter dependency. The property name is specified with an Expression
+ /// </summary>
+ /// <typeparam name="SETTERTYPE"></typeparam>
+ /// <param name="expression"></param>
+ /// <returns></returns>
+ public DependencyExpression<SETTERTYPE> Setter<SETTERTYPE>(
+ Expression<Func<T, SETTERTYPE>> expression)
+ {
+ string propertyName = ReflectionHelper.GetProperty(expression).Name;
+ return new DependencyExpression<SETTERTYPE>(this, propertyName);
+ }
+
+ /// <summary>
/// Inline definition of a setter dependency. Only use this method if there
/// is only a single property of the SETTERTYPE
/// </summary>
/// <typeparam name="SETTERTYPE"></typeparam>
/// <returns></returns>
+ [Obsolete("Use Setter<>()")]
public DependencyExpression<SETTERTYPE> SetterDependency<SETTERTYPE>()
{
return CtorDependency<SETTERTYPE>();
}
+
/// <summary>
+ /// Inline definition of a setter dependency. Only use this method if there
+ /// is only a single property of the SETTERTYPE
+ /// </summary>
+ /// <typeparam name="SETTERTYPE"></typeparam>
+ /// <returns></returns>
+ public DependencyExpression<SETTERTYPE> Setter<SETTERTYPE>()
+ {
+ return CtorDependency<SETTERTYPE>();
+ }
+
+ /// <summary>
/// Inline definition of a dependency on an Array of the CHILD type. I.e. CHILD[].
/// This method can be used for either constructor arguments or setter properties
/// </summary>
/// <typeparam name="CHILD"></typeparam>
/// <returns></returns>
+ [Obsolete("Use EnumerableOf<>")]
public ArrayDefinitionExpression<CHILD> TheArrayOf<CHILD>()
{
if (typeof (CHILD).IsArray)
@@ -249,8 +318,8 @@
}
Plugin plugin = PluginCache.GetPlugin(typeof (T));
- string propertyName = plugin.FindArgumentNameForType(typeof (CHILD).MakeArrayType());
- Debug.WriteLine("Property Name: " + propertyName);
+ string propertyName = plugin.FindArgumentNameForEnumerableOf(typeof (CHILD));
+
return TheArrayOf<CHILD>(propertyName);
}
@@ -261,11 +330,53 @@
/// <typeparam name="CHILD"></typeparam>
/// <param name="ctorOrPropertyName"></param>
/// <returns></returns>
+ [Obsolete("Use EnumerableOf<>")]
public ArrayDefinitionExpression<CHILD> TheArrayOf<CHILD>(string ctorOrPropertyName)
{
+ if (ctorOrPropertyName.IsEmpty())
+ {
+ throw new StructureMapException(302, typeof(CHILD).FullName, typeof(T).FullName);
+ }
return new ArrayDefinitionExpression<CHILD>(this, ctorOrPropertyName);
}
+
+ /// <summary>
+ /// Inline definition of a dependency on an Array of the CHILD type. I.e. CHILD[].
+ /// This method can be used for either constructor arguments or setter properties
+ /// </summary>
+ /// <typeparam name="CHILD"></typeparam>
+ /// <returns></returns>
+ public ArrayDefinitionExpression<CHILD> EnumerableOf<CHILD>()
+ {
+ if (typeof(CHILD).IsArray)
+ {
+ throw new ApplicationException("Please specify the element type in the call to TheArrayOf");
+ }
+
+ Plugin plugin = PluginCache.GetPlugin(typeof(T));
+ string propertyName = plugin.FindArgumentNameForEnumerableOf(typeof(CHILD));
+
+ return TheArrayOf<CHILD>(propertyName);
+ }
+
+ /// <summary>
+ /// Inline definition of a dependency on an Array of the CHILD type and the specified setter property or constructor argument name. I.e. CHILD[].
+ /// This method can be used for either constructor arguments or setter properties
+ /// </summary>
+ /// <typeparam name="CHILD"></typeparam>
+ /// <param name="ctorOrPropertyName"></param>
+ /// <returns></returns>
+ public ArrayDefinitionExpression<CHILD> EnumerableOf<CHILD>(string ctorOrPropertyName)
+ {
+ if (ctorOrPropertyName.IsEmpty())
+ {
+ throw new StructureMapException(302, typeof(CHILD).FullName, typeof(T).FullName);
+ }
+ return new ArrayDefinitionExpression<CHILD>(this, ctorOrPropertyName);
+ }
+
+
#region Nested type: ArrayDefinitionExpression
/// <summary>
@@ -333,6 +444,32 @@
}
/// <summary>
+ /// Sets the value of the constructor argument to the key/value in the
+ /// AppSettings
+ /// </summary>
+ /// <param name="appSettingKey">The key in appSettings for the value to use.</param>
+ /// <returns></returns>
+ public SmartInstance<T> EqualToAppSetting(string appSettingKey)
+ {
+ return EqualToAppSetting(appSettingKey, null);
+ }
+
+ /// <summary>
+ /// Sets the value of the constructor argument to the key/value in the
+ /// AppSettings when it exists. Otherwise uses the provided default value.
+ /// </summary>
+ /// <param name="appSettingKey">The key in appSettings for the value to use.</param>
+ /// <param name="defaultValue">The value to use if an entry for <paramref name="appSettingKey"/> does not exist in the appSettings section.</param>
+ /// <returns></returns>
+ public SmartInstance<T> EqualToAppSetting(string appSettingKey, string defaultValue)
+ {
+ string propertyValue = ConfigurationManager.AppSettings[appSettingKey];
+ if (propertyValue == null) propertyValue = defaultValue;
+ _instance.SetValue(_propertyName, propertyValue);
+ return _instance;
+ }
+
+ /// <summary>
/// Nested Closure to define a child dependency inline
/// </summary>
/// <param name="action"></param>
@@ -345,6 +482,12 @@
return _instance;
}
+ public SmartInstance<T> Is(Func<IContext, CHILD> func)
+ {
+ var child = new LambdaInstance<CHILD>(func);
+ return Is(child);
+ }
+
/// <summary>
/// Shortcut to set an inline dependency to an Instance
/// </summary>
@@ -363,10 +506,24 @@
/// <returns></returns>
public SmartInstance<T> Is(CHILD value)
{
- return Is(new ObjectInstance(value));
+ _instance.SetValue(_propertyName, value);
+ return _instance;
}
+
/// <summary>
+ /// Shortcut to set an inline dependency to a designated object
+ /// </summary>
+ /// <param name="value"></param>
+ /// <returns></returns>
+ [Obsolete("Change to Is()")]
+ public SmartInstance<T> EqualTo(CHILD value)
+ {
+ _instance.SetValue(_propertyName, value);
+ return _instance;
+ }
+
+ /// <summary>
/// Set an Inline dependency to the Default Instance of the Property type
/// Used mostly to force an optional Setter property to be filled by
/// StructureMap
@@ -386,6 +543,20 @@
{
return Is(new SmartInstance<CONCRETETYPE>());
}
+
+
+ /// <summary>
+ /// Shortcut method to define a child dependency inline and configure
+ /// the child dependency
+ /// </summary>
+ /// <typeparam name="CONCRETETYPE"></typeparam>
+ /// <returns></returns>
+ public SmartInstance<T> Is<CONCRETETYPE>(Action<SmartInstance<CONCRETETYPE>> configure) where CONCRETETYPE : CHILD
+ {
+ var instance = new SmartInstance<CONCRETETYPE>();
+ configure(instance);
+ return Is(instance);
+ }
}
#endregion
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -45,6 +45,7 @@
{
public static class TypeExtensions
{
+
public static bool Closes(this Type type, Type openType)
{
Type baseType = type.BaseType;
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -1,5 +1,7 @@
+using System.Collections.Generic;
using NUnit.Framework;
using StructureMap.Pipeline;
+using System.Linq;
namespace StructureMap.Testing.Configuration.DSL
{
@@ -33,6 +35,24 @@
public string Name { get { return _name; } }
}
+ public class ProcessorWithList
+ {
+ private readonly IList<IHandler> _handlers;
+ private readonly string _name;
+
+ public ProcessorWithList(IList<IHandler> handlers, string name)
+ {
+ _handlers = handlers;
+ _name = name;
+ }
+
+
+ public IList<IHandler> Handlers { get { return _handlers; } }
+
+
+ public string Name { get { return _name; } }
+ }
+
public class Processor2
{
private readonly IHandler[] _first;
@@ -86,6 +106,24 @@
}
[Test]
+ public void get_a_configured_list()
+ {
+ var container = new Container(x =>
+ {
+ x.ForRequestedType<Processor>().TheDefault.Is
+ .OfConcreteType<Processor>()
+ .TheArrayOf<IHandler>().Contains(
+ new SmartInstance<Handler1>(),
+ new SmartInstance<Handler2>(),
+ new SmartInstance<Handler3>()
+ )
+ .WithCtorArg("name").EqualTo("Jeremy");
+ });
+
+ container.GetInstance<Processor>().Handlers.Select(x => x.GetType()).ShouldHaveTheSameElementsAs(typeof(Handler1), typeof(Handler2), typeof(Handler3));
+ }
+
+ [Test]
public void InjectPropertiesByName()
{
var container = new Container(r =>
Modified: trunk/Source/StructureMap.Testing/Graph/PluginTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/PluginTester.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap.Testing/Graph/PluginTester.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using NUnit.Framework;
@@ -405,6 +406,64 @@
}
}
+
+ [TestFixture]
+ public class when_finding_property_name_of_enumerable_type
+ {
+ private Plugin plugin;
+
+
+
+ [SetUp]
+ public void SetUp()
+ {
+ plugin = new Plugin(typeof (ClassWithEnumerables));
+ }
+
+ [Test]
+ public void smoke_test()
+ {
+ new Plugin(typeof (ClassThatUsesValidators)).FindArgumentNameForEnumerableOf(typeof (IValidator)).
+ ShouldEqual("validators");
+ }
+
+ [Test]
+ public void array_in_ctor()
+ {
+ plugin.FindArgumentNameForEnumerableOf(typeof (IEngine)).ShouldEqual("engines");
+ }
+
+ [Test]
+ public void enumerable_in_ctor()
+ {
+ plugin.FindArgumentNameForEnumerableOf(typeof (IAutomobile)).ShouldEqual("autos");
+ }
+
+ [Test]
+ public void ilist_as_setter()
+ {
+ plugin.FindArgumentNameForEnumerableOf(typeof (IWidget)).ShouldEqual("Widgets");
+ }
+
+ [Test]
+ public void list_as_setter()
+ {
+ plugin.FindArgumentNameForEnumerableOf(typeof (Rule)).ShouldEqual("Rules");
+ }
+ }
+
+
+ public class ClassWithEnumerables
+ {
+ public ClassWithEnumerables(IEngine[] engines, IEnumerable<IAutomobile> autos)
+ {
+
+ }
+
+ public IList<IWidget> Widgets { get; set; }
+ public List<Rule> Rules { get; set; }
+ }
+
public class LotsOfStuff
{
public LotsOfStuff(IEngine engine, IEngine[] engines, string name, int age, BreedEnum breed)
@@ -432,6 +491,8 @@
{
}
+
+
[Pluggable("Pushrod")]
public class PushrodEngine : IEngine
{
Modified: trunk/Source/StructureMap.Testing/ObjectFactoryInitializeTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/ObjectFactoryInitializeTester.cs 2009-12-29 02:55:12 UTC (rev 314)
+++ trunk/Source/StructureMap.Testing/ObjectFactoryInitializeTester.cs 2009-12-29 03:50:13 UTC (rev 315)
@@ -11,8 +11,9 @@
{
public InitializeRegistry()
{
- InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Green").WithName(
- "Green");
+ For<IWidget>().Add<ColorWidget>()
+ .Ctor<string>("color").Is("Green")
+ .Named("Green");
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-29 02:55:20
|
Revision: 314
http://structuremap.svn.sourceforge.net/structuremap/?rev=314&view=rev
Author: jeremydmiller
Date: 2009-12-29 02:55:12 +0000 (Tue, 29 Dec 2009)
Log Message:
-----------
API cleanup Part 1
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/InitializationExpression.cs
trunk/Source/StructureMap/ObjectFactory.cs
trunk/Source/StructureMap/Pipeline/Instance.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs
trunk/Source/StructureMap.Testing/Examples.cs
trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs
trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs
trunk/Source/StructureMap.Testing/ObjectFactoryInitializeTester.cs
trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileManagerTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileTester.cs
trunk/Source/StructureMap.Testing/Query/GenericFamilyConfigurationTester.cs
trunk/Source/StructureMap.Testing/Query/InstanceFactoryTypeConfigurationTester.cs
trunk/Source/StructureMap.Testing/Query/ModelIntegrationTester.cs
trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs
Added Paths:
-----------
trunk/Source/StructureMap/Configuration/DSL/IRegistry.cs
Removed Paths:
-------------
trunk/Source/StructureMap.Testing/Graph/ExplicitArgumentTester.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -32,6 +32,7 @@
/// <summary>
/// Define the Default Instance for this PluginType
/// </summary>
+ [Obsolete("Prefer the Use() methods")]
public IsExpression<PLUGINTYPE> TheDefault { get { return new InstanceExpression<PLUGINTYPE>(i => registerDefault(i)); } }
public InstanceExpression<PLUGINTYPE> MissingNamedInstanceIs { get { return new InstanceExpression<PLUGINTYPE>(i => _alterations.Add(family => family.MissingInstance = i)); } }
@@ -135,6 +136,7 @@
/// </summary>
/// <param name="scope"></param>
/// <returns></returns>
+ [Obsolete("Change to LifecycleIs(scope)")]
public CreatePluginFamilyExpression<PLUGINTYPE> CacheBy(InstanceScope scope)
{
return alterAndContinue(family => family.SetScopeTo(scope));
@@ -296,6 +298,7 @@
/// </summary>
/// <typeparam name="PLUGGEDTYPE"></typeparam>
/// <returns></returns>
+ [Obsolete("Change to Add<T>()")]
public CreatePluginFamilyExpression<PLUGINTYPE> AddConcreteType<PLUGGEDTYPE>()
{
if (!PluginCache.GetPlugin(typeof (PLUGGEDTYPE)).CanBeAutoFilled)
@@ -366,9 +369,28 @@
public ObjectInstance Add(PLUGINTYPE @object)
{
var instance = new ObjectInstance(@object);
- _alterations.Add(f => f.AddInstance(instance));
+ Add(instance);
return instance;
}
+
+ /// <summary>
+ /// Add an Instance to this type created by a Lambda
+ /// </summary>
+ /// <param name="func"></param>
+ /// <returns></returns>
+ public LambdaInstance<PLUGINTYPE> Add(Func<IContext, PLUGINTYPE> func)
+ {
+ var instance = new LambdaInstance<PLUGINTYPE>(func);
+ Add(instance);
+
+ return instance;
+ }
+
+
+ public void Add(Instance instance)
+ {
+ _alterations.Add(f => f.AddInstance(instance));
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -39,6 +39,7 @@
/// </summary>
/// <param name="concreteType"></param>
/// <returns></returns>
+ [Obsolete("Change to Use(concreteType)")]
public ConfiguredInstance TheDefaultIsConcreteType(Type concreteType)
{
var instance = new ConfiguredInstance(concreteType);
@@ -47,6 +48,10 @@
return instance;
}
+ /// <summary>
+ /// Use this configured Instance as is
+ /// </summary>
+ /// <param name="instance"></param>
public void Use(Instance instance)
{
alterAndContinue(family =>
@@ -131,10 +136,18 @@
{
return alterAndContinue(family => family.AddInstance(instance));
}
+
+ /// <summary>
+ /// Configure this type as the supplied value
+ /// </summary>
+ /// <param name="instance"></param>
+ /// <returns></returns>
+ public ObjectInstance Add(object @object)
+ {
+ var instance = new ObjectInstance(@object);
+ Add(instance);
- public GenericFamilyExpression Add(object instance)
- {
- return Add(new ObjectInstance(instance));
+ return instance;
}
@@ -144,6 +157,7 @@
/// </summary>
/// <param name="scope"></param>
/// <returns></returns>
+ [Obsolete("Change to LifecycleIs()")]
public GenericFamilyExpression CacheBy(InstanceScope scope)
{
return alterAndContinue(family => family.SetScopeTo(scope));
@@ -261,6 +275,7 @@
/// </summary>
/// <param name="concreteType"></param>
/// <returns></returns>
+ [Obsolete("Change to Add(Type)")]
public GenericFamilyExpression AddConcreteType(Type concreteType)
{
var instance = new ConfiguredInstance(concreteType);
@@ -276,6 +291,7 @@
/// <param name="concreteType"></param>
/// <param name="instanceName"></param>
/// <returns></returns>
+ [Obsolete("Change to Add(Type, [name)]")]
public GenericFamilyExpression AddConcreteType(Type concreteType, string instanceName)
{
return Add(new ConfiguredInstance(concreteType).WithName(instanceName));
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -106,7 +106,16 @@
[Obsolete("Favor For<ISomething>().Use<Something>() or For<ISomething>().Add<Something>()")]
SmartInstance<PLUGGEDTYPE> OfConcreteType<PLUGGEDTYPE>() where PLUGGEDTYPE : T;
+
/// <summary>
+ /// Build the Instance with the constructor function and setter arguments. Starts
+ /// the definition of a <see cref="SmartInstance{T}">SmartInstance</see>
+ /// </summary>
+ /// <typeparam name="PLUGGEDTYPE"></typeparam>
+ /// <returns></returns>
+ SmartInstance<PLUGGEDTYPE> Type<PLUGGEDTYPE>();
+
+ /// <summary>
/// Build the Instance with the constructor function and setter arguments. Use this
/// method for open generic types, and favor the generic version of OfConcreteType
/// for all other types
@@ -117,12 +126,20 @@
ConfiguredInstance OfConcreteType(Type type);
/// <summary>
+ /// Build the Instance with the constructor function and setter arguments. Use this
+ /// method for open generic types, and favor the generic version of OfConcreteType
+ /// for all other types
+ /// </summary>
+ /// <param name="type"></param>
+ /// <returns></returns>
+ ConfiguredInstance Type(Type type);
+
+ /// <summary>
/// Create an Instance that builds an object by calling a Lambda or
/// an anonymous delegate with no arguments
/// </summary>
/// <param name="func"></param>
/// <returns></returns>
- [Obsolete("Prefer For<T>().Use(Func<T> func) or For<T>().Add(Func<T> func)")]
LambdaInstance<T> ConstructedBy(Func<T> func);
/// <summary>
@@ -218,11 +235,21 @@
return returnInstance(new SmartInstance<PLUGGEDTYPE>());
}
+ public SmartInstance<PLUGGEDTYPE> Type<PLUGGEDTYPE>()
+ {
+ return returnInstance(new SmartInstance<PLUGGEDTYPE>());
+ }
+
public ConfiguredInstance OfConcreteType(Type type)
{
return returnInstance(new ConfiguredInstance(type));
}
+ public ConfiguredInstance Type(Type type)
+ {
+ return returnInstance(new ConfiguredInstance(type));
+ }
+
public ObjectInstance Object(T theObject)
{
return returnInstance(new ObjectInstance(theObject));
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -35,6 +35,7 @@
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
+ [Obsolete("Prefer the For<T>().**** methods")]
public IsExpression<T> Type<T>()
{
return
@@ -76,22 +77,37 @@
/// </summary>
/// <param name="concreteType"></param>
/// <returns></returns>
- public ProfileExpression UseConcreteType(Type concreteType)
+ [Obsolete("Change to Use(type)")]
+ public ConfiguredInstance UseConcreteType(Type concreteType)
{
var instance = new ConfiguredInstance(concreteType);
- return Use(instance);
+ Use(instance);
+
+ return instance;
}
/// <summary>
+ /// Use this concreteType for the Instance of this Profile for the PluginType
+ /// </summary>
+ /// <param name="concreteType"></param>
+ /// <returns></returns>
+ [Obsolete("Change to Use(type)")]
+ public ConfiguredInstance Use(Type concreteType)
+ {
+ var instance = new ConfiguredInstance(concreteType);
+ Use(instance);
+
+ return instance;
+ }
+
+ /// <summary>
/// Use this Instance for the Profile Instance of this Plugin Type
/// </summary>
/// <param name="instance"></param>
/// <returns></returns>
- public ProfileExpression Use(Instance instance)
+ public void Use(Instance instance)
{
_registry.addExpression(graph => graph.SetDefault(_parent._profileName, _pluginType, instance));
-
- return _parent;
}
@@ -100,11 +116,38 @@
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
- public ProfileExpression UseNamedInstance(string name)
+ [Obsolete("Change to Use([name])")]
+ public void UseNamedInstance(string name)
{
var instance = new ReferencedInstance(name);
- return Use(instance);
+ Use(instance);
}
+
+ /// <summary>
+ /// Use the named Instance as the Profile Instance for this PluginType
+ /// </summary>
+ /// <param name="name"></param>
+ /// <returns></returns>
+ public ReferencedInstance Use(string name)
+ {
+ var instance = new ReferencedInstance(name);
+ Use(instance);
+
+ return instance;
+ }
+
+ /// <summary>
+ /// For this type and profile, build the object with this Lambda
+ /// </summary>
+ /// <param name="func"></param>
+ /// <returns></returns>
+ public LambdaInstance<object> Use(Func<IContext, object> func)
+ {
+ var instance = new LambdaInstance<object>(func);
+ Use(instance);
+
+ return instance;
+ }
}
#endregion
@@ -133,6 +176,7 @@
/// </summary>
/// <param name="instanceKey"></param>
/// <returns></returns>
+ [Obsolete("Change to For<T>().Use([name])")]
public ProfileExpression UseNamedInstance(string instanceKey)
{
_registry.addExpression(
@@ -142,17 +186,39 @@
}
/// <summary>
+ /// Use a named, preconfigured instance as the default instance for this profile
+ /// </summary>
+ /// <param name="instanceKey"></param>
+ /// <returns></returns>
+ public void Use(string instanceKey)
+ {
+ _registry.addExpression(
+ graph => graph.SetDefault(_profileName, typeof(T), new ReferencedInstance(instanceKey)));
+ }
+
+ /// <summary>
/// Define the default instance of the PluginType for the containing Profile
/// </summary>
/// <param name="instance"></param>
/// <returns></returns>
- public ProfileExpression Use(Instance instance)
+ public void Use(Instance instance)
{
instance.Name = "Default Instance for Profile " + _profileName;
_registry.addExpression(graph => graph.SetDefault(_profileName, typeof (T), instance));
+ }
- return _parent;
+ /// <summary>
+ /// For this Profile, use an Instance with this Func
+ /// </summary>
+ /// <param name="func"></param>
+ /// <returns></returns>
+ public LambdaInstance<T> Use(Func<T> func)
+ {
+ var instance = new LambdaInstance<T>(func);
+ Use(instance);
+
+ return instance;
}
/// <summary>
@@ -160,10 +226,12 @@
/// </summary>
/// <param name="func"></param>
/// <returns></returns>
- public ProfileExpression Use(Func<T> func)
+ public LambdaInstance<T> Use(Func<IContext, T> func)
{
var instance = new LambdaInstance<T>(func);
- return Use(instance);
+ Use(instance);
+
+ return instance;
}
/// <summary>
@@ -171,10 +239,12 @@
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
- public ProfileExpression Use(T t)
+ public ObjectInstance Use(T t)
{
var instance = new ObjectInstance(t);
- return Use(instance);
+ Use(instance);
+
+ return instance;
}
/// <summary>
@@ -182,11 +252,25 @@
/// </summary>
/// <typeparam name="CONCRETETYPE"></typeparam>
/// <returns></returns>
- public ProfileExpression UseConcreteType<CONCRETETYPE>()
+ [Obsolete("Change to For<T>().Use<CONCRETETYPE>()")]
+ public void UseConcreteType<CONCRETETYPE>()
{
var instance = new ConfiguredInstance(typeof (CONCRETETYPE));
- return Use(instance);
+ Use(instance);
}
+
+ /// <summary>
+ /// For this profile, use this concrete type
+ /// </summary>
+ /// <typeparam name="CONCRETETYPE"></typeparam>
+ /// <returns></returns>
+ public SmartInstance<CONCRETETYPE> Use<CONCRETETYPE>()
+ {
+ var instance = new SmartInstance<CONCRETETYPE>();
+ Use(instance);
+
+ return instance;
+ }
}
#endregion
Added: trunk/Source/StructureMap/Configuration/DSL/IRegistry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/IRegistry.cs (rev 0)
+++ trunk/Source/StructureMap/Configuration/DSL/IRegistry.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -0,0 +1,235 @@
+using System;
+using System.Linq.Expressions;
+using StructureMap.Configuration.DSL.Expressions;
+using StructureMap.Graph;
+using StructureMap.Interceptors;
+using StructureMap.Pipeline;
+
+namespace StructureMap.Configuration.DSL
+{
+ public interface IRegistry
+ {
+ /// <summary>
+ /// Adds the concreteType as an Instance of the pluginType
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="concreteType"></param>
+ void AddType(Type pluginType, Type concreteType);
+
+ /// <summary>
+ /// Adds the concreteType as an Instance of the pluginType with a name
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="concreteType"></param>
+ /// <param name="name"></param>
+ void AddType(Type pluginType, Type concreteType, string name);
+
+ /// <summary>
+ /// Add the pluggedType as an instance to any configured pluginType where pluggedType
+ /// could be assigned to the pluginType
+ /// </summary>
+ /// <param name="pluggedType"></param>
+ void AddType(Type pluggedType);
+
+ /// <summary>
+ /// Imports the configuration from another registry into this registry.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void IncludeRegistry<T>() where T : Registry, new();
+
+ /// <summary>
+ /// Imports the configuration from another registry into this registry.
+ /// </summary>
+ /// <param name="registry"></param>
+ void IncludeRegistry(Registry registry);
+
+ /// <summary>
+ /// Expression Builder used to define policies for a PluginType including
+ /// Scoping, the Default Instance, and interception. BuildInstancesOf()
+ /// and ForRequestedType() are synonyms
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ [Obsolete("Change to For<T>()")]
+ CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();
+
+ /// <summary>
+ /// Expression Builder used to define policies for a PluginType including
+ /// Scoping, the Default Instance, and interception. This method is specifically
+ /// meant for registering open generic types
+ /// </summary>
+ /// <returns></returns>
+ [Obsolete("Change to For(pluginType)")]
+ GenericFamilyExpression ForRequestedType(Type pluginType);
+
+ /// <summary>
+ /// This method is a shortcut for specifying the default constructor and
+ /// setter arguments for a ConcreteType. ForConcreteType is shorthand for:
+ /// ForRequestedType[T]().TheDefault.Is.OfConcreteType[T].**************
+ /// when the PluginType and ConcreteType are the same Type
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ Registry.BuildWithExpression<T> ForConcreteType<T>();
+
+ /// <summary>
+ /// Expression Builder used to define policies for a PluginType including
+ /// Scoping, the Default Instance, and interception. BuildInstancesOf()
+ /// and ForRequestedType() are synonyms
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ [Obsolete("Change to For<T>()")]
+ CreatePluginFamilyExpression<PLUGINTYPE> ForRequestedType<PLUGINTYPE>();
+
+ /// <summary>
+ /// Convenience method. Equivalent of ForRequestedType[PluginType]().AsSingletons()
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ CreatePluginFamilyExpression<PLUGINTYPE> ForSingletonOf<PLUGINTYPE>();
+
+ /// <summary>
+ /// Uses the configuration expressions of this Registry to create a PluginGraph
+ /// object that could be used to initialize a Container. This method is
+ /// mostly for internal usage, but might be helpful for diagnostics
+ /// </summary>
+ /// <returns></returns>
+ PluginGraph Build();
+
+ /// <summary>
+ /// Adds an additional, non-Default Instance to the PluginType T.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ [Obsolete("Prefer For<T>().Add() instead")]
+ IsExpression<T> InstanceOf<T>();
+
+ /// <summary>
+ /// Adds an additional, non-Default Instance to the designated pluginType
+ /// This method is mostly meant for open generic types
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ [Obsolete("Prefer For(type).Add() instead")]
+ GenericIsExpression InstanceOf(Type pluginType);
+
+ /// <summary>
+ /// Expression Builder to define the defaults for a named Profile. Each call
+ /// to CreateProfile is additive.
+ /// </summary>
+ /// <param name="profileName"></param>
+ /// <returns></returns>
+ ProfileExpression Profile(string profileName);
+
+ /// <summary>
+ /// An alternative way to use CreateProfile that uses ProfileExpression
+ /// as a Nested Closure. This usage will result in cleaner code for
+ /// multiple declarations
+ /// </summary>
+ /// <param name="profileName"></param>
+ /// <param name="action"></param>
+ void Profile(string profileName, Action<ProfileExpression> action);
+
+ /// <summary>
+ /// Registers a new TypeInterceptor object with the Container
+ /// </summary>
+ /// <param name="interceptor"></param>
+ void RegisterInterceptor(TypeInterceptor interceptor);
+
+ /// <summary>
+ /// Allows you to define a TypeInterceptor inline with Lambdas or anonymous delegates
+ /// </summary>
+ /// <param name="match"></param>
+ /// <returns></returns>
+ /// <example>
+ /// IfTypeMatches( ... ).InterceptWith( o => new ObjectWrapper(o) );
+ /// </example>
+ MatchedTypeInterceptor IfTypeMatches(Predicate<Type> match);
+
+ /// <summary>
+ /// Designates a policy for scanning assemblies to auto
+ /// register types
+ /// </summary>
+ /// <returns></returns>
+ void Scan(Action<IAssemblyScanner> action);
+
+ /// <summary>
+ /// Directs StructureMap to always inject dependencies into any and all public Setter properties
+ /// of the type PLUGINTYPE.
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ CreatePluginFamilyExpression<PLUGINTYPE> FillAllPropertiesOfType<PLUGINTYPE>();
+
+ /// <summary>
+ /// Creates automatic "policies" for which public setters are considered mandatory
+ /// properties by StructureMap that will be "setter injected" as part of the
+ /// construction process.
+ /// </summary>
+ /// <param name="action"></param>
+ void SetAllProperties(Action<SetterConvention> action);
+
+ /// <summary>
+ /// Use to programmatically select the constructor function of a concrete
+ /// class. Applies globally to all Containers in a single AppDomain.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="expression"></param>
+ void SelectConstructor<T>(Expression<Func<T>> expression);
+
+ /// <summary>
+ /// All requests For the "TO" types will be filled by fetching the "FROM"
+ /// type and casting it to "TO"
+ /// GetInstance(typeof(TO)) basically becomes (TO)GetInstance(typeof(FROM))
+ /// </summary>
+ /// <typeparam name="FROM"></typeparam>
+ /// <typeparam name="TO"></typeparam>
+ void Forward<FROM, TO>() where FROM : class where TO : class;
+
+ /// <summary>
+ /// Syntactic Sugar for saying ForRequestedType().TheDefault.IsThis( @object )
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <param name="object"></param>
+ void Register<PLUGINTYPE>(PLUGINTYPE @object);
+
+ /// <summary>
+ /// Syntactic Sugar for saying ForRequestedType().TheDefault.IsThis( instance )
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <param name="instance"></param>
+ void Register<PLUGINTYPE>(Instance instance);
+
+ /// <summary>
+ /// Shorthand for ForRequestedType<PLUGINTYPE>()
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ CreatePluginFamilyExpression<PLUGINTYPE> For<PLUGINTYPE>();
+
+ /// <summary>
+ /// Shorthand for ForRequestedType(pluginType)
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ GenericFamilyExpression For(Type pluginType);
+
+ /// <summary>
+ /// Shortcut to make StructureMap return the default object of U casted to T
+ /// whenever T is requested. I.e.:
+ /// For<T>().TheDefault.Is.ConstructedBy(c => c.GetInstance<U>() as T);
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <typeparam name="U"></typeparam>
+ /// <returns></returns>
+ LambdaInstance<T> Redirect<T, U>() where T : class where U : class;
+
+ /// <summary>
+ /// Advanced Usage Only! Skips the Registry and goes right to the inner
+ /// Semantic Model of StructureMap. Use with care
+ /// </summary>
+ /// <param name="configure"></param>
+ void Configure(Action<PluginGraph> configure);
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -8,232 +8,6 @@
namespace StructureMap.Configuration.DSL
{
- public interface IRegistry
- {
- /// <summary>
- /// Adds the concreteType as an Instance of the pluginType
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="concreteType"></param>
- void AddType(Type pluginType, Type concreteType);
-
- /// <summary>
- /// Adds the concreteType as an Instance of the pluginType with a name
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="concreteType"></param>
- /// <param name="name"></param>
- void AddType(Type pluginType, Type concreteType, string name);
-
- /// <summary>
- /// Add the pluggedType as an instance to any configured pluginType where pluggedType
- /// could be assigned to the pluginType
- /// </summary>
- /// <param name="pluggedType"></param>
- void AddType(Type pluggedType);
-
- /// <summary>
- /// Imports the configuration from another registry into this registry.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- void IncludeRegistry<T>() where T : Registry, new();
-
- /// <summary>
- /// Imports the configuration from another registry into this registry.
- /// </summary>
- /// <param name="registry"></param>
- void IncludeRegistry(Registry registry);
-
- /// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. BuildInstancesOf()
- /// and ForRequestedType() are synonyms
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- [Obsolete("Change to For<T>()")]
- CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();
-
- /// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. This method is specifically
- /// meant for registering open generic types
- /// </summary>
- /// <returns></returns>
- [Obsolete("Change to For(pluginType)")]
- GenericFamilyExpression ForRequestedType(Type pluginType);
-
- /// <summary>
- /// This method is a shortcut for specifying the default constructor and
- /// setter arguments for a ConcreteType. ForConcreteType is shorthand for:
- /// ForRequestedType[T]().TheDefault.Is.OfConcreteType[T].**************
- /// when the PluginType and ConcreteType are the same Type
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- Registry.BuildWithExpression<T> ForConcreteType<T>();
-
- /// <summary>
- /// Expression Builder used to define policies for a PluginType including
- /// Scoping, the Default Instance, and interception. BuildInstancesOf()
- /// and ForRequestedType() are synonyms
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- [Obsolete("Change to For<T>()")]
- CreatePluginFamilyExpression<PLUGINTYPE> ForRequestedType<PLUGINTYPE>();
-
- /// <summary>
- /// Convenience method. Equivalent of ForRequestedType[PluginType]().AsSingletons()
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- CreatePluginFamilyExpression<PLUGINTYPE> ForSingletonOf<PLUGINTYPE>();
-
- /// <summary>
- /// Uses the configuration expressions of this Registry to create a PluginGraph
- /// object that could be used to initialize a Container. This method is
- /// mostly for internal usage, but might be helpful for diagnostics
- /// </summary>
- /// <returns></returns>
- PluginGraph Build();
-
- /// <summary>
- /// Adds an additional, non-Default Instance to the PluginType T.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- [Obsolete("Prefer For<T>().Add() instead")]
- IsExpression<T> InstanceOf<T>();
-
- /// <summary>
- /// Adds an additional, non-Default Instance to the designated pluginType
- /// This method is mostly meant for open generic types
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- [Obsolete("Prefer For(type).Add() instead")]
- GenericIsExpression InstanceOf(Type pluginType);
-
- /// <summary>
- /// Expression Builder to define the defaults for a named Profile. Each call
- /// to CreateProfile is additive.
- /// </summary>
- /// <param name="profileName"></param>
- /// <returns></returns>
- ProfileExpression CreateProfile(string profileName);
-
- /// <summary>
- /// An alternative way to use CreateProfile that uses ProfileExpression
- /// as a Nested Closure. This usage will result in cleaner code for
- /// multiple declarations
- /// </summary>
- /// <param name="profileName"></param>
- /// <param name="action"></param>
- void CreateProfile(string profileName, Action<ProfileExpression> action);
-
- /// <summary>
- /// Registers a new TypeInterceptor object with the Container
- /// </summary>
- /// <param name="interceptor"></param>
- void RegisterInterceptor(TypeInterceptor interceptor);
-
- /// <summary>
- /// Allows you to define a TypeInterceptor inline with Lambdas or anonymous delegates
- /// </summary>
- /// <param name="match"></param>
- /// <returns></returns>
- /// <example>
- /// IfTypeMatches( ... ).InterceptWith( o => new ObjectWrapper(o) );
- /// </example>
- MatchedTypeInterceptor IfTypeMatches(Predicate<Type> match);
-
- /// <summary>
- /// Designates a policy for scanning assemblies to auto
- /// register types
- /// </summary>
- /// <returns></returns>
- void Scan(Action<IAssemblyScanner> action);
-
- /// <summary>
- /// Directs StructureMap to always inject dependencies into any and all public Setter properties
- /// of the type PLUGINTYPE.
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- CreatePluginFamilyExpression<PLUGINTYPE> FillAllPropertiesOfType<PLUGINTYPE>();
-
- /// <summary>
- /// Creates automatic "policies" for which public setters are considered mandatory
- /// properties by StructureMap that will be "setter injected" as part of the
- /// construction process.
- /// </summary>
- /// <param name="action"></param>
- void SetAllProperties(Action<SetterConvention> action);
-
- /// <summary>
- /// Use to programmatically select the constructor function of a concrete
- /// class. Applies globally to all Containers in a single AppDomain.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="expression"></param>
- void SelectConstructor<T>(Expression<Func<T>> expression);
-
- /// <summary>
- /// All requests For the "TO" types will be filled by fetching the "FROM"
- /// type and casting it to "TO"
- /// GetInstance(typeof(TO)) basically becomes (TO)GetInstance(typeof(FROM))
- /// </summary>
- /// <typeparam name="FROM"></typeparam>
- /// <typeparam name="TO"></typeparam>
- void Forward<FROM, TO>() where FROM : class where TO : class;
-
- /// <summary>
- /// Syntactic Sugar for saying ForRequestedType().TheDefault.IsThis( @object )
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <param name="object"></param>
- void Register<PLUGINTYPE>(PLUGINTYPE @object);
-
- /// <summary>
- /// Syntactic Sugar for saying ForRequestedType().TheDefault.IsThis( instance )
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <param name="instance"></param>
- void Register<PLUGINTYPE>(Instance instance);
-
- /// <summary>
- /// Shorthand for ForRequestedType<PLUGINTYPE>()
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- CreatePluginFamilyExpression<PLUGINTYPE> For<PLUGINTYPE>();
-
- /// <summary>
- /// Shorthand for ForRequestedType(pluginType)
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- GenericFamilyExpression For(Type pluginType);
-
- /// <summary>
- /// Shortcut to make StructureMap return the default object of U casted to T
- /// whenever T is requested. I.e.:
- /// For<T>().TheDefault.Is.ConstructedBy(c => c.GetInstance<U>() as T);
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <typeparam name="U"></typeparam>
- /// <returns></returns>
- LambdaInstance<T> Redirect<T, U>() where T : class where U : class;
-
- /// <summary>
- /// Advanced Usage Only! Skips the Registry and goes right to the inner
- /// Semantic Model of StructureMap. Use with care
- /// </summary>
- /// <param name="configure"></param>
- void Configure(Action<PluginGraph> configure);
- }
-
/// <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.
@@ -253,7 +27,8 @@
private readonly List<Action> _basicActions = new List<Action>();
/// <summary>
- /// Adds the concreteType as an Instance of the pluginType
+ /// Adds the concreteType as an Instance of the pluginType. Mostly useful
+ /// for conventions
/// </summary>
/// <param name="pluginType"></param>
/// <param name="concreteType"></param>
@@ -263,7 +38,8 @@
}
/// <summary>
- /// Adds the concreteType as an Instance of the pluginType with a name
+ /// Adds the concreteType as an Instance of the pluginType with a name. Mostly
+ /// useful for conventions
/// </summary>
/// <param name="pluginType"></param>
/// <param name="concreteType"></param>
@@ -274,8 +50,8 @@
}
/// <summary>
- /// Add the pluggedType as an instance to any configured pluginType where pluggedType
- /// could be assigned to the pluginType
+ /// Add the pluggedType as an instance to any configured pluginType where pluggedType.
+ /// Mostly useful for conventions
/// </summary>
/// <param name="pluggedType"></param>
public void AddType(Type pluggedType)
@@ -330,7 +106,7 @@
/// <summary>
/// This method is a shortcut for specifying the default constructor and
/// setter arguments for a ConcreteType. ForConcreteType is shorthand for:
- /// ForRequestedType[T]().TheDefault.Is.OfConcreteType[T].**************
+ /// For[T]().Use[T].**************
/// when the PluginType and ConcreteType are the same Type
/// </summary>
/// <typeparam name="T"></typeparam>
@@ -355,7 +131,7 @@
}
/// <summary>
- /// Convenience method. Equivalent of ForRequestedType[PluginType]().AsSingletons()
+ /// Convenience method. Equivalent of ForRequestedType[PluginType]().Singletons()
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <returns></returns>
@@ -414,7 +190,8 @@
/// </summary>
/// <param name="profileName"></param>
/// <returns></returns>
- public ProfileExpression CreateProfile(string profileName)
+ [Obsolete("Change to Profile( [name], Action<ProfileExpression> )")]
+ public ProfileExpression Profile(string profileName)
{
var expression = new ProfileExpression(profileName, this);
@@ -428,7 +205,7 @@
/// </summary>
/// <param name="profileName"></param>
/// <param name="action"></param>
- public void CreateProfile(string profileName, Action<ProfileExpression> action)
+ public void Profile(string profileName, Action<ProfileExpression> action)
{
var expression = new ProfileExpression(profileName, this);
action(expression);
@@ -525,6 +302,7 @@
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <param name="object"></param>
+ [Obsolete("Prefer For<T>().Use(value)")]
public void Register<PLUGINTYPE>(PLUGINTYPE @object)
{
ForRequestedType<PLUGINTYPE>().TheDefault.IsThis(@object);
@@ -535,13 +313,16 @@
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <param name="instance"></param>
+ [Obsolete("Prefer For<T>().Use(instance)")]
public void Register<PLUGINTYPE>(Instance instance)
{
ForRequestedType<PLUGINTYPE>().TheDefault.IsThis(instance);
}
/// <summary>
- /// Shorthand for ForRequestedType<PLUGINTYPE>()
+ /// Expression Builder used to define policies for a PluginType including
+ /// Scoping, the Default Instance, and interception. BuildInstancesOf()
+ /// and ForRequestedType() are synonyms
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <returns></returns>
@@ -551,9 +332,10 @@
}
/// <summary>
- /// Shorthand for ForRequestedType(pluginType)
+ /// Expression Builder used to define policies for a PluginType including
+ /// Scoping, the Default Instance, and interception. This method is specifically
+ /// meant for registering open generic types
/// </summary>
- /// <param name="pluginType"></param>
/// <returns></returns>
public GenericFamilyExpression For(Type pluginType)
{
Modified: trunk/Source/StructureMap/InitializationExpression.cs
===================================================================
--- trunk/Source/StructureMap/InitializationExpression.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap/InitializationExpression.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -119,7 +119,7 @@
/// </summary>
/// <param name="profileName"></param>
/// <returns></returns>
- ProfileExpression CreateProfile(string profileName);
+ ProfileExpression Profile(string profileName);
/// <summary>
/// An alternative way to use CreateProfile that uses ProfileExpression
@@ -128,7 +128,7 @@
/// </summary>
/// <param name="profileName"></param>
/// <param name="action"></param>
- void CreateProfile(string profileName, Action<ProfileExpression> action);
+ void Profile(string profileName, Action<ProfileExpression> action);
/// <summary>
/// Registers a new TypeInterceptor object with the Container
Modified: trunk/Source/StructureMap/ObjectFactory.cs
===================================================================
--- trunk/Source/StructureMap/ObjectFactory.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap/ObjectFactory.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -400,8 +400,6 @@
}
}
-
-
#endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/Instance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Instance.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap/Pipeline/Instance.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -190,12 +190,19 @@
/// </summary>
/// <param name="instanceKey"></param>
/// <returns></returns>
+ [Obsolete("Change to Named")]
public T WithName(string instanceKey)
{
Name = instanceKey;
return thisInstance;
}
+ public T Named(string instanceKey)
+ {
+ Name = instanceKey;
+ return thisInstance;
+ }
+
/// <summary>
/// Register an Action to perform on the object created by this Instance
/// before it is returned to the caller
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap/StructureMap.csproj 2009-12-29 02:55:12 UTC (rev 314)
@@ -337,6 +337,7 @@
<Compile Include="ConfigurationExpression.cs" />
<Compile Include="Configuration\DictionaryReader.cs" />
<Compile Include="Configuration\DSL\Expressions\InstanceExpression.cs" />
+ <Compile Include="Configuration\DSL\IRegistry.cs" />
<Compile Include="Configuration\DSL\SetterConvention.cs" />
<Compile Include="Configuration\ITypeReader.cs" />
<Compile Include="Configuration\PrimitiveArrayReader.cs" />
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -24,14 +24,23 @@
{
string theProfileName = "something";
- IContainer manager = new Container(registry => registry.CreateProfile(theProfileName)
- .For<IWidget>().Use(delegate { return new AWidget(); })
- .For<Rule>().Use(delegate { return new DefaultRule(); }));
+ IContainer container = new Container(r =>
+ {
+ r.Profile(theProfileName, x =>
+ {
+ x.For<IWidget>().Use(() => new AWidget());
+ x.For<Rule>().Use(() => new DefaultRule());
+ });
- manager.SetDefaultsToProfile(theProfileName);
- Assert.IsInstanceOfType(typeof (AWidget), manager.GetInstance<IWidget>());
- Assert.IsInstanceOfType(typeof (DefaultRule), manager.GetInstance<Rule>());
+
+
+ });
+
+ container.SetDefaultsToProfile(theProfileName);
+
+ Assert.IsInstanceOfType(typeof (AWidget), container.GetInstance<IWidget>());
+ Assert.IsInstanceOfType(typeof (DefaultRule), container.GetInstance<Rule>());
}
@@ -42,7 +51,7 @@
IContainer container = new Container(registry =>
{
- registry.CreateProfile(theProfileName, x =>
+ registry.Profile(theProfileName, x =>
{
x.Type<IWidget>().Is.ConstructedBy(() => new AWidget());
x.Type<Rule>().Is.ConstructedBy(() => new DefaultRule());
@@ -61,9 +70,15 @@
{
string theProfileName = "something";
- IContainer manager = new Container(registry => registry.CreateProfile(theProfileName)
- .For<IWidget>().UseConcreteType<AWidget>()
- .For<Rule>().UseConcreteType<DefaultRule>());
+ IContainer manager = new Container(registry =>
+ {
+ registry.Profile(theProfileName, p =>
+ {
+ p.For<IWidget>().UseConcreteType<AWidget>();
+ p.For<Rule>().UseConcreteType<DefaultRule>();
+ });
+
+ });
manager.SetDefaultsToProfile(theProfileName);
Assert.IsInstanceOfType(typeof (AWidget), manager.GetInstance<IWidget>());
@@ -77,7 +92,7 @@
var theWidget = new AWidget();
string theProfileName = "something";
- registry.CreateProfile(theProfileName)
+ registry.Profile(theProfileName)
.For<IWidget>().Use(theWidget);
PluginGraph graph = registry.Build();
@@ -93,7 +108,7 @@
string theDefaultName = "TheDefaultName";
var registry = new Registry();
- registry.CreateProfile(theProfileName)
+ registry.Profile(theProfileName)
.For<IWidget>().UseNamedInstance(theDefaultName)
.For<Rule>().UseNamedInstance("DefaultRule");
@@ -110,7 +125,7 @@
string theProfileName = "TheProfile";
var registry = new Registry();
- registry.CreateProfile(theProfileName)
+ registry.Profile(theProfileName)
.For<IWidget>().UseConcreteType<AWidget>();
PluginGraph graph = registry.Build();
@@ -118,7 +133,7 @@
ProfileManager profileManager = graph.ProfileManager;
Instance defaultInstance = profileManager.GetDefault(typeof (IWidget), theProfileName);
- Assert.AreEqual(Profile.InstanceKeyForProfile(theProfileName), defaultInstance.Name);
+ Assert.AreEqual(StructureMap.Pipeline.Profile.InstanceKeyForProfile(theProfileName), defaultInstance.Name);
var manager = new Container(graph);
manager.SetDefaultsToProfile(theProfileName);
Modified: trunk/Source/StructureMap.Testing/Examples.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Examples.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap.Testing/Examples.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -430,7 +430,7 @@
// Use the InstanceExpression to define the default Instance
// of a PluginType within a Profile
- CreateProfile("Connected", x => { x.Type<IService>().Is.OfConcreteType<RemoteService>(); });
+ Profile("Connected", x => { x.Type<IService>().Is.OfConcreteType<RemoteService>(); });
}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -161,8 +161,8 @@
{
var container = new Container(registry =>
{
- registry.CreateProfile("1").For(typeof (IService<>)).UseConcreteType(typeof (Service<>));
- registry.CreateProfile("2").For(typeof (IService<>)).UseConcreteType(typeof (Service2<>));
+ registry.Profile("1").For(typeof (IService<>)).UseConcreteType(typeof (Service<>));
+ registry.Profile("2").For(typeof (IService<>)).UseConcreteType(typeof (Service2<>));
});
container.SetDefaultsToProfile("1");
@@ -182,8 +182,8 @@
r.InstanceOf(typeof (IService<>)).Is(typeof (Service<>)).WithName("Service1");
r.InstanceOf(typeof (IService<>)).Is(typeof (Service2<>)).WithName("Service2");
- r.CreateProfile("1").For(typeof (IService<>)).UseNamedInstance("Service1");
- r.CreateProfile("2").For(typeof (IService<>)).UseNamedInstance("Service2");
+ r.Profile("1").For(typeof (IService<>)).UseNamedInstance("Service1");
+ r.Profile("2").For(typeof (IService<>)).UseNamedInstance("Service2");
});
manager.SetDefaultsToProfile("1");
Modified: trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -89,8 +89,8 @@
x.OfConcreteType<ColorService>().WithName("Green").WithProperty("color").EqualTo("Green");
});
- r.CreateProfile("Red").For<IService>().UseNamedInstance("Red");
- r.CreateProfile("Blue").For<IService>().UseNamedInstance("Blue");
+ r.Profile("Red").For<IService>().UseNamedInstance("Red");
+ r.Profile("Blue").For<IService>().UseNamedInstance("Blue");
});
assertColorIs(container, "Orange");
Deleted: trunk/Source/StructureMap.Testing/Graph/ExplicitArgumentTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/ExplicitArgumentTester.cs 2009-12-28 05:21:25 UTC (rev 313)
+++ trunk/Source/StructureMap.Testing/Graph/ExplicitArgumentTester.cs 2009-12-29 02:55:12 UTC (rev 314)
@@ -1,419 +0,0 @@
-using System.Collections.Generic;
-using NUnit.Framework;
-using StructureMap.Pipeline;
-using StructureMap.Testing.Pipeline;
-
-namespace StructureMap.Testing.Graph
-{
- [TestFixture]
- public class ExplicitArgumentTester
- {
- #region Setup/Teardown
-
- [SetUp]
- public void SetUp()
- {
- ObjectFactory.Initialize(x => { x.UseDefaultStructureMapConfigFile = false; });
- }
-
- #endregion
-
- public interface IExplicitTarget
- {
- }
-
- public class RedTarget : IExplicitTarget
- {
- }
-
- public class GreenTarget : IExplicitTarget
- {
- }
-
- public class ExplicitTarget : IExplicitTarget
- {
- private readonly string _name;
- private readonly IProvider _provider;
-
- public ExplicitTarget(string name, IProvider provider)
- {
- _name = name;
- _provider = provider;
- }
-
-
- public string Name
- {
- get { return _name; }
- }
-
- public IProvider Provider
- {
- get { return _provider; }
- }
- }
-
- public interface IProvider
- {
- }
-
- public class RedProvider : IProvider
- {
- }
-
- public class BlueProvider : IProvider
- {
- }
-
- [Test]
- public void Example()
- {
- IContainer container = new Container();
- var theTrade = new Trade();
-
- var view = container.With(theTrade).GetInstance<TradeView>();
-
- view.Trade.ShouldBeTheSameAs(theTrade);
- }
-
- [Test]
- public void Explicit_services_are_used_throughout_the_object_graph()
- {
- var theTrade = new Trade();
-
- IContainer container = new Container(r =>
- {
- r.ForRequestedType<IView>().TheDefaultIsConcreteType<TradeView>();
- r.ForRequestedType<Node>().TheDefaultIsConcreteType<TradeNode>();
- });
-
- var command = container.With(theTrade).GetInstance<Command>();
-
- command.Trade.ShouldBeTheSameAs(theTrade);
- command.Node.IsType<TradeNode>().Trade.ShouldBeTheSameAs(theTrade);
- command.View.IsType<TradeView>().Trade.ShouldBeTheSameAs(theTrade);
- }
-
- [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);
-
- Assert.AreSame(theNode, instance.GetChild("node", typeof (Node), new StubBuildSession()));
- }
-
- [Test]
- public void Fill_in_argument_by_name()
- {
- var container = new Container(x =>
- {
- x.ForRequestedType<IView>().TheDefaultIsConcreteType<View>();
- });
-
- var theNode = new Node();
- var theTrade = new Trade();
-
- var command = container
- .With("node").EqualTo(theNode)
- .With(theTrade)
- .GetInstance<Command>();
-
- Assert.IsInstanceOfType(typeof (View), command.View);
- Assert.AreSame(theNode, command.Node);
- Assert.AreSame(theTrade, command.Trade);
- }
-
- [Test]
- public void NowDoItWithObjectFactoryItself()
- {
- ObjectFactory.Initialize(x =>
- {
- x.ForConcreteType<ExplicitTarget>().Configure
- .CtorDependency<IProvider>().Is<RedProvider>()
- .WithCtorArg("name").EqualTo("Jeremy");
- });
-
- // Get the ExplicitTarget without setting an explicit arg for IProvider
- var firstTarget = ObjectFactory.GetInstance<ExplicitTarget>();
- Assert.IsInstanceOfType(typeof (RedProvider), firstTarget.Provider);
-
- // Now, set the explicit arg for IProvider
- var theBlueProvider = new BlueProvider();
- var secondTarget = ObjectFactory.With<IProvider>(theBlueProvider).GetInstance<ExplicitTarget>();
- Assert.AreSame(theBlueProvider, secondTarget.Provider);
- }
-
- [Test]
- public void NowDoItWithObjectFactoryItself_with_new_API()
- {
- ObjectFactory.Initialize(x =>
- {
- x.ForRequestedType<ExplicitTarget>().TheDefault.Is.OfConcreteType<ExplicitTarget>()
- .CtorDependency<IProvider>().Is(child => child.OfConcreteType<RedProvider>())
- .WithCtorArg("name").EqualTo("Jeremy");
- });
-
- // Get the ExplicitTarget without setting an explicit arg for IProvider
- ObjectFactory.GetInstance<ExplicitTarget>().Provider.IsType<RedProvider>();
-
- // Now, set the explicit arg for IProvider
- var theBlueProvider = new BlueProvider();
- ObjectFactory.With<IProvider>(theBlueProvider).GetInstance<ExplicitTarget>()
- .Provider.ShouldBeTheSameAs(theBlueProvider);
- }
-
- [Test]
- public void OverrideAPrimitiveWithObjectFactory()
- {
- ObjectFactory.Initialize(x =>
- {
- x.ForConcreteType<ExplicitTarget>().Configure
- .CtorDependency<IProvider>().Is<RedProvider>()
- .WithCtorArg("name").EqualTo("Jeremy");
- });
-
- // Get the ExplicitTarget without setting an explicit arg for IProvider
- var firstTarget = ObjectFactory.GetInstance<ExplicitTarget>();
- Assert.AreEqual("Jeremy", firstTarget.Name);
-
- // Now, set the explicit arg for IProvider
- var secondTarget = ObjectFactory.With("name").EqualTo("Julia").GetInstance<ExplicitTarget>();
- Assert.AreEqual("Julia", secondTarget.Name);
- }
-
- [Test]
- public void pass_explicit_service_into_all_instances()
- {
- // The Container is constructed with 2 instances
- // of TradeView
- var container = new Container(r =>
- {
- r.ForRequestedType<TradeView>()
- .TheDefaultIsConcreteType<TradeView>()
- .AddConcreteType<SecuredTradeView>();
- });
-
- var theTrade = new Trade();
-
- IList<TradeView> views = container.With(theTrade).GetAllInstances<TradeView>();
-
- views[0].Trade.ShouldBeTheSameAs(theTrade);
- views[1].Trade.ShouldBeTheSameAs(theTrade);
- }
-
- [Test]
- public void Pass_in_arguments_as_dictionary()
- {
- var container = new Container(x =>
- {
- x.ForRequestedType<IView>().TheDefaultIsConcreteType<View>();
- });
-
- var theNode = new Node();
- var theTrade = new Trade();
-
- var args = new ExplicitArguments();
- args.Set(theNode);
- args.SetArg("trade", theTrade);
-
- var command = container.GetInstance<Command>(args);
-
- Assert.IsInstanceOfType(typeof (View), command.View);
- Assert...
[truncated message content] |
|
From: <jer...@us...> - 2009-12-28 05:21:36
|
Revision: 313
http://structuremap.svn.sourceforge.net/structuremap/?rev=313&view=rev
Author: jeremydmiller
Date: 2009-12-28 05:21:25 +0000 (Mon, 28 Dec 2009)
Log Message:
-----------
ding dong, the witch is dead. StructureMapConfiguration is gone.
Modified Paths:
--------------
trunk/Source/StructureMap/ObjectFactory.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs
Removed Paths:
-------------
trunk/Source/StructureMap/StructureMapConfiguration.cs
trunk/Source/StructureMap.Testing/StructureMapConfigurationDefensiveChecksTester.cs
Modified: trunk/Source/StructureMap/ObjectFactory.cs
===================================================================
--- trunk/Source/StructureMap/ObjectFactory.cs 2009-12-28 05:14:41 UTC (rev 312)
+++ trunk/Source/StructureMap/ObjectFactory.cs 2009-12-28 05:21:25 UTC (rev 313)
@@ -35,8 +35,6 @@
{
lock (_lockObject)
{
- StructureMapConfiguration.Unseal();
-
_container = null;
_profile = string.Empty;
@@ -55,7 +53,6 @@
action(expression);
PluginGraph graph = expression.BuildGraph();
- StructureMapConfiguration.Seal();
_container = new Container(graph);
Profile = expression.DefaultProfileName;
@@ -336,7 +333,7 @@
{
if (_container == null)
{
- _container = buildManager();
+ _container = new Container();
}
}
}
@@ -404,17 +401,7 @@
}
- private static Container buildManager()
- {
- PluginGraph graph = StructureMapConfiguration.GetPluginGraph();
- StructureMapConfiguration.Seal();
- var container = new Container(graph);
- container.SetDefaultsToProfile(_profile);
-
- return container;
- }
-
#endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-12-28 05:14:41 UTC (rev 312)
+++ trunk/Source/StructureMap/StructureMap.csproj 2009-12-28 05:21:25 UTC (rev 313)
@@ -323,7 +323,6 @@
<Compile Include="Source\XmlTemplater.cs">
<SubType>Code</SubType>
</Compile>
- <Compile Include="StructureMapConfiguration.cs" />
<Compile Include="Diagnostics\ValidationBuildSession.cs" />
<EmbeddedResource Include="StructureMapException.resx">
<SubType>Designer</SubType>
Deleted: trunk/Source/StructureMap/StructureMapConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/StructureMapConfiguration.cs 2009-12-28 05:14:41 UTC (rev 312)
+++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2009-12-28 05:21:25 UTC (rev 313)
@@ -1,208 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Xml;
-using StructureMap.Configuration;
-using StructureMap.Configuration.DSL;
-using StructureMap.Configuration.DSL.Expressions;
-using StructureMap.Diagnostics;
-using StructureMap.Graph;
-using StructureMap.Interceptors;
-
-namespace StructureMap
-{
- [Obsolete(
- "Please use the ObjectFactory.Initialize() method for configuring the container and put configuration into Registry classes"
- )]
- public static class StructureMapConfiguration
- {
- private static GraphLog _log;
- private static ConfigurationParserBuilder _parserBuilder;
- private static List<Registry> _registries;
- private static Registry _registry;
- private static bool _sealed;
-
-
- static StructureMapConfiguration()
- {
- ResetAll();
- }
-
- private static IConfigurationParserBuilder parserBuilder
- {
- get
- {
- assertIsNotSealed();
- return _parserBuilder;
- }
- }
-
- private static Registry registry
- {
- get
- {
- assertIsNotSealed();
- return _registry;
- }
- }
-
- /// <summary>
- /// Flag to enable or disable the usage of the default StructureMap.config
- /// If set to false, StructureMap will not look for a StructureMap.config file
- /// </summary>
- public static bool UseDefaultStructureMapConfigFile { get { return parserBuilder.UseAndEnforceExistenceOfDefaultFile; } set { parserBuilder.UseAndEnforceExistenceOfDefaultFile = value; } }
-
-
- public static bool IgnoreStructureMapConfig { get { return parserBuilder.IgnoreDefaultFile; } set { parserBuilder.IgnoreDefaultFile = value; } }
-
- public static bool PullConfigurationFromAppConfig { get { return parserBuilder.PullConfigurationFromAppConfig; } set { parserBuilder.PullConfigurationFromAppConfig = value; } }
-
- private static void assertIsNotSealed()
- {
- if (_sealed)
- {
- throw new StructureMapException(50);
- }
- }
-
- /// <summary>
- /// Programmatically adds a <StructureMap> node containing Xml configuration
- /// </summary>
- /// <param name="node"></param>
- /// <param name="description">A description of this node source for troubleshooting purposes</param>
- public static void IncludeConfigurationFromNode(XmlNode node, string description)
- {
- parserBuilder.IncludeNode(node, string.Empty);
- }
-
-
- /// <summary>
- /// Returns the path to the StructureMap.config file
- /// </summary>
- /// <returns></returns>
- [Obsolete("Use ConfigurationParserBuilder.GetStructureMapConfigurationPath() instead.")]
- public static string GetStructureMapConfigurationPath()
- {
- return ConfigurationParserBuilder.GetStructureMapConfigurationPath();
- }
-
- /// <summary>
- /// Clears StructureMapConfiguration of all configuration options. Returns StructureMap
- /// to only using the default StructureMap.config file for configuration.
- /// </summary>
- public static void ResetAll()
- {
- _sealed = false;
-
- _log = new GraphLog();
- _parserBuilder = new ConfigurationParserBuilder(_log);
- _registry = new Registry();
- _registries = new List<Registry>();
- _registries.Add(_registry);
- UseDefaultStructureMapConfigFile = false;
- IgnoreStructureMapConfig = false;
-
- ObjectFactory.Reset();
- }
-
- public static void RegisterInterceptor(TypeInterceptor interceptor)
- {
- registry.RegisterInterceptor(interceptor);
- }
-
- /// <summary>
- /// Builds a PluginGraph object for the current configuration. Used by ObjectFactory.
- /// </summary>
- /// <returns></returns>
- internal static PluginGraph GetPluginGraph()
- {
- _sealed = true;
-
- ConfigurationParser[] parsers = _parserBuilder.GetParsers();
-
- var pluginGraphBuilder = new PluginGraphBuilder(parsers, _registries.ToArray(), _log);
- return pluginGraphBuilder.Build();
- }
-
- /// <summary>
- /// Directs StructureMap to include Xml configuration information from a separate file
- /// </summary>
- /// <param name="filename"></param>
- public static void IncludeConfigurationFromFile(string filename)
- {
- parserBuilder.IncludeFile(filename);
- }
-
-
- /// <summary>
- /// Programmatically determine Assembly's to be scanned for attribute configuration
- /// </summary>
- /// <returns></returns>
- public static void Scan(Action<IAssemblyScanner> action)
- {
- registry.Scan(action);
- }
-
- /// <summary>
- /// Direct StructureMap to create instances of Type T
- /// </summary>
- /// <typeparam name="PLUGINTYPE">The Type to build</typeparam>
- /// <returns></returns>
- public static CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>()
- {
- return registry.BuildInstancesOf<PLUGINTYPE>();
- }
-
- /// <summary>
- /// Direct StructureMap to create instances of Type T
- /// </summary>
- /// <typeparam name="PLUGINTYPE">The Type to build</typeparam>
- /// <returns></returns>
- public static CreatePluginFamilyExpression<PLUGINTYPE> ForRequestedType<PLUGINTYPE>()
- {
- return registry.BuildInstancesOf<PLUGINTYPE>();
- }
-
- public static GenericFamilyExpression ForRequestedType(Type pluginType)
- {
- return registry.ForRequestedType(pluginType);
- }
-
-
- /// <summary>
- /// Starts the definition of a configuration Profile.
- /// </summary>
- /// <param name="profileName"></param>
- /// <returns></returns>
- public static ProfileExpression CreateProfile(string profileName)
- {
- return registry.CreateProfile(profileName);
- }
-
- /// <summary>
- /// Directs StructureMap to use a Registry class to construct the
- /// PluginGraph
- /// </summary>
- /// <param name="registry"></param>
- public static void AddRegistry(Registry registry)
- {
- assertIsNotSealed();
- _registries.Add(registry);
- }
-
- public static void TheDefaultProfileIs(string profileName)
- {
- registry.addExpression(graph => graph.ProfileManager.DefaultProfileName = profileName);
- }
-
-
- internal static void Seal()
- {
- _sealed = true;
- }
-
- internal static void Unseal()
- {
- _sealed = false;
- }
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-28 05:14:41 UTC (rev 312)
+++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-28 05:21:25 UTC (rev 313)
@@ -394,7 +394,6 @@
<Compile Include="ReadingRegistriesFromXmlTester.cs" />
<Compile Include="SpecificationExtensions.cs" />
<Compile Include="StructureMapConfigCreator.cs" />
- <Compile Include="StructureMapConfigurationDefensiveChecksTester.cs" />
<Compile Include="StructureMapConfigurationTester.cs" />
<Compile Include="TestData\DataMother.cs">
<SubType>Code</SubType>
Deleted: trunk/Source/StructureMap.Testing/StructureMapConfigurationDefensiveChecksTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMapConfigurationDefensiveChecksTester.cs 2009-12-28 05:14:41 UTC (rev 312)
+++ trunk/Source/StructureMap.Testing/StructureMapConfigurationDefensiveChecksTester.cs 2009-12-28 05:21:25 UTC (rev 313)
@@ -1,43 +0,0 @@
-using System;
-using NUnit.Framework;
-using StructureMap.Testing.Widget3;
-
-namespace StructureMap.Testing
-{
- [TestFixture]
- public class StructureMapConfigurationDefensiveChecksTester
- {
- private void shouldThrowExceptionWhenSealed(Action action)
- {
- StructureMapConfiguration.ResetAll();
- StructureMapConfiguration.Seal();
-
- try
- {
- action();
- Assert.Fail("Should have thrown exception");
- }
- catch (StructureMapException ex)
- {
- ex.ErrorCode.ShouldEqual(50);
- }
- }
-
- [Test]
- public void Ensure_defensive_check_is_always_thrown_when_StructureMapConfiguration_is_sealed()
- {
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.AddRegistry(null));
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.BuildInstancesOf<IGateway>());
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.CreateProfile("something"));
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.ForRequestedType(typeof (IGateway)));
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.IgnoreStructureMapConfig = true);
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.IncludeConfigurationFromFile("something"));
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.IncludeConfigurationFromNode(null, null));
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.PullConfigurationFromAppConfig = true);
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.RegisterInterceptor(null));
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.Scan(x => { }));
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.TheDefaultProfileIs("something"));
- shouldThrowExceptionWhenSealed(() => StructureMapConfiguration.UseDefaultStructureMapConfigFile = true);
- }
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2009-12-28 05:14:41 UTC (rev 312)
+++ trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2009-12-28 05:21:25 UTC (rev 313)
@@ -20,15 +20,8 @@
public void SetUp()
{
DataMother.RestoreStructureMapConfig();
- StructureMapConfiguration.ResetAll();
}
- [TearDown]
- public void TearDown()
- {
- StructureMapConfiguration.ResetAll();
- }
-
#endregion
private static XmlNode createNodeFromText(string outerXml)
@@ -39,19 +32,6 @@
}
- public static void Bootstrap()
- {
- StructureMapConfiguration.UseDefaultStructureMapConfigFile = false;
- StructureMapConfiguration.PullConfigurationFromAppConfig = true;
-
- StructureMapConfiguration.AddRegistry(new CoreRegistry());
- StructureMapConfiguration.AddRegistry(new WebRegistry());
-
- StructureMapConfiguration.ForRequestedType<IGateway>().TheDefaultIsConcreteType<DefaultGateway>();
-
- var gateway = ObjectFactory.GetInstance<IGateway>();
- }
-
public class WebRegistry : Registry
{
}
@@ -61,20 +41,6 @@
}
[Test]
- public void BuildPluginGraph()
- {
- PluginGraph graph = StructureMapConfiguration.GetPluginGraph();
- Assert.IsNotNull(graph);
- }
-
- [Test]
- public void Ignore_the_StructureMap_config_file_even_if_it_exists()
- {
- StructureMapConfiguration.IgnoreStructureMapConfig = true;
- StructureMapConfiguration.GetPluginGraph().FamilyCount.ShouldEqual(0);
- }
-
- [Test]
public void PullConfigurationFromTheAppConfig()
{
ObjectFactory.Initialize(x =>
@@ -115,7 +81,7 @@
{
DataMother.RemoveStructureMapConfig();
- StructureMapConfiguration.GetPluginGraph().ShouldNotBeNull();
+ ObjectFactory.Initialize(x => { });
}
[Test(
@@ -124,11 +90,16 @@
)]
public void TheDefaultInstance_has_a_dependency_upon_a_Guid_NewGuid_lambda_generated_instance()
{
- StructureMapConfiguration.IgnoreStructureMapConfig = true;
+ ObjectFactory.Initialize(x =>
+ {
+ x.IgnoreStructureMapConfig = true;
- StructureMapConfiguration.ForRequestedType<Guid>().TheDefault.Is.ConstructedBy(() => Guid.NewGuid());
- StructureMapConfiguration.ForRequestedType<IFoo>().TheDefaultIsConcreteType<Foo>();
+ x.ForRequestedType<Guid>().TheDefault.Is.ConstructedBy(() => Guid.NewGuid());
+ x.ForRequestedType<IFoo>().TheDefaultIsConcreteType<Foo>();
+ });
+
+
Assert.That(ObjectFactory.GetInstance<IFoo>().SomeGuid != Guid.Empty);
}
@@ -138,31 +109,18 @@
)]
public void TheDefaultInstanceIsALambdaForGuidNewGuid()
{
- StructureMapConfiguration.IgnoreStructureMapConfig = true;
- StructureMapConfiguration.ForRequestedType<Guid>().TheDefault.Is.ConstructedBy(() => Guid.NewGuid());
+ ObjectFactory.Initialize(x =>
+ {
+ x.IgnoreStructureMapConfig = true;
- Assert.That(ObjectFactory.GetInstance<Guid>() != Guid.Empty);
- }
+ x.ForRequestedType<Guid>().TheDefault.Is.ConstructedBy(() => Guid.NewGuid());
+ });
- [Test]
- public void TheDefaultNameIs_should_set_the_default_profile_name()
- {
- StructureMapConfiguration.IgnoreStructureMapConfig = true;
- string theDefaultProfileName = "the default profile";
- StructureMapConfiguration.TheDefaultProfileIs(theDefaultProfileName);
-
- PluginGraph graph = StructureMapConfiguration.GetPluginGraph();
- graph.ProfileManager.DefaultProfileName.ShouldEqual(theDefaultProfileName);
+ Assert.That(ObjectFactory.GetInstance<Guid>() != Guid.Empty);
}
- [Test]
- public void Use_the_StructureMap_config_file_if_it_exists()
- {
- DataMother.RestoreStructureMapConfig();
- StructureMapConfiguration.GetPluginGraph().FamilyCount.ShouldBeGreaterThan(0);
- }
}
public interface IFoo
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-28 05:14:51
|
Revision: 312
http://structuremap.svn.sourceforge.net/structuremap/?rev=312&view=rev
Author: jeremydmiller
Date: 2009-12-28 05:14:41 +0000 (Mon, 28 Dec 2009)
Log Message:
-----------
quickie code cleanup
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/ProfileBuilder.cs
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Graph/FirstInterfaceConvention.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/Query/Model.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs
trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs
trunk/Source/StructureMap.Testing/Configuration/ProfileBuilderTester.cs
trunk/Source/StructureMap.Testing/Graph/FirstInterfaceConventionTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
trunk/Source/StructureMap.Testing/SpecificationExtensions.cs
Modified: trunk/Source/StructureMap/Configuration/ProfileBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/ProfileBuilder.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap/Configuration/ProfileBuilder.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -1,4 +1,3 @@
-using System;
using StructureMap.Graph;
using StructureMap.Pipeline;
@@ -39,6 +38,5 @@
}
#endregion
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap/Container.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -64,13 +64,7 @@
/// <summary>
/// Provides queryable access to the configured PluginType's and Instances of this Container
/// </summary>
- public IModel Model
- {
- get
- {
- return new Model(_pipelineGraph, this);
- }
- }
+ public IModel Model { get { return new Model(_pipelineGraph, this); } }
/// <summary>
/// Creates or finds the named instance of T
Modified: trunk/Source/StructureMap/Graph/FirstInterfaceConvention.cs
===================================================================
--- trunk/Source/StructureMap/Graph/FirstInterfaceConvention.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap/Graph/FirstInterfaceConvention.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -1,8 +1,8 @@
using System;
using System.Diagnostics;
+using System.Linq;
using StructureMap.Configuration.DSL;
using StructureMap.TypeRules;
-using System.Linq;
namespace StructureMap.Graph
{
@@ -11,9 +11,9 @@
public void Process(Type type, Registry registry)
{
if (!type.IsConcrete() || !type.CanBeCreated()) return;
-
-
- var interfaceType = type.AllInterfaces().FirstOrDefault();
+
+
+ Type interfaceType = type.AllInterfaces().FirstOrDefault();
if (interfaceType != null)
{
Debug.WriteLine("Plugging {0} into {1}".ToFormat(type.Name, interfaceType.Name));
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using StructureMap.Pipeline;
-using StructureMap.Query;
using StructureMap.TypeRules;
using StructureMap.Util;
@@ -328,6 +327,22 @@
_instances.WithValue(name, action);
}
+ public void RemoveInstance(Instance instance)
+ {
+ _instances.Remove(instance.Name);
+ if (_defaultKey == instance.Name)
+ {
+ _defaultKey = null;
+ }
+ }
+
+ public void RemoveAll()
+ {
+ _instances.Clear();
+ _mementoList.Clear();
+ _defaultKey = null;
+ }
+
#region properties
public bool IsGenericTemplate { get { return _pluginType.IsGenericTypeDefinition || _pluginType.ContainsGenericParameters; } }
@@ -348,29 +363,8 @@
/// The InstanceKey of the default instance of the PluginFamily
/// </summary>
[Obsolete]
- public string DefaultInstanceKey
- {
- get { return _defaultKey; }
- set { _defaultKey = value ?? string.Empty; }
- }
+ public string DefaultInstanceKey { get { return _defaultKey; } set { _defaultKey = value ?? string.Empty; } }
#endregion
-
- public void RemoveInstance(Instance instance)
- {
- _instances.Remove(instance.Name);
- if (_defaultKey == instance.Name)
- {
- _defaultKey = null;
- }
-
- }
-
- public void RemoveAll()
- {
- _instances.Clear();
- _mementoList.Clear();
- _defaultKey = null;
- }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -188,7 +188,7 @@
public void EjectAllInstancesOf<T>()
{
- EjectAllInstancesOf(typeof(T));
+ EjectAllInstancesOf(typeof (T));
}
public void EjectAllInstancesOf(Type pluginType)
@@ -250,8 +250,5 @@
ForType(pluginType).RemoveInstance(instance);
_profileManager.RemoveInstance(pluginType, instance);
}
-
-
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/Model.cs
===================================================================
--- trunk/Source/StructureMap/Query/Model.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap/Query/Model.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -7,8 +7,8 @@
{
public class Model : IModel
{
- private PipelineGraph _graph;
- private IContainer _container;
+ private readonly IContainer _container;
+ private readonly PipelineGraph _graph;
internal Model(PipelineGraph graph, IContainer container)
{
@@ -18,6 +18,8 @@
#region IModel Members
+ private IEnumerable<IPluginTypeConfiguration> pluginTypes { get { return _graph.GetPluginTypes(_container); } }
+
public bool HasDefaultImplementationFor(Type pluginType)
{
return findForFamily(pluginType, f => f.Default != null);
@@ -38,14 +40,6 @@
return findForFamily(pluginType, f => f.Default == null ? null : f.Default.ConcreteType);
}
- private IEnumerable<IPluginTypeConfiguration> pluginTypes
- {
- get
- {
- return _graph.GetPluginTypes(_container);
- }
- }
-
public IEnumerable<IPluginTypeConfiguration> PluginTypes { get { return pluginTypes; } }
/// <summary>
@@ -78,10 +72,7 @@
EjectAndRemovePluginTypes(filter);
// second pass to hit instances
- pluginTypes.Each(x =>
- {
- x.EjectAndRemove(i => filter(i.ConcreteType));
- });
+ pluginTypes.Each(x => { x.EjectAndRemove(i => filter(i.ConcreteType)); });
}
/// <summary>
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -23,7 +23,8 @@
{
public RedGreenRegistry()
{
- InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Red").WithName("Red");
+ InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Red").WithName(
+ "Red");
InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Green").WithName(
"Green");
}
@@ -35,7 +36,8 @@
{
InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Yellow").WithName(
"Yellow");
- InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithProperty("color").EqualTo("Blue").WithName("Blue");
+ InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithProperty("color").EqualTo("Blue").WithName(
+ "Blue");
}
}
@@ -47,22 +49,7 @@
}
}
- [Test]
- public void include_a_registry()
- {
- var registry = new Registry();
- registry.IncludeRegistry<YellowBlueRegistry>();
- registry.IncludeRegistry<RedGreenRegistry>();
- registry.IncludeRegistry<PurpleRegistry>();
- var container = new Container(registry);
-
- container.GetInstance<IWidget>().ShouldBeOfType<AWidget>();
-
- container.GetAllInstances<IWidget>().Count.ShouldEqual(5);
- }
-
-
[Test]
public void Can_add_an_instance_for_concrete_class_with_no_constructors()
{
@@ -91,6 +78,21 @@
}
[Test]
+ public void include_a_registry()
+ {
+ var registry = new Registry();
+ registry.IncludeRegistry<YellowBlueRegistry>();
+ registry.IncludeRegistry<RedGreenRegistry>();
+ registry.IncludeRegistry<PurpleRegistry>();
+
+ var container = new Container(registry);
+
+ container.GetInstance<IWidget>().ShouldBeOfType<AWidget>();
+
+ container.GetAllInstances<IWidget>().Count.ShouldEqual(5);
+ }
+
+ [Test]
public void Latch_on_a_PluginGraph()
{
var registry2 = new TestRegistry2();
Modified: trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -1,5 +1,4 @@
using NUnit.Framework;
-using StructureMap.Configuration;
using StructureMap.Graph;
using StructureMap.Testing.TestData;
using StructureMap.Testing.Widget;
Modified: trunk/Source/StructureMap.Testing/Configuration/ProfileBuilderTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/ProfileBuilderTester.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap.Testing/Configuration/ProfileBuilderTester.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -74,6 +74,5 @@
Assert.AreEqual(280, ex.ErrorCode);
}
}
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Graph/FirstInterfaceConventionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/FirstInterfaceConventionTester.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap.Testing/Graph/FirstInterfaceConventionTester.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -1,7 +1,5 @@
-using System.Diagnostics;
+using System.Linq;
using NUnit.Framework;
-using System.Linq;
-using StructureMap.Testing.Widget;
using StructureMap.Testing.Widget3;
using StructureMap.TypeRules;
@@ -10,7 +8,7 @@
[TestFixture]
public class FirstInterfaceConventionTester
{
- private Container container;
+ #region Setup/Teardown
[SetUp]
public void SetUp()
@@ -22,31 +20,36 @@
o.TheCallingAssembly();
o.RegisterConcreteTypesAgainstTheFirstInterface();
- o.Exclude(t => t.CanBeCastTo(typeof(IGateway)));
+ o.Exclude(t => t.CanBeCastTo(typeof (IGateway)));
});
});
}
- [Test]
- public void simple_case()
+ #endregion
+
+ private Container container;
+
+
+ public interface I1
{
- container.Model.For<I1>().Instances.Select(x => x.ConcreteType).ShouldHaveTheSameElementsAs(typeof(C1), typeof(C2));
- container.Model.For<I2>().Instances.Select(x => x.ConcreteType).Any().ShouldBeFalse();
}
- [Test]
- public void do_not_register_type_if_there_are_primitive_arguments()
+ public interface I2
{
- container.Model.HasImplementationsFor<I3>().ShouldBeFalse();
}
+ public interface I3
+ {
+ }
- public interface I1 { }
- public interface I2 { }
- public interface I3 { }
+ public class C1 : I1
+ {
+ }
- public class C1 : I1 { }
- public class C2 : C1, I2 { }
+ public class C2 : C1, I2
+ {
+ }
+
public class C3 : C2, I3
{
public C3(string name)
@@ -56,24 +59,51 @@
public class C4
{
-
}
public class C5 : I1
{
- private C5(){}
+ private C5()
+ {
+ }
}
- public interface I1<T> { }
- public interface I2<T> { }
- public interface I3<T> { }
+ public interface I1<T>
+ {
+ }
- public class C1<T> : I1<T> { }
- public class C2<T> : C1<T>, I2<T> { }
- public class C3<T> : C2<T>, I3<T> { }
+ public interface I2<T>
+ {
+ }
- }
+ public interface I3<T>
+ {
+ }
+ public class C1<T> : I1<T>
+ {
+ }
-}
+ public class C2<T> : C1<T>, I2<T>
+ {
+ }
+ public class C3<T> : C2<T>, I3<T>
+ {
+ }
+
+ [Test]
+ public void do_not_register_type_if_there_are_primitive_arguments()
+ {
+ container.Model.HasImplementationsFor<I3>().ShouldBeFalse();
+ }
+
+ [Test]
+ public void simple_case()
+ {
+ container.Model.For<I1>().Instances.Select(x => x.ConcreteType).ShouldHaveTheSameElementsAs(typeof (C1),
+ typeof (C2));
+ container.Model.For<I2>().Instances.Select(x => x.ConcreteType).Any().ShouldBeFalse();
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -196,33 +196,33 @@
}
[Test]
- public void set_default()
+ public void remove_all_clears_the_defaul_and_removes_all_plugins_instances()
{
var family = new PluginFamily(typeof (IServiceProvider));
var instance = new SmartInstance<DataSet>();
family.SetDefault(instance);
- family.GetDefaultInstance().ShouldBeTheSameAs(instance);
- family.DefaultInstanceKey.ShouldEqual(instance.Name);
+ family.AddInstance(new NullInstance());
+ family.AddType(typeof (DataSet));
+
+ family.RemoveAll();
+
+ family.DefaultInstanceKey.ShouldBeNull();
+
+ family.InstanceCount.ShouldEqual(0);
}
[Test]
- public void remove_all_clears_the_defaul_and_removes_all_plugins_instances()
+ public void set_default()
{
- var family = new PluginFamily(typeof(IServiceProvider));
+ var family = new PluginFamily(typeof (IServiceProvider));
var instance = new SmartInstance<DataSet>();
family.SetDefault(instance);
- family.AddInstance(new NullInstance());
- family.AddType(typeof(DataSet));
-
- family.RemoveAll();
-
- family.DefaultInstanceKey.ShouldBeNull();
-
- family.InstanceCount.ShouldEqual(0);
+ family.GetDefaultInstance().ShouldBeTheSameAs(instance);
+ family.DefaultInstanceKey.ShouldEqual(instance.Name);
}
[Test]
Modified: trunk/Source/StructureMap.Testing/SpecificationExtensions.cs
===================================================================
--- trunk/Source/StructureMap.Testing/SpecificationExtensions.cs 2009-12-28 05:04:44 UTC (rev 311)
+++ trunk/Source/StructureMap.Testing/SpecificationExtensions.cs 2009-12-28 05:14:41 UTC (rev 312)
@@ -44,7 +44,7 @@
catch (Exception)
{
Debug.WriteLine("ACTUAL:");
- foreach (var o in actual)
+ foreach (object o in actual)
{
Debug.WriteLine(o);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-28 05:05:01
|
Revision: 311
http://structuremap.svn.sourceforge.net/structuremap/?rev=311&view=rev
Author: jeremydmiller
Date: 2009-12-28 05:04:44 +0000 (Mon, 28 Dec 2009)
Log Message:
-----------
added the FirstInterfaceConvention (I think it's a bad idea, but other people wanted it), deleted some obsolete code hiding out leftover from the data access crap
Modified Paths:
--------------
trunk/Source/StructureMap/Graph/AssemblyScanner.cs
trunk/Source/StructureMap/Graph/IAssemblyScanner.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap.Testing/Graph/DefaultConventionScanningTester.cs
trunk/Source/StructureMap.Testing/SpecificationExtensions.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
Added Paths:
-----------
trunk/Source/StructureMap/Graph/FirstInterfaceConvention.cs
trunk/Source/StructureMap.Testing/Graph/FirstInterfaceConventionTester.cs
Removed Paths:
-------------
trunk/Source/StructureMap.Testing/DataAccess/
Modified: trunk/Source/StructureMap/Graph/AssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-28 04:19:45 UTC (rev 310)
+++ trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-28 05:04:44 UTC (rev 311)
@@ -80,6 +80,11 @@
Convention<DefaultConventionScanner>();
}
+ public void RegisterConcreteTypesAgainstTheFirstInterface()
+ {
+ Convention<FirstInterfaceConvention>();
+ }
+
[Obsolete("Replace ITypeScanner with IRegistrationConvention")]
public void With<T>() where T : ITypeScanner, new()
{
Added: trunk/Source/StructureMap/Graph/FirstInterfaceConvention.cs
===================================================================
--- trunk/Source/StructureMap/Graph/FirstInterfaceConvention.cs (rev 0)
+++ trunk/Source/StructureMap/Graph/FirstInterfaceConvention.cs 2009-12-28 05:04:44 UTC (rev 311)
@@ -0,0 +1,24 @@
+using System;
+using System.Diagnostics;
+using StructureMap.Configuration.DSL;
+using StructureMap.TypeRules;
+using System.Linq;
+
+namespace StructureMap.Graph
+{
+ public class FirstInterfaceConvention : IRegistrationConvention
+ {
+ public void Process(Type type, Registry registry)
+ {
+ if (!type.IsConcrete() || !type.CanBeCreated()) return;
+
+
+ var interfaceType = type.AllInterfaces().FirstOrDefault();
+ if (interfaceType != null)
+ {
+ Debug.WriteLine("Plugging {0} into {1}".ToFormat(type.Name, interfaceType.Name));
+ registry.AddType(interfaceType, type);
+ }
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/IAssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/IAssemblyScanner.cs 2009-12-28 04:19:45 UTC (rev 310)
+++ trunk/Source/StructureMap/Graph/IAssemblyScanner.cs 2009-12-28 05:04:44 UTC (rev 311)
@@ -83,6 +83,13 @@
void WithDefaultConventions();
/// <summary>
+ /// Automatically registers all concrete types without primitive arguments
+ /// against its first interface, if any
+ /// </summary>
+ void RegisterConcreteTypesAgainstTheFirstInterface();
+
+
+ /// <summary>
/// Creates and adds a new ITypeScanner of type T to this scanning operation
/// </summary>
/// <typeparam name="T"></typeparam>
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 04:19:45 UTC (rev 310)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 05:04:44 UTC (rev 311)
@@ -348,7 +348,11 @@
/// The InstanceKey of the default instance of the PluginFamily
/// </summary>
[Obsolete]
- public string DefaultInstanceKey { get { return _defaultKey; } set { _defaultKey = value ?? string.Empty; } }
+ public string DefaultInstanceKey
+ {
+ get { return _defaultKey; }
+ set { _defaultKey = value ?? string.Empty; }
+ }
#endregion
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-12-28 04:19:45 UTC (rev 310)
+++ trunk/Source/StructureMap/StructureMap.csproj 2009-12-28 05:04:44 UTC (rev 311)
@@ -361,6 +361,7 @@
<Compile Include="Graph\FamilyAttributeScanner.cs" />
<Compile Include="Graph\FindAllTypesFilter.cs" />
<Compile Include="Graph\FindRegistriesScanner.cs" />
+ <Compile Include="Graph\FirstInterfaceConvention.cs" />
<Compile Include="Graph\IAssemblyScanner.cs" />
<Compile Include="Graph\ImplementationMap.cs" />
<Compile Include="Graph\ITypeScanner.cs" />
Modified: trunk/Source/StructureMap.Testing/Graph/DefaultConventionScanningTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/DefaultConventionScanningTester.cs 2009-12-28 04:19:45 UTC (rev 310)
+++ trunk/Source/StructureMap.Testing/Graph/DefaultConventionScanningTester.cs 2009-12-28 05:04:44 UTC (rev 311)
@@ -58,7 +58,6 @@
{
}
-
[TestFixture]
public class DefaultConventionScanningTester
{
Added: trunk/Source/StructureMap.Testing/Graph/FirstInterfaceConventionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/FirstInterfaceConventionTester.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/Graph/FirstInterfaceConventionTester.cs 2009-12-28 05:04:44 UTC (rev 311)
@@ -0,0 +1,79 @@
+using System.Diagnostics;
+using NUnit.Framework;
+using System.Linq;
+using StructureMap.Testing.Widget;
+using StructureMap.Testing.Widget3;
+using StructureMap.TypeRules;
+
+namespace StructureMap.Testing.Graph
+{
+ [TestFixture]
+ public class FirstInterfaceConventionTester
+ {
+ private Container container;
+
+ [SetUp]
+ public void SetUp()
+ {
+ container = new Container(x =>
+ {
+ x.Scan(o =>
+ {
+ o.TheCallingAssembly();
+ o.RegisterConcreteTypesAgainstTheFirstInterface();
+
+ o.Exclude(t => t.CanBeCastTo(typeof(IGateway)));
+ });
+ });
+ }
+
+ [Test]
+ public void simple_case()
+ {
+ container.Model.For<I1>().Instances.Select(x => x.ConcreteType).ShouldHaveTheSameElementsAs(typeof(C1), typeof(C2));
+ container.Model.For<I2>().Instances.Select(x => x.ConcreteType).Any().ShouldBeFalse();
+ }
+
+ [Test]
+ public void do_not_register_type_if_there_are_primitive_arguments()
+ {
+ container.Model.HasImplementationsFor<I3>().ShouldBeFalse();
+ }
+
+
+ public interface I1 { }
+ public interface I2 { }
+ public interface I3 { }
+
+ public class C1 : I1 { }
+ public class C2 : C1, I2 { }
+ public class C3 : C2, I3
+ {
+ public C3(string name)
+ {
+ }
+ }
+
+ public class C4
+ {
+
+ }
+
+ public class C5 : I1
+ {
+ private C5(){}
+ }
+
+ public interface I1<T> { }
+ public interface I2<T> { }
+ public interface I3<T> { }
+
+ public class C1<T> : I1<T> { }
+ public class C2<T> : C1<T>, I2<T> { }
+ public class C3<T> : C2<T>, I3<T> { }
+
+ }
+
+
+}
+
Modified: trunk/Source/StructureMap.Testing/SpecificationExtensions.cs
===================================================================
--- trunk/Source/StructureMap.Testing/SpecificationExtensions.cs 2009-12-28 04:19:45 UTC (rev 310)
+++ trunk/Source/StructureMap.Testing/SpecificationExtensions.cs 2009-12-28 05:04:44 UTC (rev 311)
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using NUnit.Framework;
@@ -31,11 +32,23 @@
actual.ShouldNotBeNull();
expected.ShouldNotBeNull();
- actual.Count.ShouldEqual(expected.Count);
+ try
+ {
+ actual.Count.ShouldEqual(expected.Count);
- for (int i = 0; i < actual.Count; i++)
+ for (int i = 0; i < actual.Count; i++)
+ {
+ actual[i].ShouldEqual(expected[i]);
+ }
+ }
+ catch (Exception)
{
- actual[i].ShouldEqual(expected[i]);
+ Debug.WriteLine("ACTUAL:");
+ foreach (var o in actual)
+ {
+ Debug.WriteLine(o);
+ }
+ throw;
}
}
Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-28 04:19:45 UTC (rev 310)
+++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-28 05:04:44 UTC (rev 311)
@@ -257,6 +257,7 @@
<Compile Include="Graph\ExceptionHandling\StructureMapExceptionTester.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="Graph\FirstInterfaceConventionTester.cs" />
<Compile Include="Graph\SingleImplementationScannerTester.cs" />
<Compile Include="Graph\TestExplicitArguments.cs" />
<Compile Include="Graph\FillDependenciesTester.cs">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-28 04:19:53
|
Revision: 310
http://structuremap.svn.sourceforge.net/structuremap/?rev=310&view=rev
Author: jeremydmiller
Date: 2009-12-28 04:19:45 +0000 (Mon, 28 Dec 2009)
Log Message:
-----------
integration test for the "IncludeRegistry" feature
Modified Paths:
--------------
trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2009-12-28 04:07:20 UTC (rev 309)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2009-12-28 04:19:45 UTC (rev 310)
@@ -2,6 +2,7 @@
using NUnit.Framework;
using StructureMap.Configuration.DSL;
using StructureMap.Graph;
+using StructureMap.Testing.Widget;
using StructureMap.Testing.Widget3;
namespace StructureMap.Testing.Configuration.DSL
@@ -18,7 +19,51 @@
#endregion
+ public class RedGreenRegistry : Registry
+ {
+ public RedGreenRegistry()
+ {
+ InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Red").WithName("Red");
+ InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Green").WithName(
+ "Green");
+ }
+ }
+
+ public class YellowBlueRegistry : Registry
+ {
+ public YellowBlueRegistry()
+ {
+ InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Yellow").WithName(
+ "Yellow");
+ InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithProperty("color").EqualTo("Blue").WithName("Blue");
+ }
+ }
+
+ public class PurpleRegistry : Registry
+ {
+ public PurpleRegistry()
+ {
+ For<IWidget>().Use<AWidget>();
+ }
+ }
+
[Test]
+ public void include_a_registry()
+ {
+ var registry = new Registry();
+ registry.IncludeRegistry<YellowBlueRegistry>();
+ registry.IncludeRegistry<RedGreenRegistry>();
+ registry.IncludeRegistry<PurpleRegistry>();
+
+ var container = new Container(registry);
+
+ container.GetInstance<IWidget>().ShouldBeOfType<AWidget>();
+
+ container.GetAllInstances<IWidget>().Count.ShouldEqual(5);
+ }
+
+
+ [Test]
public void Can_add_an_instance_for_concrete_class_with_no_constructors()
{
var registry = new Registry();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-28 04:07:29
|
Revision: 309
http://structuremap.svn.sourceforge.net/structuremap/?rev=309&view=rev
Author: jeremydmiller
Date: 2009-12-28 04:07:20 +0000 (Mon, 28 Dec 2009)
Log Message:
-----------
Finished the work on the new "Model" subsystem
Modified Paths:
--------------
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/Pipeline/Profile.cs
trunk/Source/StructureMap/Pipeline/ProfileManager.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/Query/EmptyConfiguration.cs
trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs
trunk/Source/StructureMap/Query/IModel.cs
trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs
trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs
trunk/Source/StructureMap/Query/Model.cs
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Query/ModelIntegrationTester.cs
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Container.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -64,7 +64,13 @@
/// <summary>
/// Provides queryable access to the configured PluginType's and Instances of this Container
/// </summary>
- public IModel Model { get { return new Model(_pipelineGraph.GetPluginTypes(this)); } }
+ public IModel Model
+ {
+ get
+ {
+ return new Model(_pipelineGraph, this);
+ }
+ }
/// <summary>
/// Creates or finds the named instance of T
Modified: trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -160,5 +160,10 @@
{
_families.Clear();
}
+
+ public void Remove(Type pluginType)
+ {
+ _families.Remove(pluginType);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -361,5 +361,12 @@
}
}
+
+ public void RemoveAll()
+ {
+ _instances.Clear();
+ _mementoList.Clear();
+ _defaultKey = null;
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/Profile.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Profile.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Pipeline/Profile.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -105,9 +105,9 @@
}
- public void Remove<T>()
+ public void Remove(Type pluginType)
{
- _instances.Remove(typeof (T));
+ _instances.Remove(pluginType);
}
public void Clear()
Modified: trunk/Source/StructureMap/Pipeline/ProfileManager.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ProfileManager.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Pipeline/ProfileManager.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -216,13 +216,9 @@
return clone;
}
- public void EjectAllInstancesOf<T>()
+ public void EjectAllInstancesOf(Type pluginType)
{
- _currentProfile.Remove<T>();
- foreach (var pair in _profiles)
- {
- pair.Value.Remove<T>();
- }
+ profiles.Each(x => x.Remove(pluginType));
}
public void RemoveInstance(Type pluginType, Instance instance)
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -188,11 +188,29 @@
public void EjectAllInstancesOf<T>()
{
- ForType(typeof (T)).EjectAllInstances();
- _profileManager.EjectAllInstancesOf<T>();
+ EjectAllInstancesOf(typeof(T));
}
+ public void EjectAllInstancesOf(Type pluginType)
+ {
+ ForType(pluginType).EjectAllInstances();
+ _profileManager.EjectAllInstancesOf(pluginType);
+ }
+ public void Remove(Func<Type, bool> filter)
+ {
+ _genericsGraph.Families.Where(x => filter(x.PluginType)).ToArray().Each(x => Remove(x.PluginType));
+ _factories.Values.Where(x => filter(x.PluginType)).ToArray().Each(x => Remove(x.PluginType));
+ }
+
+ public void Remove(Type pluginType)
+ {
+ EjectAllInstancesOf(pluginType);
+ _factories.Remove(pluginType);
+ _genericsGraph.Remove(pluginType);
+ }
+
+
public List<Instance> GetAllInstances()
{
return _factories.Values.SelectMany(x => x.AllInstances).ToList();
@@ -232,5 +250,8 @@
ForType(pluginType).RemoveInstance(instance);
_profileManager.RemoveInstance(pluginType, instance);
}
+
+
+
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/EmptyConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/EmptyConfiguration.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Query/EmptyConfiguration.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -44,5 +44,8 @@
{
}
+ public void EjectAndRemoveAll()
+ {
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -70,6 +70,9 @@
_family.RemoveInstance(instance.Instance);
}
-
+ public void EjectAndRemoveAll()
+ {
+ _family.RemoveAll();
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/IModel.cs
===================================================================
--- trunk/Source/StructureMap/Query/IModel.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Query/IModel.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -90,5 +90,32 @@
/// <param name="type"></param>
/// <returns></returns>
IPluginTypeConfiguration For(Type type);
+
+ /// <summary>
+ /// Eject all objects, configuration, and Plugin Types matching this filter
+ /// </summary>
+ /// <param name="filter"></param>
+ void EjectAndRemoveTypes(Func<Type, bool> filter);
+
+ /// <summary>
+ /// Eject all objects and configuration for any Plugin Type that matches this filter
+ /// </summary>
+ /// <param name="filter"></param>
+ void EjectAndRemovePluginTypes(Func<Type, bool> filter);
+
+ /// <summary>
+ /// Eject all objects and Instance configuration for this PluginType
+ /// </summary>
+ /// <param name="pluginType"></param>
+ void EjectAndRemove(Type pluginType);
+
+
+ /// <summary>
+ /// Get each and every configured instance that could possibly
+ /// be cast to T
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ IEnumerable<T> GetAllPossible<T>() where T : class;
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -38,6 +38,11 @@
/// <param name="instance"></param>
void EjectAndRemove(InstanceRef instance);
+ /// <summary>
+ /// Eject all instances of this PluginType from the current container,
+ /// but leaves the lifecycle behavior
+ /// </summary>
+ void EjectAndRemoveAll();
}
public static class PluginTypeConfigurationExtensions
Modified: trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -80,7 +80,12 @@
_graph.Remove(_pluginType, instance.Instance);
}
-
+ public void EjectAndRemoveAll()
+ {
+ _graph.EjectAllInstancesOf(_pluginType);
+ }
+
+
private InstanceRef toRef(Instance instance)
{
if (instance == null) return null;
Modified: trunk/Source/StructureMap/Query/Model.cs
===================================================================
--- trunk/Source/StructureMap/Query/Model.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/Query/Model.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -1,16 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using StructureMap.TypeRules;
namespace StructureMap.Query
{
public class Model : IModel
{
- private readonly IEnumerable<IPluginTypeConfiguration> _pluginTypes;
+ private PipelineGraph _graph;
+ private IContainer _container;
- internal Model(IEnumerable<IPluginTypeConfiguration> pluginTypes)
+ internal Model(PipelineGraph graph, IContainer container)
{
- _pluginTypes = pluginTypes;
+ _graph = graph;
+ _container = container;
}
#region IModel Members
@@ -35,8 +38,16 @@
return findForFamily(pluginType, f => f.Default == null ? null : f.Default.ConcreteType);
}
- public IEnumerable<IPluginTypeConfiguration> PluginTypes { get { return _pluginTypes; } }
+ private IEnumerable<IPluginTypeConfiguration> pluginTypes
+ {
+ get
+ {
+ return _graph.GetPluginTypes(_container);
+ }
+ }
+ public IEnumerable<IPluginTypeConfiguration> PluginTypes { get { return pluginTypes; } }
+
/// <summary>
/// Retrieves the configuration for the given type
/// </summary>
@@ -54,9 +65,58 @@
/// <returns></returns>
public IPluginTypeConfiguration For(Type type)
{
- return _pluginTypes.FirstOrDefault(x => x.PluginType == type) ?? new EmptyConfiguration(type);
+ return pluginTypes.FirstOrDefault(x => x.PluginType == type) ?? new EmptyConfiguration(type);
}
+ /// <summary>
+ /// Eject all objects, configuration, and Plugin Types matching this filter
+ /// </summary>
+ /// <param name="filter"></param>
+ public void EjectAndRemoveTypes(Func<Type, bool> filter)
+ {
+ // first pass hits plugin types
+ EjectAndRemovePluginTypes(filter);
+
+ // second pass to hit instances
+ pluginTypes.Each(x =>
+ {
+ x.EjectAndRemove(i => filter(i.ConcreteType));
+ });
+ }
+
+ /// <summary>
+ /// Eject all objects and configuration for any Plugin Type that matches this filter
+ /// </summary>
+ /// <param name="filter"></param>
+ public void EjectAndRemovePluginTypes(Func<Type, bool> filter)
+ {
+ _graph.Remove(filter);
+ }
+
+ /// <summary>
+ /// Eject all objects and Instance configuration for this PluginType
+ /// </summary>
+ /// <param name="pluginType"></param>
+ public void EjectAndRemove(Type pluginType)
+ {
+ _graph.Remove(pluginType);
+ }
+
+ /// <summary>
+ /// Get each and every configured instance that could possibly
+ /// be cast to T
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ public IEnumerable<T> GetAllPossible<T>() where T : class
+ {
+ Type targetType = typeof (T);
+ return AllInstances
+ .Where(x => x.ConcreteType.CanBeCastTo(targetType))
+ .Select(x => x.Get<T>())
+ .Where(x => x != null);
+ }
+
public IEnumerable<InstanceRef> InstancesOf(Type pluginType)
{
return findForFamily(pluginType, x => x.Instances, new InstanceRef[0]);
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -173,6 +173,8 @@
/// <returns></returns>
public static bool CanBeCastTo(this Type pluggedType, Type pluginType)
{
+ if (pluggedType == null) return false;
+
if (pluggedType.IsInterface || pluggedType.IsAbstract)
{
return false;
Modified: trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -208,6 +208,24 @@
}
[Test]
+ public void remove_all_clears_the_defaul_and_removes_all_plugins_instances()
+ {
+ var family = new PluginFamily(typeof(IServiceProvider));
+ var instance = new SmartInstance<DataSet>();
+
+ family.SetDefault(instance);
+
+ family.AddInstance(new NullInstance());
+ family.AddType(typeof(DataSet));
+
+ family.RemoveAll();
+
+ family.DefaultInstanceKey.ShouldBeNull();
+
+ family.InstanceCount.ShouldEqual(0);
+ }
+
+ [Test]
public void set_the_scope_to_session()
{
var family = new PluginFamily(typeof (IServiceProvider));
Modified: trunk/Source/StructureMap.Testing/Query/ModelIntegrationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Query/ModelIntegrationTester.cs 2009-12-28 02:57:22 UTC (rev 308)
+++ trunk/Source/StructureMap.Testing/Query/ModelIntegrationTester.cs 2009-12-28 04:07:20 UTC (rev 309)
@@ -32,6 +32,10 @@
});
x.For<IEngine>().Use<PushrodEngine>();
+
+ x.For<Startable1>().Singleton().Use<Startable1>();
+ x.For<Startable2>().Use<Startable2>();
+ x.For<Startable3>().Use<Startable3>();
});
}
@@ -40,10 +44,63 @@
private Container container;
[Test]
+ public void remove_types_based_on_a_filter()
+ {
+ container.GetAllInstances<Rule>().Any(x => x is ARule).ShouldBeTrue();
+ container.Model.HasImplementationsFor<IWidget>().ShouldBeTrue();
+
+ container.Model.EjectAndRemoveTypes(t => t == typeof(IWidget) || t == typeof(ARule));
+
+ container.GetAllInstances<Rule>().Any(x => x is ARule).ShouldBeFalse();
+ container.Model.HasImplementationsFor<IWidget>().ShouldBeFalse();
+ }
+
+ [Test]
+ public void remove_an_entire_closed_type()
+ {
+ container.Model.EjectAndRemove(typeof(Rule));
+ container.Model.HasImplementationsFor<Rule>().ShouldBeFalse();
+
+ container.TryGetInstance<Rule>().ShouldBeNull();
+ container.GetAllInstances<Rule>().Count.ShouldEqual(0);
+
+ }
+
+ [Test]
+ public void remove_an_entire_closed_type_with_the_filter()
+ {
+ container.Model.EjectAndRemovePluginTypes(t => t == typeof(Rule) || t == typeof(IWidget));
+
+ container.Model.HasImplementationsFor<IWidget>().ShouldBeFalse();
+ container.Model.HasImplementationsFor<Rule>().ShouldBeFalse();
+ container.Model.HasImplementationsFor<IEngine>().ShouldBeTrue();
+ }
+
+ [Test]
+ public void remove_an_open_type()
+ {
+ container.Model.EjectAndRemove(typeof(IService<>));
+
+ container.Model.HasImplementationsFor(typeof (IService<>));
+
+ container.TryGetInstance<IService<string>>().ShouldBeNull();
+ }
+
+ [Test]
+ public void remove_an_open_type_with_a_filter()
+ {
+ container.Model.EjectAndRemovePluginTypes(t => t == typeof(IService<>));
+
+ container.Model.HasImplementationsFor(typeof(IService<>));
+
+ container.TryGetInstance<IService<string>>().ShouldBeNull();
+ }
+
+ [Test]
public void can_iterate_through_families_including_both_generics_and_normal()
{
// +1 for "IContainer" itself
- container.Model.PluginTypes.Count().ShouldEqual(5);
+ container.Model.PluginTypes.Count().ShouldEqual(8);
container.Model.PluginTypes.Each(x => Debug.WriteLine(x.PluginType.FullName));
}
@@ -82,7 +139,7 @@
[Test]
public void get_all_instances_from_the_top()
{
- container.Model.AllInstances.Count().ShouldEqual(8);
+ container.Model.AllInstances.Count().ShouldEqual(11);
}
[Test]
@@ -105,5 +162,42 @@
{
container.Model.For<ISomething>().HasImplementations().ShouldBeFalse();
}
+
+ [Test]
+ public void get_all_possibles()
+ {
+ // Startable1 is a singleton
+
+ var startable1 = container.GetInstance<Startable1>();
+ startable1.WasStarted.ShouldBeFalse();
+
+ container.Model.GetAllPossible<IStartable>()
+ .ToArray()
+ .Each(x => x.Start())
+ .Each(x => x.WasStarted.ShouldBeTrue());
+
+ startable1.WasStarted.ShouldBeTrue();
+ }
}
+
+
+ public interface IStartable
+ {
+ void Start();
+ bool WasStarted { get; }
+ }
+
+ public class Startable : IStartable
+ {
+ public void Start()
+ {
+ WasStarted = true;
+ }
+
+ public bool WasStarted { get; private set; }
+ }
+
+ public class Startable1 : Startable{}
+ public class Startable2 : Startable{}
+ public class Startable3 : Startable{}
}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-28 02:57:31
|
Revision: 308
http://structuremap.svn.sourceforge.net/structuremap/?rev=308&view=rev
Author: jeremydmiller
Date: 2009-12-28 02:57:22 +0000 (Mon, 28 Dec 2009)
Log Message:
-----------
enhanced the Model a bit to start being able to remove types. Ripped out that old silly Machine specific default crap.
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/IGraphBuilder.cs
trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs
trunk/Source/StructureMap/Configuration/ProfileBuilder.cs
trunk/Source/StructureMap/Configuration/XmlConstants.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/IInstanceFactory.cs
trunk/Source/StructureMap/InstanceFactory.cs
trunk/Source/StructureMap/Pipeline/Profile.cs
trunk/Source/StructureMap/Pipeline/ProfileManager.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/Query/EmptyConfiguration.cs
trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs
trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs
trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs
trunk/Source/StructureMap/Query/InstanceRef.cs
trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs
trunk/Source/StructureMap.Testing/Configuration/ProfileBuilderTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileManagerTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileTester.cs
trunk/Source/StructureMap.Testing/Query/GenericFamilyConfigurationTester.cs
trunk/Source/StructureMap.Testing/Query/InstanceFactoryTypeConfigurationTester.cs
Modified: trunk/Source/StructureMap/Configuration/IGraphBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/IGraphBuilder.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Configuration/IGraphBuilder.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -7,8 +7,6 @@
{
void AddProfile(string profileName);
void OverrideProfile(TypePath typePath, string instanceKey);
- void AddMachine(string machineName, string profileName);
- void OverrideMachine(TypePath typePath, string instanceKey);
void SetDefaultProfileName(string profileName);
}
Modified: trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -25,6 +25,11 @@
_structureMapNode.ForAttributeValue(DEFAULT_PROFILE,
profileName => _profileBuilder.SetDefaultProfileName(profileName));
+ readProfileNodes();
+ }
+
+ private void readProfileNodes()
+ {
forEachNode(PROFILE_NODE).Do(element =>
{
string profileName = element.GetAttribute(NAME);
@@ -34,19 +39,6 @@
(fullName, defaultKey) =>
_profileBuilder.OverrideProfile(new TypePath(fullName), defaultKey), profileName);
});
-
-
- forEachNode(MACHINE_NODE).Do(element =>
- {
- string machineName = element.GetAttribute(NAME);
- string profileName = element.GetAttribute(PROFILE_NODE);
-
- _profileBuilder.AddMachine(machineName, profileName);
-
- writeOverrides(element,
- (fullName, defaultKey) =>
- _profileBuilder.OverrideMachine(new TypePath(fullName), defaultKey), machineName);
- });
}
Modified: trunk/Source/StructureMap/Configuration/ProfileBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/ProfileBuilder.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Configuration/ProfileBuilder.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -6,28 +6,17 @@
{
public class ProfileBuilder : IProfileBuilder
{
- private static string _overriden_machine_name;
-
- private readonly string _machineName;
private readonly PluginGraph _pluginGraph;
private readonly ProfileManager _profileManager;
private string _lastProfile;
- private bool _useMachineOverrides;
- public ProfileBuilder(PluginGraph pluginGraph, string machineName)
+ public ProfileBuilder(PluginGraph pluginGraph)
{
_pluginGraph = pluginGraph;
_profileManager = pluginGraph.ProfileManager;
- _machineName = machineName;
}
-
- public ProfileBuilder(PluginGraph pluginGraph)
- : this(pluginGraph, GetMachineName())
- {
- }
-
#region IProfileBuilder Members
public void AddProfile(string profileName)
@@ -44,32 +33,6 @@
});
}
- public void AddMachine(string machineName, string profileName)
- {
- _useMachineOverrides = machineName == _machineName;
-
- if (_useMachineOverrides)
- {
- _profileManager.DefaultMachineProfileName = profileName;
- }
- }
-
- public void OverrideMachine(TypePath typePath, string instanceKey)
- {
- if (!_useMachineOverrides)
- {
- return;
- }
-
- _pluginGraph.Log.WithType(typePath,
- "trying to configure a Machine Override",
- pluginType =>
- {
- var instance = new ReferencedInstance(instanceKey);
- _profileManager.SetMachineDefault(pluginType, instance);
- });
- }
-
public void SetDefaultProfileName(string profileName)
{
_profileManager.DefaultProfileName = profileName;
@@ -77,33 +40,5 @@
#endregion
- public static void OverrideMachineName(string machineName)
- {
- _overriden_machine_name = machineName;
- }
-
- public static void ResetMachineName()
- {
- _overriden_machine_name = string.Empty;
- }
-
- public static string GetMachineName()
- {
- if (!string.IsNullOrEmpty(_overriden_machine_name))
- {
- return _overriden_machine_name;
- }
-
- string machineName = string.Empty;
- try
- {
- machineName = Environment.MachineName.ToUpper();
- }
- finally
- {
- }
-
- return machineName;
- }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/XmlConstants.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/XmlConstants.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Configuration/XmlConstants.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -18,7 +18,6 @@
public const string INSTANCE_NODE = "Instance";
public const string INTERCEPTORS_NODE = "Interceptors";
public const string KEY_ATTRIBUTE = "Key";
- public const string MACHINE_NODE = "Machine";
public const string MEMENTO_SOURCE_NODE = "Source";
public const string MEMENTO_STYLE = "MementoStyle";
public const string NAME = "Name";
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using StructureMap.Pipeline;
+using StructureMap.Query;
using StructureMap.TypeRules;
using StructureMap.Util;
@@ -350,5 +351,15 @@
public string DefaultInstanceKey { get { return _defaultKey; } set { _defaultKey = value ?? string.Empty; } }
#endregion
+
+ public void RemoveInstance(Instance instance)
+ {
+ _instances.Remove(instance.Name);
+ if (_defaultKey == instance.Name)
+ {
+ _defaultKey = null;
+ }
+
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/IInstanceFactory.cs
===================================================================
--- trunk/Source/StructureMap/IInstanceFactory.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/IInstanceFactory.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -27,5 +27,6 @@
void EjectAllInstances();
IInstanceFactory Clone();
+ void RemoveInstance(Instance instance);
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/InstanceFactory.cs
===================================================================
--- trunk/Source/StructureMap/InstanceFactory.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/InstanceFactory.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -133,6 +133,11 @@
return factory;
}
+ public void RemoveInstance(Instance instance)
+ {
+ _instances.Remove(instance.Name);
+ }
+
#endregion
public void Dispose()
Modified: trunk/Source/StructureMap/Pipeline/Profile.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Profile.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Pipeline/Profile.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -114,5 +114,15 @@
{
_instances.Clear();
}
+
+ public void Remove(Type pluginType, Instance instance)
+ {
+ if (!_instances.ContainsKey(pluginType)) return;
+
+ if (_instances[pluginType] == instance)
+ {
+ _instances.Remove(pluginType);
+ }
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ProfileManager.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ProfileManager.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Pipeline/ProfileManager.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -9,14 +9,10 @@
{
private readonly Profile _default = new Profile("");
private readonly object _locker = new object();
- private readonly Profile _machineProfile = new Profile("MACHINE");
private readonly Dictionary<string, Profile> _profiles = new Dictionary<string, Profile>();
private Profile _currentProfile = new Profile(string.Empty);
- private string _defaultMachineProfileName;
private string _defaultProfileName;
- public string DefaultMachineProfileName { get { return _defaultMachineProfileName; } set { _defaultMachineProfileName = value; } }
-
public string DefaultProfileName { get { return _defaultProfileName; } set { _defaultProfileName = value; } }
public string CurrentProfile
@@ -38,18 +34,25 @@
}
}
- public void Dispose()
+ private IEnumerable<Profile> profiles
{
- _currentProfile.Clear();
- _machineProfile.Clear();
- _default.Clear();
-
- foreach (var profile in _profiles)
+ get
{
- profile.Value.Clear();
+ yield return _currentProfile;
+ yield return _default;
+
+ foreach (Profile profile in _profiles.Values)
+ {
+ yield return profile;
+ }
}
}
+ public void Dispose()
+ {
+ profiles.Each(p => p.Clear());
+ }
+
private void setProfile(Profile profile)
{
lock (_locker)
@@ -83,7 +86,7 @@
{
Profile profile = getProfile(profileName);
profile.SetDefault(pluginType, instance);
- if (profileName == _defaultProfileName || profileName == _defaultMachineProfileName)
+ if (profileName == _defaultProfileName)
{
_default.FillTypeInto(pluginType, instance);
_currentProfile.FillTypeInto(pluginType, instance);
@@ -101,16 +104,6 @@
return _profiles[profileName];
}
- public Instance GetMachineDefault(Type pluginType)
- {
- return _machineProfile.GetDefault(pluginType);
- }
-
- public void SetMachineDefault(Type pluginType, Instance instance)
- {
- _machineProfile.SetDefault(pluginType, instance);
- }
-
public void SetDefault(Type pluginType, Instance instance)
{
_currentProfile.SetDefault(pluginType, instance);
@@ -128,8 +121,6 @@
setProfileDefaults(graph.Log);
- processMachineDefaults(graph);
-
findFamilyDefaults(graph);
backfillProfiles();
@@ -171,28 +162,13 @@
private void findMasterInstances(PluginGraph graph)
{
- _machineProfile.FindMasterInstances(graph);
foreach (var pair in _profiles)
{
pair.Value.FindMasterInstances(graph);
}
}
- private void processMachineDefaults(PluginGraph graph)
- {
- _machineProfile.FillAllTypesInto(_default);
- if (!string.IsNullOrEmpty(_defaultMachineProfileName))
- {
- if (!_profiles.ContainsKey(_defaultMachineProfileName))
- {
- graph.Log.RegisterError(280, _defaultMachineProfileName);
- }
- Profile profile = getProfile(_defaultMachineProfileName);
- profile.FillAllTypesInto(_default);
- }
- }
-
public void CopyDefaults(Type basicType, Type templatedType, PluginFamily family)
{
_default.CopyDefault(basicType, templatedType, family);
@@ -232,7 +208,6 @@
{
var clone = new ProfileManager
{
- DefaultMachineProfileName = DefaultMachineProfileName,
DefaultProfileName = DefaultProfileName
};
@@ -249,5 +224,10 @@
pair.Value.Remove<T>();
}
}
+
+ public void RemoveInstance(Type pluginType, Instance instance)
+ {
+ profiles.Each(x => x.Remove(pluginType, instance));
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -30,18 +30,13 @@
_profileManager = graph.ProfileManager;
_log = graph.Log;
- foreach (PluginFamily family in graph.PluginFamilies)
+
+ graph.PluginFamilies.Where(x => x.IsGenericTemplate).Each(_genericsGraph.AddFamily);
+ graph.PluginFamilies.Where(x => !x.IsGenericTemplate).Each(family =>
{
- if (family.IsGenericTemplate)
- {
- _genericsGraph.AddFamily(family);
- }
- else
- {
- var factory = new InstanceFactory(family);
- _factories.Add(family.PluginType, factory);
- }
- }
+ var factory = new InstanceFactory(family);
+ _factories.Add(family.PluginType, factory);
+ });
}
private PipelineGraph(ProfileManager profileManager, GenericsPluginGraph genericsGraph, GraphLog log)
@@ -231,5 +226,11 @@
? _transientCache
: lifecycle.FindCache();
}
+
+ public void Remove(Type pluginType, Instance instance)
+ {
+ ForType(pluginType).RemoveInstance(instance);
+ _profileManager.RemoveInstance(pluginType, instance);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/EmptyConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/EmptyConfiguration.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Query/EmptyConfiguration.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -39,5 +39,10 @@
{
return false;
}
+
+ public void EjectAndRemove(InstanceRef instance)
+ {
+ }
+
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -53,7 +53,7 @@
/// All of the <see cref="InstanceRef">InstanceRef</see>'s registered
/// for this PluginType
/// </summary>
- public IEnumerable<InstanceRef> Instances { get { return _family.Instances.Select(x => new InstanceRef(x, this)); } }
+ public IEnumerable<InstanceRef> Instances { get { return _family.Instances.Select(x => new InstanceRef(x, this)).ToArray(); } }
/// <summary>
/// Simply query to see if there are any implementations registered
@@ -63,5 +63,13 @@
{
return _family.InstanceCount > 0;
}
+
+ public void EjectAndRemove(InstanceRef instance)
+ {
+ if (instance == null) return;
+ _family.RemoveInstance(instance.Instance);
+ }
+
+
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Linq;
namespace StructureMap.Query
{
@@ -29,5 +30,42 @@
/// </summary>
/// <returns></returns>
bool HasImplementations();
+
+ /// <summary>
+ /// Ejects any instances of this instance from the current container
+ /// and permanently removes the instance from the container configuration
+ /// </summary>
+ /// <param name="instance"></param>
+ void EjectAndRemove(InstanceRef instance);
+
}
+
+ public static class PluginTypeConfigurationExtensions
+ {
+ public static InstanceRef Find(this IPluginTypeConfiguration configuration, string instanceName)
+ {
+ return configuration.Instances.FirstOrDefault(x => x.Name == instanceName);
+ }
+
+ /// <summary>
+ /// Ejects and removes all objects and the configuration for the named instance from the
+ /// container
+ /// </summary>
+ /// <param name="configuration"></param>
+ /// <param name="instanceName"></param>
+ public static void EjectAndRemove(this IPluginTypeConfiguration configuration, string instanceName)
+ {
+ configuration.EjectAndRemove(configuration.Find(instanceName));
+ }
+
+ /// <summary>
+ /// Ejects and removes all objects and configuration for the instances that match the filter
+ /// </summary>
+ /// <param name="configuration"></param>
+ /// <param name="filter"></param>
+ public static void EjectAndRemove(this IPluginTypeConfiguration configuration, Func<InstanceRef, bool> filter)
+ {
+ configuration.Instances.Where(filter).Each(configuration.EjectAndRemove);
+ }
+ }
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -63,7 +63,7 @@
/// All of the <see cref="InstanceRef">InstanceRef</see>'s registered
/// for this PluginType
/// </summary>
- public IEnumerable<InstanceRef> Instances { get { return factory.AllInstances.Select(x => toRef(x)); } }
+ public IEnumerable<InstanceRef> Instances { get { return factory.AllInstances.Select(x => toRef(x)).ToArray(); } }
/// <summary>
/// Simply query to see if there are any implementations registered
@@ -74,6 +74,13 @@
return factory.AllInstances.Any();
}
+ public void EjectAndRemove(InstanceRef instance)
+ {
+ instance.EjectObject();
+ _graph.Remove(_pluginType, instance.Instance);
+ }
+
+
private InstanceRef toRef(Instance instance)
{
if (instance == null) return null;
Modified: trunk/Source/StructureMap/Query/InstanceRef.cs
===================================================================
--- trunk/Source/StructureMap/Query/InstanceRef.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap/Query/InstanceRef.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -14,6 +14,7 @@
_family = family;
}
+ internal Instance Instance { get { return _instance; } }
public string Name { get { return _instance.Name; } }
Modified: trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -53,7 +53,6 @@
public void TearDown()
{
- ProfileBuilder.ResetMachineName();
}
[Test]
@@ -75,26 +74,6 @@
}
[Test]
- public void GettingTheRightInstanceKeyWhenUsingAMAchineOverrideInCombinationWithProfile()
- {
- ProfileBuilder.OverrideMachineName("GREEN-BOX");
- var manager = new Container(graph);
-
- var widget = (ColorWidget) manager.GetInstance<IWidget>();
- Assert.AreEqual("Green", widget.Color);
- }
-
- [Test]
- public void GotTheInstanceForTheMachineOverride()
- {
- ProfileBuilder.OverrideMachineName("ORANGE-BOX");
- var manager = new Container(graph);
-
- var widget = (ColorWidget) manager.GetInstance<IWidget>();
- Assert.AreEqual("Orange", widget.Color);
- }
-
- [Test]
public void HasADefaultInstanceKey()
{
var manager = new Container(graph);
@@ -118,28 +97,7 @@
Assert.AreEqual("Blue", widget.Color);
}
-
[Test]
- public void InlineMachine1()
- {
- ProfileBuilder.OverrideMachineName("ORANGE-BOX");
- var manager = new Container(graph);
-
- var widget = (ColorWidget) manager.GetInstance(typeof (IWidget));
- Assert.AreEqual("Orange", widget.Color);
- }
-
- [Test]
- public void InlineMachine2()
- {
- ProfileBuilder.OverrideMachineName("GREEN-BOX");
- var manager = new Container(graph);
-
- var widget = (ColorWidget) manager.GetInstance(typeof (IWidget));
- Assert.AreEqual("Green", widget.Color);
- }
-
- [Test]
public void SetTheProfile()
{
var manager = new Container(graph);
Modified: trunk/Source/StructureMap.Testing/Configuration/ProfileBuilderTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/ProfileBuilderTester.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap.Testing/Configuration/ProfileBuilderTester.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -14,44 +14,15 @@
public void SetUp()
{
_graph = new PluginGraph();
- _builder = new ProfileBuilder(_graph, THE_MACHINE_NAME);
+ _builder = new ProfileBuilder(_graph);
}
#endregion
private PluginGraph _graph;
private ProfileBuilder _builder;
- private const string THE_MACHINE_NAME = "TheMachineName";
[Test]
- public void Do_not_register_a_machine_override_if_it_is_NOT_the_matching_machine()
- {
- _builder.AddMachine("Some other machine", "TheProfile");
- _builder.OverrideMachine(new TypePath(GetType()), "Purple");
-
- Assert.IsNull(_graph.ProfileManager.GetMachineDefault(GetType()));
- }
-
- [Test]
- public void Ignore_any_information_from_a_different_machine()
- {
- _builder.AddMachine("DifferentMachine", "TheProfile");
- Assert.IsTrue(string.IsNullOrEmpty(_graph.ProfileManager.DefaultMachineProfileName));
- }
-
- [Test]
- public void Log_131_if_trying_to_register_override_for_a_machine_when_the_PluginType_cannot_be_found()
- {
- _builder.AddMachine(THE_MACHINE_NAME, "TheProfile");
-
- _graph.Log.AssertHasNoError(131);
-
- _builder.OverrideMachine(new TypePath("not a real type"), "Purple");
-
- _graph.Log.AssertHasError(131);
- }
-
- [Test]
public void Log_131_if_trying_to_register_override_for_a_profile_when_the_PluginType_cannot_be_found()
{
_builder.AddProfile("TheProfile");
@@ -80,16 +51,6 @@
}
[Test]
- public void Register_a_machine_override_if_it_is_the_matching_machine()
- {
- _builder.AddMachine(THE_MACHINE_NAME, "TheProfile");
- _builder.OverrideMachine(new TypePath(GetType()), "Purple");
-
- var instance = new ReferencedInstance("Purple");
- Assert.AreEqual(instance, _graph.ProfileManager.GetMachineDefault(GetType()));
- }
-
- [Test]
public void SetDefaultProfileName()
{
string theProfileName = "some profile name";
@@ -99,12 +60,6 @@
}
[Test]
- public void smoke_test_get_machine_name()
- {
- ProfileBuilder.GetMachineName().ShouldNotBeEmpty();
- }
-
- [Test]
public void Throw_280_if_requesting_an_invalid_profile()
{
try
@@ -120,11 +75,5 @@
}
}
- [Test]
- public void Use_the_machine_profile_name_if_the_machine_name_matches()
- {
- _builder.AddMachine(THE_MACHINE_NAME, "TheProfile");
- Assert.AreEqual("TheProfile", _graph.ProfileManager.DefaultMachineProfileName);
- }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Pipeline/ProfileManagerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/ProfileManagerTester.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap.Testing/Pipeline/ProfileManagerTester.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -38,14 +38,7 @@
family.AddInstance(new ObjectInstance(0).WithName(name));
}
- private void addDefaultToMachine<T>(string name)
- {
- ObjectInstance instance = new ObjectInstance(0).WithName(name);
- PluginFamily family = _pluginGraph.FindFamily(typeof (T));
- family.AddInstance(instance);
- _manager.SetMachineDefault(typeof (T), new ReferencedInstance(name));
- }
private void assertNoDefaultForType<T>()
{
@@ -85,59 +78,6 @@
[Test]
- public void DefaultMachineProfileNotSet_and_pickUp_default_from_family_machine()
- {
- addDefaultToProfile<ISomething>("Machine", "Red");
- addDefaultToPluginFamily<ISomething>("Blue");
- _manager.DefaultMachineProfileName = null;
-
- seal();
-
- assertDefaultInstanceNameIs<ISomething>("Blue");
- }
-
- [Test]
- public void Got_machine_default_machine_profile_and_family_default_the_machine_wins()
- {
- addDefaultToProfile<ISomething>("MachineProfile", "MachineProfile");
- addDefaultToPluginFamily<ISomething>("Family");
- addDefaultToMachine<ISomething>("Machine");
- _manager.DefaultMachineProfileName = "MachineProfile";
-
- seal();
-
- assertDefaultInstanceNameIs<ISomething>("Machine");
- }
-
-
- [Test]
- public void Got_profile_and_family_and_machine_and_machine_profile_so_profile_wins()
- {
- addDefaultToProfile<ISomething>("TheProfile", "Profile");
- addDefaultToProfile<ISomething>("TheMachineProfile", "MachineProfile");
- addDefaultToPluginFamily<ISomething>("Family");
- addDefaultToMachine<ISomething>("Machine");
- _manager.DefaultProfileName = "TheProfile";
- _manager.DefaultMachineProfileName = "TheMachineProfile";
-
- seal();
-
- assertDefaultInstanceNameIs<ISomething>("Profile");
- }
-
- [Test]
- public void Got_profile_and_family_and_machine_so_profile_wins()
- {
- addDefaultToProfile<ISomething>("TheProfile", "Profile");
- addDefaultToPluginFamily<ISomething>("Family");
- addDefaultToMachine<ISomething>("Machine");
- _manager.DefaultProfileName = "TheProfile";
- seal();
-
- assertDefaultInstanceNameIs<ISomething>("Profile");
- }
-
- [Test]
public void Got_profile_and_family_so_profile_wins()
{
addDefaultToProfile<ISomething>("TheProfile", "Profile");
@@ -158,39 +98,8 @@
assertDefaultInstanceNameIs<ISomething>("Profile");
}
- [Test]
- public void Have_a_machine_default_and_a_base_default_the_machine_wins()
- {
- addDefaultToPluginFamily<ISomething>("Red");
- addDefaultToMachine<ISomething>("Blue");
- seal();
-
- assertDefaultInstanceNameIs<ISomething>("Blue");
- }
-
[Test]
- public void Have_a_machine_default_but_not_any_other_default_for_a_type()
- {
- addDefaultToMachine<ISomething>("Blue");
- seal();
-
- assertDefaultInstanceNameIs<ISomething>("Blue");
- }
-
- [Test]
- public void Have_machine_profile_and_default_from_family_machine_profile_wins()
- {
- addDefaultToProfile<ISomething>("Machine", "MachineProfile");
- addDefaultToPluginFamily<ISomething>("Family");
- _manager.DefaultMachineProfileName = "Machine";
-
- seal();
-
- assertDefaultInstanceNameIs<ISomething>("MachineProfile");
- }
-
- [Test]
public void If_the_profile_is_set_and_there_is_a_default_in_that_profile_use_the_profile_default()
{
addDefaultToProfile<ISomething>("TheProfile", "Profile");
@@ -215,18 +124,6 @@
}
[Test]
- public void Log_280_if_the_machine_default_profile_cannot_be_found()
- {
- var manager = new ProfileManager();
- manager.DefaultMachineProfileName = "something that doesn't exist";
-
- var graph = new PluginGraph();
- manager.Seal(graph);
-
- graph.Log.AssertHasError(280);
- }
-
- [Test]
public void Only_programmatic_override_so_use_the_programmatic_override()
{
_manager.SetDefault(typeof (ISomething), new ConfiguredInstance(typeof (SomethingOne)).WithName("Red"));
Modified: trunk/Source/StructureMap.Testing/Pipeline/ProfileTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/ProfileTester.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap.Testing/Pipeline/ProfileTester.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -78,6 +78,40 @@
}
[Test]
+ public void remove_if_the_instance_does_not_match()
+ {
+ var profile = new Profile("something");
+ var instance = new ConfiguredInstance(typeof(SomethingOne)).WithName("Red");
+ profile.SetDefault(typeof(ISomething), instance);
+
+ profile.Remove(typeof(ISomething), new NullInstance());
+
+ profile.GetDefault(typeof (ISomething)).ShouldBeTheSameAs(instance);
+ }
+
+ [Test]
+ public void remove_if_the_instance_does_match()
+ {
+ var profile = new Profile("something");
+ var instance = new ConfiguredInstance(typeof(SomethingOne)).WithName("Red");
+ profile.SetDefault(typeof(ISomething), instance);
+
+ profile.Remove(typeof(ISomething), instance);
+
+ profile.GetDefault(typeof(ISomething)).ShouldBeNull();
+ }
+
+ [Test]
+ public void do_not_blow_up_if_the_profile_does_not_have_the_plugin_type_being_removed()
+ {
+ var profile = new Profile("something");
+
+ var instance = new ConfiguredInstance(typeof(SomethingOne)).WithName("Red");
+
+ profile.Remove(typeof(ISomething), instance);
+ }
+
+ [Test]
public void A_call_to_fill_sets_the_default_for_a_plugin_type_if_no_previous_default_is_known()
{
var profile = new Profile("something");
Modified: trunk/Source/StructureMap.Testing/Query/GenericFamilyConfigurationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Query/GenericFamilyConfigurationTester.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap.Testing/Query/GenericFamilyConfigurationTester.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -26,6 +26,37 @@
private GenericFamilyConfiguration configuration;
[Test]
+ public void eject_and_remove_an_instance()
+ {
+ var instance = new ConfiguredInstance(typeof(Service<>));
+ family.AddInstance(instance);
+ family.AddInstance(new ConfiguredInstance(typeof(Service2<>)));
+
+ var iRef = configuration.Instances.FirstOrDefault(x => x.Name == instance.Name);
+
+ configuration.EjectAndRemove(iRef);
+
+ family.InstanceCount.ShouldEqual(1);
+ configuration.Instances.Count().ShouldEqual(1);
+
+ configuration.Instances.Any(x => x.Name == instance.Name).ShouldBeFalse();
+ }
+
+ [Test]
+ public void eject_and_remove_the_default_value()
+ {
+ var instance = new ConfiguredInstance(typeof(Service<>));
+ family.SetDefault(instance);
+ family.AddInstance(new ConfiguredInstance(typeof(Service2<>)));
+
+ var iRef = configuration.Instances.FirstOrDefault(x => x.Name == instance.Name);
+
+ configuration.EjectAndRemove(iRef);
+
+ family.GetDefaultInstance().ShouldBeNull();
+ }
+
+ [Test]
public void build_should_return_null()
{
configuration.As<IFamily>().Build(null).ShouldBeNull();
Modified: trunk/Source/StructureMap.Testing/Query/InstanceFactoryTypeConfigurationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Query/InstanceFactoryTypeConfigurationTester.cs 2009-12-28 01:43:19 UTC (rev 307)
+++ trunk/Source/StructureMap.Testing/Query/InstanceFactoryTypeConfigurationTester.cs 2009-12-28 02:57:22 UTC (rev 308)
@@ -1,5 +1,6 @@
using System.Linq;
using NUnit.Framework;
+using StructureMap.Query;
using StructureMap.Testing.Configuration.DSL;
using StructureMap.Testing.Graph;
using StructureMap.Testing.Widget;
@@ -36,6 +37,46 @@
private Container container;
[Test]
+ public void eject_and_remove_an_instance_should_remove_it_from_the_model()
+ {
+ var iRef = container.Model.For<Rule>().Instances.First();
+ container.Model.For<Rule>().EjectAndRemove(iRef);
+
+ container.Model.For<Rule>().Instances.Select(x => x.ConcreteType)
+ .ShouldHaveTheSameElementsAs(typeof(ARule), typeof(ColorRule));
+
+ container.GetAllInstances<Rule>().Select(x => x.GetType())
+ .ShouldHaveTheSameElementsAs(typeof(ARule), typeof(ColorRule));
+ }
+
+
+ [Test]
+ public void eject_and_remove_an_instance_should_remove_it_from_the_model_by_name()
+ {
+ var iRef = container.Model.For<Rule>().Instances.First();
+ container.Model.For<Rule>().EjectAndRemove(iRef.Name);
+
+ container.Model.For<Rule>().Instances.Select(x => x.ConcreteType)
+ .ShouldHaveTheSameElementsAs(typeof(ARule), typeof(ColorRule));
+
+ container.GetAllInstances<Rule>().Select(x => x.GetType())
+ .ShouldHaveTheSameElementsAs(typeof(ARule), typeof(ColorRule));
+ }
+
+ [Test]
+ public void eject_and_remove_an_instance_by_filter_should_remove_it_from_the_model()
+ {
+ var iRef = container.Model.For<Rule>().Instances.First();
+ container.Model.For<Rule>().EjectAndRemove(x => x.Name == iRef.Name);
+
+ container.Model.For<Rule>().Instances.Select(x => x.ConcreteType)
+ .ShouldHaveTheSameElementsAs(typeof(ARule), typeof(ColorRule));
+
+ container.GetAllInstances<Rule>().Select(x => x.GetType())
+ .ShouldHaveTheSameElementsAs(typeof(ARule), typeof(ColorRule));
+ }
+
+ [Test]
public void build_when_the_cast_does_not_work()
{
container.Model.For<IWidget>().Default.Get<Rule>().ShouldBeNull();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-28 01:43:29
|
Revision: 307
http://structuremap.svn.sourceforge.net/structuremap/?rev=307&view=rev
Author: jeremydmiller
Date: 2009-12-28 01:43:19 +0000 (Mon, 28 Dec 2009)
Log Message:
-----------
code cleanup after all the work on the Model rewrite
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs
trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs
trunk/Source/StructureMap/Graph/AssemblyScanner.cs
trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs
trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
trunk/Source/StructureMap/Graph/ImplementationMap.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/Graph/PluginGraph.cs
trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs
trunk/Source/StructureMap/Pipeline/HttpLifecycleBase.cs
trunk/Source/StructureMap/Pipeline/HybridLifecycle.cs
trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs
trunk/Source/StructureMap/Pipeline/ILifecycle.cs
trunk/Source/StructureMap/Pipeline/MainObjectCache.cs
trunk/Source/StructureMap/Pipeline/SingletonLifecycle.cs
trunk/Source/StructureMap/Pipeline/ThreadLocalStorageLifecycle.cs
trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/Query/EmptyConfiguration.cs
trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs
trunk/Source/StructureMap/Query/IModel.cs
trunk/Source/StructureMap/Query/Model.cs
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs
trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs
trunk/Source/StructureMap.Testing/Attributes/PluginFamilyAttributeTester.cs
trunk/Source/StructureMap.Testing/AutoMocking/AutoMockerTester.cs
trunk/Source/StructureMap.Testing/AutoMocking/MoqAutoMockerTester.cs
trunk/Source/StructureMap.Testing/AutoMocking/MoqFactoryTester.cs
trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs
trunk/Source/StructureMap.Testing/AutoMocking/RhinoMockRepositoryProxyTester.cs
trunk/Source/StructureMap.Testing/AutoWiringExamples.cs
trunk/Source/StructureMap.Testing/BidirectionalDependencies.cs
trunk/Source/StructureMap.Testing/Bugs/AddValueDirectlyWithGenericUsage.cs
trunk/Source/StructureMap.Testing/Bugs/BuildUpBug.cs
trunk/Source/StructureMap.Testing/Bugs/FillAllPropertiesShouldWorkForAlreadyConfiguredPluginsBug.cs
trunk/Source/StructureMap.Testing/Bugs/HttpSessionNullRefBug.cs
trunk/Source/StructureMap.Testing/Bugs/IDictionaryAndXmlBugTester.cs
trunk/Source/StructureMap.Testing/Bugs/InjectByFuncWithNoPublicConstructors.cs
trunk/Source/StructureMap.Testing/Bugs/LambdaCreatesNullBugTester.cs
trunk/Source/StructureMap.Testing/Bugs/MixedConfigureAndInitializeMissingInstanceProblem.cs
trunk/Source/StructureMap.Testing/Bugs/ScanIndexerBugTester.cs
trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs
trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeOnOpenGenericsTester.cs
trunk/Source/StructureMap.Testing/Bugs/StaticPropertyCausesJITExceptionTester.cs
trunk/Source/StructureMap.Testing/Bugs/TryGetInstanceWithOpenGenericsBugTester.cs
trunk/Source/StructureMap.Testing/BuildSessionTester.cs
trunk/Source/StructureMap.Testing/BuildUpIntegratedTester.cs
trunk/Source/StructureMap.Testing/BuildUpTester.cs
trunk/Source/StructureMap.Testing/ConcreteClassCreationTester.cs
trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserBuilderTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/InterceptAllInstancesOfPluginTypeTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/InterceptorTesting.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/ProgrammaticConstructorSelectionTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs
trunk/Source/StructureMap.Testing/Configuration/NormalGraphBuilderTester.cs
trunk/Source/StructureMap.Testing/Configuration/PrimitiveArrayReaderTester.cs
trunk/Source/StructureMap.Testing/Configuration/ProfileBuilderTester.cs
trunk/Source/StructureMap.Testing/Construction/BuilderCompilerTester.cs
trunk/Source/StructureMap.Testing/Construction/ConstructorFunctionBuilderTester.cs
trunk/Source/StructureMap.Testing/Construction/SetterBuilderTester.cs
trunk/Source/StructureMap.Testing/Construction/StubArguments.cs
trunk/Source/StructureMap.Testing/Debugging.cs
trunk/Source/StructureMap.Testing/Examples.cs
trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs
trunk/Source/StructureMap.Testing/Graph/DefaultConventionScanningTester.cs
trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Graph/SingleImplementationScannerTester.cs
trunk/Source/StructureMap.Testing/ModelQueryTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ContainerDisposalTester.cs
trunk/Source/StructureMap.Testing/Pipeline/MainObjectCacheTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ObjectBuilderTester.cs
trunk/Source/StructureMap.Testing/Query/GenericFamilyConfigurationTester.cs
trunk/Source/StructureMap.Testing/Query/InstanceFactoryTypeConfigurationTester.cs
trunk/Source/StructureMap.Testing/Query/InstanceRefTester.cs
trunk/Source/StructureMap.Testing/Query/ModelIntegrationTester.cs
trunk/Source/StructureMap.Testing/TypeExtensionsTester.cs
trunk/Source/StructureMap.Testing.Widget/AssemblyInfo.cs
trunk/Source/StructureMap.Testing.Widget/BuilderSamples.cs
trunk/Source/StructureMap.Testing.Widget/Decision.cs
trunk/Source/StructureMap.Testing.Widget/TypeSerializerTemplate.cs
trunk/Source/StructureMap.Testing.Widget2/AssemblyInfo.cs
trunk/Source/StructureMap.Testing.Widget2/DefaultRule.cs
trunk/Source/StructureMap.Testing.Widget2/EnumerationCheck.cs
trunk/Source/StructureMap.Testing.Widget3/AssemblyInfo.cs
trunk/Source/StructureMap.Testing.Widget4/AssemblyInfo.cs
trunk/Source/StructureMap.Testing.Widget4/Strategy.cs
trunk/Source/StructureMap.Testing.Widget5/AssemblyInfo.cs
trunk/Source/StructureMap.Testing.Widget5/BadSetterClass.cs
trunk/Source/StructureMap.Testing.Widget5/LinkGridColumn.cs
trunk/Source/TableOfContentsBuilder/Properties/AssemblyInfo.cs
trunk/Source/TableOfContentsBuilder/XmlExtensions.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -301,29 +301,7 @@
_actions.Add(registry.ConfigurePluginGraph);
}
- protected void registerAction(Action action)
- {
- _basicActions.Add(action);
- }
- internal void addExpression(Action<PluginGraph> alteration)
- {
- _actions.Add(alteration);
- }
-
- internal void ConfigurePluginGraph(PluginGraph graph)
- {
- if (graph.Registries.Contains(this)) return;
-
- graph.Log.StartSource("Registry: " + GetType().AssemblyQualifiedName);
-
- _basicActions.ForEach(action => action());
- _actions.ForEach(action => action(graph));
-
- graph.Registries.Add(this);
- }
-
-
/// <summary>
/// Expression Builder used to define policies for a PluginType including
/// Scoping, the Default Instance, and interception. BuildInstancesOf()
@@ -456,26 +434,6 @@
action(expression);
}
- internal static bool IsPublicRegistry(Type type)
- {
- if (type.Assembly == typeof (Registry).Assembly)
- {
- return false;
- }
-
- if (!typeof (Registry).IsAssignableFrom(type))
- {
- return false;
- }
-
- if (type.IsInterface || type.IsAbstract || type.IsGenericType)
- {
- return false;
- }
-
- return (type.GetConstructor(new Type[0]) != null);
- }
-
/// <summary>
/// Registers a new TypeInterceptor object with the Container
/// </summary>
@@ -515,29 +473,6 @@
_actions.Add(graph => graph.AddScanner(scanner));
}
- public bool Equals(Registry obj)
- {
- if (ReferenceEquals(null, obj)) return false;
- return GetType().Equals(obj.GetType());
- }
-
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj)) return false;
- if (ReferenceEquals(this, obj)) return true;
-
- if (obj is Registry) return false;
-
-
- if (obj.GetType() != typeof (Registry)) return false;
- return Equals((Registry) obj);
- }
-
- public override int GetHashCode()
- {
- return 0;
- }
-
/// <summary>
/// Directs StructureMap to always inject dependencies into any and all public Setter properties
/// of the type PLUGINTYPE.
@@ -658,6 +593,71 @@
_actions.Add(configure);
}
+ protected void registerAction(Action action)
+ {
+ _basicActions.Add(action);
+ }
+
+ internal void addExpression(Action<PluginGraph> alteration)
+ {
+ _actions.Add(alteration);
+ }
+
+ internal void ConfigurePluginGraph(PluginGraph graph)
+ {
+ if (graph.Registries.Contains(this)) return;
+
+ graph.Log.StartSource("Registry: " + GetType().AssemblyQualifiedName);
+
+ _basicActions.ForEach(action => action());
+ _actions.ForEach(action => action(graph));
+
+ graph.Registries.Add(this);
+ }
+
+ internal static bool IsPublicRegistry(Type type)
+ {
+ if (type.Assembly == typeof (Registry).Assembly)
+ {
+ return false;
+ }
+
+ if (!typeof (Registry).IsAssignableFrom(type))
+ {
+ return false;
+ }
+
+ if (type.IsInterface || type.IsAbstract || type.IsGenericType)
+ {
+ return false;
+ }
+
+ return (type.GetConstructor(new Type[0]) != null);
+ }
+
+ public bool Equals(Registry obj)
+ {
+ if (ReferenceEquals(null, obj)) return false;
+ return GetType().Equals(obj.GetType());
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (ReferenceEquals(null, obj)) return false;
+ if (ReferenceEquals(this, obj)) return true;
+
+ if (obj is Registry) return false;
+
+
+ if (obj.GetType() != typeof (Registry)) return false;
+ return Equals((Registry) obj);
+ }
+
+ public override int GetHashCode()
+ {
+ return 0;
+ }
+
#region Nested type: BuildWithExpression
/// <summary>
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Container.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -470,7 +470,30 @@
#endregion
+ /// <summary>
+ /// Injects the given object into a Container as the default for the designated
+ /// PLUGINTYPE. Mostly used for temporarily setting up return values of the Container
+ /// to introduce mocks or stubs during automated testing scenarios
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <param name="instance"></param>
+ public void Inject<PLUGINTYPE>(PLUGINTYPE instance)
+ {
+ Configure(x => x.For<PLUGINTYPE>().Use(instance));
+ }
+ /// <summary>
+ /// Injects the given object into a Container as the default for the designated
+ /// pluginType. Mostly used for temporarily setting up return values of the Container
+ /// to introduce mocks or stubs during automated testing scenarios
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="object"></param>
+ public void Inject(Type pluginType, object @object)
+ {
+ Configure(x => x.For(pluginType).Use(@object));
+ }
+
private object buildInstanceWithArgs(Type pluginType, Instance defaultInstance, ExplicitArguments args,
string requestedName)
{
@@ -510,16 +533,14 @@
}
_pluginGraph = pluginGraph;
-
+
var thisInstance = new ObjectInstance(this);
- _pluginGraph.FindFamily(typeof(IContainer)).AddInstance(thisInstance);
- _pluginGraph.ProfileManager.SetDefault(typeof(IContainer), thisInstance);
+ _pluginGraph.FindFamily(typeof (IContainer)).AddInstance(thisInstance);
+ _pluginGraph.ProfileManager.SetDefault(typeof (IContainer), thisInstance);
pluginGraph.Log.AssertFailures();
_pipelineGraph = new PipelineGraph(pluginGraph);
-
-
}
[Obsolete("delegate to something cleaner in BuildSession")]
@@ -598,31 +619,5 @@
}
#endregion
-
- /// <summary>
- /// Injects the given object into a Container as the default for the designated
- /// PLUGINTYPE. Mostly used for temporarily setting up return values of the Container
- /// to introduce mocks or stubs during automated testing scenarios
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <param name="instance"></param>
- public void Inject<PLUGINTYPE>(PLUGINTYPE instance)
- {
- Configure(x => x.For<PLUGINTYPE>().Use(instance));
- }
-
- /// <summary>
- /// Injects the given object into a Container as the default for the designated
- /// pluginType. Mostly used for temporarily setting up return values of the Container
- /// to introduce mocks or stubs during automated testing scenarios
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="object"></param>
- public void Inject(Type pluginType, object @object)
- {
- Configure(x => x.For(pluginType).Use(@object));
- }
-
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -6,7 +6,6 @@
using StructureMap.Graph;
using StructureMap.Interceptors;
using StructureMap.Pipeline;
-using StructureMap.Query;
namespace StructureMap.Diagnostics
{
Modified: trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,7 +1,6 @@
using System.Collections.Generic;
using System.IO;
using System.Text;
-using StructureMap.Pipeline;
using StructureMap.Query;
using StructureMap.TypeRules;
Modified: trunk/Source/StructureMap/Graph/AssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -93,8 +93,8 @@
}
public void Convention<T>() where T : IRegistrationConvention, new()
- {
- var previous = _conventions.FirstOrDefault(scanner => scanner is T);
+ {
+ IRegistrationConvention previous = _conventions.FirstOrDefault(scanner => scanner is T);
if (previous == null)
{
With(new T());
Modified: trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs
===================================================================
--- trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -14,11 +14,6 @@
_pluginType = pluginType;
}
- public void NameBy(Func<Type, string> getName)
- {
- _getName = getName;
- }
-
public void Process(Type type, Registry registry)
{
if (type.CanBeCastTo(_pluginType) && Constructor.HasConstructors(type))
@@ -27,5 +22,10 @@
registry.AddType(_pluginType, type, name);
}
}
+
+ public void NameBy(Func<Type, string> getName)
+ {
+ _getName = getName;
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using StructureMap.Pipeline;
-using StructureMap.Query;
using StructureMap.Util;
namespace StructureMap.Graph
@@ -17,13 +16,7 @@
public int FamilyCount { get { return _families.Count; } }
- public IEnumerable<PluginFamily> Families
- {
- get
- {
- return _families.GetAll();
- }
- }
+ public IEnumerable<PluginFamily> Families { get { return _families.GetAll(); } }
public GenericsPluginGraph Clone()
{
Modified: trunk/Source/StructureMap/Graph/ImplementationMap.cs
===================================================================
--- trunk/Source/StructureMap/Graph/ImplementationMap.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Graph/ImplementationMap.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -11,6 +11,11 @@
{
private readonly Cache<Type, List<Type>> _types = new Cache<Type, List<Type>>(t => new List<Type>());
+ public void Process(Type type, Registry registry)
+ {
+ RegisterType(type);
+ }
+
public void Register(Type interfaceType, Type concreteType)
{
_types[interfaceType].Add(concreteType);
@@ -33,10 +38,5 @@
}
});
}
-
- public void Process(Type type, Registry registry)
- {
- RegisterType(type);
- }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using StructureMap.Pipeline;
-using StructureMap.Query;
using StructureMap.TypeRules;
using StructureMap.Util;
@@ -46,6 +45,7 @@
}
public PluginGraph Parent { get { return _parent; } set { _parent = value; } }
+ public IEnumerable<Instance> Instances { get { return _instances.GetAll(); } }
#region IPluginFamily Members
@@ -168,14 +168,6 @@
}
- public IEnumerable<Instance> Instances
- {
- get
- {
- return _instances.GetAll();
- }
- }
-
public Instance GetInstance(string name)
{
return _instances[name];
Modified: trunk/Source/StructureMap/Graph/PluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginGraph.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Graph/PluginGraph.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,11 +1,11 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Reflection;
using StructureMap.Configuration.DSL;
using StructureMap.Diagnostics;
using StructureMap.Interceptors;
using StructureMap.Pipeline;
-using System.Linq;
namespace StructureMap.Graph
{
@@ -224,7 +224,7 @@
{
if (Registries.Any(x => x.GetType() == type)) return;
- var registry = (Registry)Activator.CreateInstance(type);
+ var registry = (Registry) Activator.CreateInstance(type);
registry.ConfigurePluginGraph(this);
}
}
Modified: trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,4 +1,3 @@
-using System;
using System.Collections;
using System.Web;
@@ -35,10 +34,7 @@
return (IObjectCache) items[ITEM_NAME];
}
- public string Scope
- {
- get { return InstanceScope.HttpContext.ToString(); }
- }
+ public string Scope { get { return InstanceScope.HttpContext.ToString(); } }
public static bool HasContext()
{
Modified: trunk/Source/StructureMap/Pipeline/HttpLifecycleBase.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HttpLifecycleBase.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Pipeline/HttpLifecycleBase.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,5 +1,3 @@
-using System;
-
namespace StructureMap.Pipeline
{
public abstract class HttpLifecycleBase<HTTP, NONHTTP> : ILifecycle
@@ -28,6 +26,6 @@
: _nonHttp.FindCache();
}
- public abstract string Scope { get;}
+ public abstract string Scope { get; }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/HybridLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HybridLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Pipeline/HybridLifecycle.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -2,9 +2,6 @@
{
public class HybridLifecycle : HttpLifecycleBase<HttpContextLifecycle, ThreadLocalStorageLifecycle>
{
- public override string Scope
- {
- get { return InstanceScope.Hybrid.ToString(); }
- }
+ public override string Scope { get { return InstanceScope.Hybrid.ToString(); } }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,12 +1,7 @@
-using System;
-
namespace StructureMap.Pipeline
{
public class HybridSessionLifecycle : HttpLifecycleBase<HttpSessionLifecycle, ThreadLocalStorageLifecycle>
{
- public override string Scope
- {
- get { return InstanceScope.HybridHttpSession.ToString(); }
- }
+ public override string Scope { get { return InstanceScope.HybridHttpSession.ToString(); } }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ILifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ILifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Pipeline/ILifecycle.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,11 +1,9 @@
-using StructureMap.Attributes;
-
namespace StructureMap.Pipeline
{
public interface ILifecycle
{
+ string Scope { get; }
void EjectAll();
IObjectCache FindCache();
- string Scope { get; }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/MainObjectCache.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/MainObjectCache.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Pipeline/MainObjectCache.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
using StructureMap.Util;
namespace StructureMap.Pipeline
Modified: trunk/Source/StructureMap/Pipeline/SingletonLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/SingletonLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Pipeline/SingletonLifecycle.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,5 +1,3 @@
-using System;
-
namespace StructureMap.Pipeline
{
public class SingletonLifecycle : ILifecycle
@@ -16,9 +14,6 @@
return _cache;
}
- public string Scope
- {
- get { return InstanceScope.Singleton.ToString(); }
- }
+ public string Scope { get { return InstanceScope.Singleton.ToString(); } }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ThreadLocalStorageLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ThreadLocalStorageLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Pipeline/ThreadLocalStorageLifecycle.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -18,10 +18,7 @@
return _cache;
}
- public string Scope
- {
- get { return InstanceScope.ThreadLocal.ToString(); }
- }
+ public string Scope { get { return InstanceScope.ThreadLocal.ToString(); } }
private void guaranteeHashExists()
{
Modified: trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,5 +1,3 @@
-using System;
-
namespace StructureMap.Pipeline
{
/// <summary>
@@ -16,10 +14,6 @@
return new NulloObjectCache();
}
- public string Scope
- {
- get { return InstanceScope.Unique.ToString(); } }
-
-
+ public string Scope { get { return InstanceScope.Unique.ToString(); } }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -58,19 +58,6 @@
public string CurrentProfile { get { return _profileManager.CurrentProfile; } set { _profileManager.CurrentProfile = value; } }
- public IEnumerable<IPluginTypeConfiguration> GetPluginTypes(IContainer container)
- {
- foreach (PluginFamily family in _genericsGraph.Families)
- {
- yield return new GenericFamilyConfiguration(family);
- }
-
- foreach (IInstanceFactory factory in _factories.Values.ToArray())
- {
- yield return new InstanceFactoryTypeConfiguration(factory.PluginType, container, this);
- }
- }
-
public void Dispose()
{
if (_factories.ContainsKey(typeof (IContainer)))
@@ -96,6 +83,19 @@
_transientCache.DisposeAndClear();
}
+ public IEnumerable<IPluginTypeConfiguration> GetPluginTypes(IContainer container)
+ {
+ foreach (PluginFamily family in _genericsGraph.Families)
+ {
+ yield return new GenericFamilyConfiguration(family);
+ }
+
+ foreach (IInstanceFactory factory in _factories.Values.ToArray())
+ {
+ yield return new InstanceFactoryTypeConfiguration(factory.PluginType, container, this);
+ }
+ }
+
public PipelineGraph ToNestedGraph()
{
var clone = new PipelineGraph(_profileManager.Clone(), _genericsGraph.Clone(), _log)
@@ -221,10 +221,7 @@
public void EachInstance(Action<Type, Instance> action)
{
- _factories.Values.Each(f =>
- {
- f.AllInstances.Each(i => action(f.PluginType, i));
- });
+ _factories.Values.Each(f => { f.AllInstances.Each(i => action(f.PluginType, i)); });
}
public IObjectCache FindCache(Type pluginType)
Modified: trunk/Source/StructureMap/Query/EmptyConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/EmptyConfiguration.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Query/EmptyConfiguration.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -12,33 +12,24 @@
_pluginType = pluginType;
}
- public Type PluginType
- {
- get { return _pluginType; }
- }
+ public Type PluginType { get { return _pluginType; } }
/// <summary>
/// The "instance" that will be used when Container.GetInstance(PluginType) is called.
/// See <see cref="InstanceRef">InstanceRef</see> for more information
/// </summary>
- public InstanceRef Default
- {
- get { return null; } }
+ public InstanceRef Default { get { return null; } }
/// <summary>
/// The build "policy" for this PluginType. Used by the WhatDoIHave() diagnostics methods
/// </summary>
- public string Lifecycle
- {
- get { return null; } }
+ public string Lifecycle { get { return null; } }
/// <summary>
/// All of the <see cref="InstanceRef">InstanceRef</see>'s registered
/// for this PluginType
/// </summary>
- public IEnumerable<InstanceRef> Instances
- {
- get { return new InstanceRef[0]; } }
+ public IEnumerable<InstanceRef> Instances { get { return new InstanceRef[0]; } }
/// <summary>
/// Simply query to see if there are any implementations registered
Modified: trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -47,25 +47,13 @@
/// <summary>
/// The build "policy" for this PluginType. Used by the WhatDoIHave() diagnostics methods
/// </summary>
- public string Lifecycle
- {
- get
- {
- return _family.Lifecycle.ToName();
- }
- }
+ public string Lifecycle { get { return _family.Lifecycle.ToName(); } }
/// <summary>
/// All of the <see cref="InstanceRef">InstanceRef</see>'s registered
/// for this PluginType
/// </summary>
- public IEnumerable<InstanceRef> Instances
- {
- get
- {
- return _family.Instances.Select(x => new InstanceRef(x, this));
- }
- }
+ public IEnumerable<InstanceRef> Instances { get { return _family.Instances.Select(x => new InstanceRef(x, this)); } }
/// <summary>
/// Simply query to see if there are any implementations registered
Modified: trunk/Source/StructureMap/Query/IModel.cs
===================================================================
--- trunk/Source/StructureMap/Query/IModel.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Query/IModel.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,12 +1,8 @@
using System;
using System.Collections.Generic;
-using StructureMap.Pipeline;
namespace StructureMap.Query
{
-
-
-
/// <summary>
/// Models the state of a Container or ObjectFactory. Can be used to query for the
/// existence of types registered with StructureMap
Modified: trunk/Source/StructureMap/Query/Model.cs
===================================================================
--- trunk/Source/StructureMap/Query/Model.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/Query/Model.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -35,13 +35,7 @@
return findForFamily(pluginType, f => f.Default == null ? null : f.Default.ConcreteType);
}
- public IEnumerable<IPluginTypeConfiguration> PluginTypes
- {
- get
- {
- return _pluginTypes;
- }
- }
+ public IEnumerable<IPluginTypeConfiguration> PluginTypes { get { return _pluginTypes; } }
/// <summary>
/// Retrieves the configuration for the given type
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -252,8 +252,6 @@
{
return IsChild(type) || IsChildArray(type);
}
-
-
}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs
===================================================================
--- trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -3,7 +3,6 @@
using System.IO;
using System.Linq;
using Microsoft.VisualStudio.DebuggerVisualizers;
-using StructureMap.Pipeline;
using StructureMap.Query;
namespace StructureMap.DebuggerVisualizers
Modified: trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -55,6 +55,16 @@
}
[Test]
+ public void Load_configuration_file_after_the_container_has_already_been_initialized()
+ {
+ var container = new Container(x => x.AddConfigurationFromXmlFile("Config1.xml"));
+
+ container.GetInstance<IWidget>().ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Orange");
+ container.Configure(x => x.AddConfigurationFromXmlFile("Config2.xml"));
+ container.GetInstance<IWidget>().ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Green");
+ }
+
+ [Test]
public void NotTheDefault()
{
assertTheDefault("Orange", x => { x.AddConfigurationFromXmlFile("Config1.xml"); });
@@ -66,22 +76,9 @@
// This code enforces the existence of the StructureMap.config file
// Initialize() will throw an exception if the StructureMap.config file
// cannot be found
- ObjectFactory.Initialize(x =>
- {
- x.UseDefaultStructureMapConfigFile = true;
- });
+ ObjectFactory.Initialize(x => { x.UseDefaultStructureMapConfigFile = true; });
ObjectFactory.GetInstance<IWidget>().ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Red");
}
-
- [Test]
- public void Load_configuration_file_after_the_container_has_already_been_initialized()
- {
- var container = new Container(x => x.AddConfigurationFromXmlFile("Config1.xml"));
-
- container.GetInstance<IWidget>().ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Orange");
- container.Configure(x => x.AddConfigurationFromXmlFile("Config2.xml"));
- container.GetInstance<IWidget>().ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Green");
- }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Attributes/PluginFamilyAttributeTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Attributes/PluginFamilyAttributeTester.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/Attributes/PluginFamilyAttributeTester.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -33,10 +33,7 @@
public class CustomMementoSource : MementoSource
{
- public override string Description
- {
- get { throw new NotImplementedException(); }
- }
+ public override string Description { get { throw new NotImplementedException(); } }
protected override InstanceMemento[] fetchInternalMementos()
{
Modified: trunk/Source/StructureMap.Testing/AutoMocking/AutoMockerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AutoMocking/AutoMockerTester.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/AutoMocking/AutoMockerTester.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -9,8 +9,10 @@
public abstract class AutoMockerTester
{
protected abstract AutoMocker<T> createAutoMocker<T>() where T : class;
- protected abstract void setExpectation<T, TResult>(T mock, Expression<Func<T, TResult>> functionCall, TResult expectedResult) where T : class;
+ protected abstract void setExpectation<T, TResult>(T mock, Expression<Func<T, TResult>> functionCall,
+ TResult expectedResult) where T : class;
+
public class ConcreteThing
{
private readonly IMockedService _service;
@@ -24,15 +26,9 @@
}
- public IMockedService Service
- {
- get { return _service; }
- }
+ public IMockedService Service { get { return _service; } }
- public IMockedService2 Service2
- {
- get { return _service2; }
- }
+ public IMockedService2 Service2 { get { return _service2; } }
}
public class ConcreteClass
@@ -48,25 +44,13 @@
_service3 = service3;
}
- public virtual string Name
- {
- get { return _service.Name; }
- }
+ public virtual string Name { get { return _service.Name; } }
- public IMockedService Service
- {
- get { return _service; }
- }
+ public IMockedService Service { get { return _service; } }
- public IMockedService2 Service2
- {
- get { return _service2; }
- }
+ public IMockedService2 Service2 { get { return _service2; } }
- public IMockedService3 Service3
- {
- get { return _service3; }
- }
+ public IMockedService3 Service3 { get { return _service3; } }
public void CallService()
{
@@ -106,10 +90,7 @@
#region IMockedService Members
- public string Name
- {
- get { return _name; }
- }
+ public string Name { get { return _name; } }
public void Go()
{
@@ -128,16 +109,17 @@
_services = services;
}
- public IMockedService[] Services
- {
- get { return _services; }
- }
+ public IMockedService[] Services { get { return _services; } }
}
+ public interface IAnotherService
+ {
+ }
+
[Test]
public void CanInjectAnArrayOfMockServices1()
{
- var mocker = createAutoMocker<ClassWithArray>();
+ AutoMocker<ClassWithArray> mocker = createAutoMocker<ClassWithArray>();
IMockedService[] services = mocker.CreateMockArrayFor<IMockedService>(3);
ClassWithArray theClass = mocker.ClassUnderTest;
@@ -148,7 +130,7 @@
[Test]
public void CanInjectAnArrayOfMockServices2()
{
- var mocker = createAutoMocker<ClassWithArray>();
+ AutoMocker<ClassWithArray> mocker = createAutoMocker<ClassWithArray>();
ClassWithArray theClass = mocker.ClassUnderTest;
@@ -159,7 +141,7 @@
[Test]
public void CanInjectAnArrayOfMockServices3()
{
- var mocker = createAutoMocker<ClassWithArray>();
+ AutoMocker<ClassWithArray> mocker = createAutoMocker<ClassWithArray>();
IMockedService[] services = mocker.CreateMockArrayFor<IMockedService>(3);
@@ -172,7 +154,7 @@
[Test]
public void CanInjectAnArrayOfMockServices4()
{
- var mocker = createAutoMocker<ClassWithArray>();
+ AutoMocker<ClassWithArray> mocker = createAutoMocker<ClassWithArray>();
mocker.PartialMockTheClassUnderTest();
ClassWithArray theClass = mocker.ClassUnderTest;
@@ -184,7 +166,7 @@
[Test]
public void GetTheSameConcreteClassTwiceFromCreate()
{
- var autoMocker = createAutoMocker<ConcreteClass>();
+ AutoMocker<ConcreteClass> autoMocker = createAutoMocker<ConcreteClass>();
ConcreteClass concreteClass = autoMocker.ClassUnderTest;
Assert.AreSame(concreteClass, autoMocker.ClassUnderTest);
@@ -195,7 +177,7 @@
[Test]
public void TheAutoMockerPushesInMocksAndAPreBuiltStubForAllOfTheConstructorArguments()
{
- var autoMocker = createAutoMocker<ConcreteClass>();
+ AutoMocker<ConcreteClass> autoMocker = createAutoMocker<ConcreteClass>();
var stub = new StubService();
autoMocker.Inject<IMockedService>(stub);
@@ -212,7 +194,7 @@
[Test]
public void TheAutoMockerPushesInMocksForAllOfTheConstructorArgumentsForAPartialMock()
{
- var autoMocker = createAutoMocker<ConcreteClass>();
+ AutoMocker<ConcreteClass> autoMocker = createAutoMocker<ConcreteClass>();
var service = autoMocker.Get<IMockedService>();
var service2 = autoMocker.Get<IMockedService2>();
@@ -229,7 +211,7 @@
[Test]
public void UseConcreteClassFor()
{
- var mocker = createAutoMocker<ConcreteClass>();
+ AutoMocker<ConcreteClass> mocker = createAutoMocker<ConcreteClass>();
mocker.UseConcreteClassFor<ConcreteThing>();
var thing = mocker.Get<ConcreteThing>();
@@ -242,26 +224,20 @@
[Test]
public void UseTheAutoMockerToStartUpTheConcreteClass()
{
- var autoMocker = createAutoMocker<ConcreteClass>();
- setExpectation(autoMocker.Get<IMockedService>(), x=> x.Name, "Jeremy");
+ AutoMocker<ConcreteClass> autoMocker = createAutoMocker<ConcreteClass>();
+ setExpectation(autoMocker.Get<IMockedService>(), x => x.Name, "Jeremy");
autoMocker.ClassUnderTest.Name.ShouldEqual("Jeremy");
}
[Test]
public void UseTheAutoMockerToStartUpTheConcreteClassAsAPartialMockAndSetTheNameMethodUp()
{
- var autoMocker = createAutoMocker<ConcreteClass>();
+ AutoMocker<ConcreteClass> autoMocker = createAutoMocker<ConcreteClass>();
autoMocker.PartialMockTheClassUnderTest();
ConcreteClass concreteClass = autoMocker.ClassUnderTest;
- setExpectation(concreteClass, x=> x.Name, "Max");
+ setExpectation(concreteClass, x => x.Name, "Max");
concreteClass.Name.ShouldEqual("Max");
}
-
- public interface IAnotherService
- {
-
- }
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/AutoMocking/MoqAutoMockerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AutoMocking/MoqAutoMockerTester.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/AutoMocking/MoqAutoMockerTester.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,8 +1,8 @@
using System;
+using System.Linq.Expressions;
using Moq;
using NUnit.Framework;
using StructureMap.AutoMocking;
-using System.Linq.Expressions;
namespace StructureMap.Testing.AutoMocking
{
@@ -12,8 +12,8 @@
[Test]
public void verify_an_expected_calls()
{
- MoqAutoMocker<AutoMockerTester.ConcreteClass> autoMocker = new MoqAutoMocker<AutoMockerTester.ConcreteClass>();
- AutoMockerTester.IMockedService mockedService = autoMocker.Get<AutoMockerTester.IMockedService>();
+ var autoMocker = new MoqAutoMocker<AutoMockerTester.ConcreteClass>();
+ var mockedService = autoMocker.Get<AutoMockerTester.IMockedService>();
autoMocker.ClassUnderTest.CallService();
IMock<AutoMockerTester.IMockedService> mockedServiceWrapper = Mock.Get(mockedService);
@@ -29,9 +29,10 @@
return new MoqAutoMocker<T>();
}
- protected override void setExpectation<T, TResult>(T mock, Expression<Func<T, TResult>> functionCall, TResult expectedResult)
+ protected override void setExpectation<T, TResult>(T mock, Expression<Func<T, TResult>> functionCall,
+ TResult expectedResult)
{
Mock.Get(mock).Expect(functionCall).Returns(expectedResult);
}
}
-}
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/AutoMocking/MoqFactoryTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AutoMocking/MoqFactoryTester.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/AutoMocking/MoqFactoryTester.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -7,20 +7,11 @@
[TestFixture]
public class MoqFactoryTester
{
-
[Test]
- public void sample_moq_usage()
- {
- var mock = new Mock<ITestMocks>();
- mock.Expect(t => t.Answer()).Returns("Moq");
- mock.Object.Answer().ShouldEqual("Moq");
- }
-
- [Test]
public void can_make_dynamic_mocks()
{
var moqFactory = new MoqFactory();
- var fooMock = moqFactory.CreateMock(typeof(ITestMocks));
+ object fooMock = moqFactory.CreateMock(typeof (ITestMocks));
fooMock.ShouldNotBeNull();
}
@@ -29,18 +20,23 @@
public void can_make_partial_mocks()
{
var moqFactory = new MoqFactory();
- var testPartials = (TestPartials)moqFactory.CreateMockThatCallsBase(typeof(TestPartials), new object[0]);
-
+ var testPartials = (TestPartials) moqFactory.CreateMockThatCallsBase(typeof (TestPartials), new object[0]);
+
testPartials.ShouldNotBeNull();
testPartials.Concrete().ShouldEqual("Concrete");
testPartials.Virtual().ShouldEqual("Virtual");
- var mock = Mock.Get(testPartials);
+ IMock<TestPartials> mock = Mock.Get(testPartials);
mock.Expect(t => t.Virtual()).Returns("MOQed!");
testPartials.Virtual().ShouldEqual("MOQed!");
}
+ [Test]
+ public void sample_moq_usage()
+ {
+ var mock = new Mock<ITestMocks>();
+ mock.Expect(t => t.Answer()).Returns("Moq");
+ mock.Object.Answer().ShouldEqual("Moq");
+ }
}
-
-
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -32,7 +32,8 @@
return new RhinoAutoMocker<T>();
}
- protected override void setExpectation<T,TResult>(T mock, Expression<Func<T,TResult>> functionCall, TResult expectedResult)
+ protected override void setExpectation<T, TResult>(T mock, Expression<Func<T, TResult>> functionCall,
+ TResult expectedResult)
{
mock.Expect(x => functionCall.Compile()(mock)).Return(expectedResult);
}
@@ -94,6 +95,5 @@
// This retrieves the mock object for IMockedService
autoMocker.Get<IMockedService>().AssertWasCalled(s => s.Go());
}
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/AutoMocking/RhinoMockRepositoryProxyTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AutoMocking/RhinoMockRepositoryProxyTester.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/AutoMocking/RhinoMockRepositoryProxyTester.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,6 +1,6 @@
using NUnit.Framework;
-using StructureMap.AutoMocking;
using Rhino.Mocks;
+using StructureMap.AutoMocking;
namespace StructureMap.Testing.AutoMocking
{
@@ -11,30 +11,17 @@
public void can_make_dynamic_mocks()
{
var mockRepository = new RhinoMockRepositoryProxy();
- var fooMock = mockRepository.DynamicMock(typeof(ITestMocks));
+ object fooMock = mockRepository.DynamicMock(typeof (ITestMocks));
fooMock.ShouldNotBeNull();
}
[Test]
- public void can_put_mock_in_replay_mode()
- {
- var mockRepository = new RhinoMockRepositoryProxy();
- var test = (ITestMocks)mockRepository.DynamicMock(typeof(ITestMocks));
-
- mockRepository.Replay(test);
-
- test.Stub(t => t.Answer()).Return("YES");
- test.ShouldNotBeNull();
- test.Answer().ShouldEqual("YES");
- }
-
- [Test]
public void can_make_partial_mocks()
{
var mockRepository = new RhinoMockRepositoryProxy();
- var testPartials = (TestPartials)mockRepository.PartialMock(typeof(TestPartials), new object[0]);
-
+ var testPartials = (TestPartials) mockRepository.PartialMock(typeof (TestPartials), new object[0]);
+
testPartials.ShouldNotBeNull();
mockRepository.Replay(testPartials);
testPartials.Concrete().ShouldEqual("Concrete");
@@ -44,6 +31,18 @@
testPartials.Virtual().ShouldEqual("MOCKED!");
}
+ [Test]
+ public void can_put_mock_in_replay_mode()
+ {
+ var mockRepository = new RhinoMockRepositoryProxy();
+ var test = (ITestMocks) mockRepository.DynamicMock(typeof (ITestMocks));
+
+ mockRepository.Replay(test);
+
+ test.Stub(t => t.Answer()).Return("YES");
+ test.ShouldNotBeNull();
+ test.Answer().ShouldEqual("YES");
+ }
}
public interface ITestMocks
Modified: trunk/Source/StructureMap.Testing/AutoWiringExamples.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AutoWiringExamples.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/AutoWiringExamples.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -44,7 +44,7 @@
[TestFixture]
public class ValidatorExamples
{
- private Container container;
+ #region Setup/Teardown
[SetUp]
public void SetUp()
@@ -75,37 +75,14 @@
});
}
- [Test]
- public void what_are_the_validators()
- {
- Debug.WriteLine("With Auto Wiring");
- container.GetInstance<ClassThatUsesValidators>("WithAutoWiring").Write();
- Debug.WriteLine("=================================");
- Debug.WriteLine("With Explicit Configuration");
- container.GetInstance<ClassThatUsesValidators>("ExplicitArray").Write();
- }
+ #endregion
- [Test]
- public void demonstrate_session_identity()
- {
- var class3 = container.GetInstance<Class3>();
- Debug.WriteLine(class3);
- }
+ private Container container;
- [Test]
- public void demonstrate_session_identity_with_explicit_argument()
- {
- DataContext context = new DataContext();
- Debug.WriteLine("The context being passed in is " + context);
- var class3 = container.With(context).GetInstance<Class3>();
- Debug.WriteLine(class3);
- }
-
-
public class DataContext
{
- private Guid _id = Guid.NewGuid();
+ private readonly Guid _id = Guid.NewGuid();
public override string ToString()
{
@@ -161,5 +138,32 @@
return string.Format("Class3 has Context: {0}\n{1}", _context, _class2);
}
}
+
+ [Test]
+ public void demonstrate_session_identity()
+ {
+ var class3 = container.GetInstance<Class3>();
+ Debug.WriteLine(class3);
+ }
+
+ [Test]
+ public void demonstrate_session_identity_with_explicit_argument()
+ {
+ var context = new DataContext();
+ Debug.WriteLine("The context being passed in is " + context);
+
+ var class3 = container.With(context).GetInstance<Class3>();
+ Debug.WriteLine(class3);
+ }
+
+ [Test]
+ public void what_are_the_validators()
+ {
+ Debug.WriteLine("With Auto Wiring");
+ container.GetInstance<ClassThatUsesValidators>("WithAutoWiring").Write();
+ Debug.WriteLine("=================================");
+ Debug.WriteLine("With Explicit Configuration");
+ container.GetInstance<ClassThatUsesValidators>("ExplicitArray").Write();
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/BidirectionalDependencies.cs
===================================================================
--- trunk/Source/StructureMap.Testing/BidirectionalDependencies.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/BidirectionalDependencies.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,14 +1,15 @@
-using System;
using System.Diagnostics;
using NUnit.Framework;
namespace StructureMap.Testing
{
- [TestFixture] public class BidirectionalDependencies
+ [TestFixture]
+ public class BidirectionalDependencies
{
- private Container container;
+ #region Setup/Teardown
- [SetUp] public void SetUp()
+ [SetUp]
+ public void SetUp()
{
container = new Container(x =>
{
@@ -17,7 +18,12 @@
});
}
- [Test] public void do_not_blow_up_with_a_stack_overflow_problem()
+ #endregion
+
+ private Container container;
+
+ [Test]
+ public void do_not_blow_up_with_a_stack_overflow_problem()
{
try
{
@@ -33,9 +39,14 @@
}
- public interface IBiView{}
- public interface IBiPresenter{}
+ public interface IBiView
+ {
+ }
+ public interface IBiPresenter
+ {
+ }
+
public class BiView : IBiView
{
private readonly IBiPresenter _presenter;
@@ -45,10 +56,7 @@
_presenter = presenter;
}
- public IBiPresenter Presenter
- {
- get { return _presenter; }
- }
+ public IBiPresenter Presenter { get { return _presenter; } }
}
public class BiPresenter : IBiPresenter
@@ -60,9 +68,6 @@
_view = view;
}
- public IBiView View
- {
- get { return _view; }
- }
+ public IBiView View { get { return _view; } }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Bugs/AddValueDirectlyWithGenericUsage.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/AddValueDirectlyWithGenericUsage.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/Bugs/AddValueDirectlyWithGenericUsage.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -6,11 +6,15 @@
[TestFixture]
public class AddValueDirectlyWithGenericUsage
{
+ #region Setup/Teardown
+
[SetUp]
public void SetUp()
{
}
+ #endregion
+
[Test]
public void should_be_able_to_resolve_from_the_generic_family_expression()
{
Modified: trunk/Source/StructureMap.Testing/Bugs/BuildUpBug.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/BuildUpBug.cs 2009-12-28 01:17:17 UTC (rev 306)
+++ trunk/Source/StructureMap.Testing/Bugs/BuildUpBug.cs 2009-12-28 01:43:19 UTC (rev 307)
@@ -1,7 +1,3 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
using NUnit.Framework;
namespace StructureMap.Testing.Bugs
@@ -17,7 +13,7 @@
x.UseDefaultStructureMapConfigFile = false;
x.ForConcreteType<SomeDbRepository>().Configure.
- WithCtorArg("connectionString").EqualTo("some connection string");
+ WithCtorArg("connectionString").EqualTo("some connection string");
//x.ForConcreteType<SomeWebPage>().Configure.
// SetterDependency<SomeDbRepository>().Is<SomeDbRepository>();
@@ -25,10 +21,10 @@
x.SetAllProperties(o => o.OfType<SomeDbRepository>());
});
- SomeDbRepository dbRepository =
- ObjectFactory.GetInstance<SomeDbRepository>();
+ var dbRepository =
+ ObjectFactory.GetInstance<SomeDbRepository>();
- SomeWebPage webPage = new SomeWebPage();
+ var webPage = new SomeWebPage();
ObjectFactory.BuildUp(webPage);
@@ -40,7 +36,7 @@
{
public SomeDbRepository(string connectionString)
{
- this.ConnectionString = connectionString;
+ ConnectionString = connectionString;
}
public string ConnectionString { get; set; }
@@ -54,4 +50,4 @@
// ...
}
-}
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Bugs/FillAllPropertiesShouldWorkForAlreadyConfiguredPluginsBug.cs
===================================================================
--- trunk/Source/Structure...
[truncated message content] |
|
From: <jer...@us...> - 2009-12-28 01:17:27
|
Revision: 306
http://structuremap.svn.sourceforge.net/structuremap/?rev=306&view=rev
Author: jeremydmiller
Date: 2009-12-28 01:17:17 +0000 (Mon, 28 Dec 2009)
Log Message:
-----------
The big "Model" overhaul
Modified Paths:
--------------
trunk/Source/StructureMap/Attributes/PluginFamilyAttribute.cs
trunk/Source/StructureMap/BuildSession.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
trunk/Source/StructureMap/Configuration/FamilyParser.cs
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs
trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs
trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
trunk/Source/StructureMap/Graph/IPluginFamily.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/IContainer.cs
trunk/Source/StructureMap/InstanceFactory.cs
trunk/Source/StructureMap/ObjectFactory.cs
trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs
trunk/Source/StructureMap/Pipeline/HttpLifecycleBase.cs
trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs
trunk/Source/StructureMap/Pipeline/ILifecycle.cs
trunk/Source/StructureMap/Pipeline/Instance.cs
trunk/Source/StructureMap/Pipeline/Lifecycles.cs
trunk/Source/StructureMap/Pipeline/ObjectBuilder.cs
trunk/Source/StructureMap/Pipeline/SingletonLifecycle.cs
trunk/Source/StructureMap/Pipeline/ThreadLocalStorageLifecycle.cs
trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/Query/IModel.cs
trunk/Source/StructureMap/Query/Model.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap/SystemRegistry.cs
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs
trunk/Source/StructureMap.Testing/Attributes/PluginFamilyAttributeTester.cs
trunk/Source/StructureMap.Testing/Bugs/HttpSessionNullRefBug.cs
trunk/Source/StructureMap.Testing/Bugs/SingletonShouldBeLazy.cs
trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs
trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeOnOpenGenericsTester.cs
trunk/Source/StructureMap.Testing/BuildSessionTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs
trunk/Source/StructureMap.Testing/Configuration/FamilyParserTester.cs
trunk/Source/StructureMap.Testing/Examples.cs
trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs
trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs
trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs
trunk/Source/StructureMap.Testing/Graph/FullStackFacadeTester.cs
trunk/Source/StructureMap.Testing/Graph/InstanceFactoryTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ContainerDisposalTester.cs
trunk/Source/StructureMap.Testing/Pipeline/HybridBuildLifecycleTester.cs
trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ObjectBuilderTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ThreadLocalStorageLifecycleTester.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
trunk/Source/StructureMap.Testing.GenericWidgets/Widgets.cs
Added Paths:
-----------
trunk/Source/StructureMap/InstanceScope.cs
trunk/Source/StructureMap/Pipeline/HybridLifecycle.cs
trunk/Source/StructureMap/Query/EmptyConfiguration.cs
trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs
trunk/Source/StructureMap/Query/IFamily.cs
trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs
trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs
trunk/Source/StructureMap/Query/InstanceRef.cs
trunk/Source/StructureMap.Testing/Query/
trunk/Source/StructureMap.Testing/Query/GenericFamilyConfigurationTester.cs
trunk/Source/StructureMap.Testing/Query/InstanceFactoryTypeConfigurationTester.cs
trunk/Source/StructureMap.Testing/Query/InstanceRefTester.cs
trunk/Source/StructureMap.Testing/Query/ModelIntegrationTester.cs
Removed Paths:
-------------
trunk/Source/StructureMap/Attributes/InstanceScope.cs
trunk/Source/StructureMap/PluginTypeConfiguration.cs
trunk/Source/StructureMap.Testing/PipelineGraphTester.cs
Deleted: trunk/Source/StructureMap/Attributes/InstanceScope.cs
===================================================================
--- trunk/Source/StructureMap/Attributes/InstanceScope.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Attributes/InstanceScope.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,13 +0,0 @@
-namespace StructureMap.Attributes
-{
- public enum InstanceScope
- {
- PerRequest,
- Singleton,
- ThreadLocal,
- HttpContext,
- Hybrid,
- HttpSession,
- HybridHttpSession
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Attributes/PluginFamilyAttribute.cs
===================================================================
--- trunk/Source/StructureMap/Attributes/PluginFamilyAttribute.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Attributes/PluginFamilyAttribute.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,5 +1,4 @@
using System;
-using StructureMap.Attributes;
using StructureMap.Graph;
namespace StructureMap
Modified: trunk/Source/StructureMap/BuildSession.cs
===================================================================
--- trunk/Source/StructureMap/BuildSession.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/BuildSession.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -16,9 +16,9 @@
private readonly PipelineGraph _pipelineGraph;
protected BuildStack _buildStack = new BuildStack();
- public BuildSession(PipelineGraph pipelineGraph, InterceptorLibrary interceptorLibrary, IObjectCache cache)
+ public BuildSession(PipelineGraph pipelineGraph, InterceptorLibrary interceptorLibrary)
{
- _builder = new ObjectBuilder(pipelineGraph, interceptorLibrary, cache);
+ _builder = new ObjectBuilder(pipelineGraph, interceptorLibrary);
_pipelineGraph = pipelineGraph;
_defaults = new Cache<Type, Func<object>>(t =>
@@ -35,7 +35,7 @@
}
public BuildSession(PluginGraph graph)
- : this(new PipelineGraph(graph), graph.InterceptorLibrary, new NulloObjectCache())
+ : this(new PipelineGraph(graph), graph.InterceptorLibrary)
{
}
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using StructureMap.Attributes;
using StructureMap.Graph;
using StructureMap.Interceptors;
using StructureMap.Pipeline;
@@ -358,5 +357,18 @@
{
return LifecycleIs(new UniquePerRequestLifecycle());
}
+
+ /// <summary>
+ /// Adds the object to to the PLUGINTYPE
+ /// </summary>
+ /// <param name="object"></param>
+ /// <returns></returns>
+ public ObjectInstance Add(PLUGINTYPE @object)
+ {
+ var instance = new ObjectInstance(@object);
+ _alterations.Add(f => f.AddInstance(instance));
+
+ return instance;
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,5 +1,4 @@
using System;
-using StructureMap.Attributes;
using StructureMap.Graph;
using StructureMap.Interceptors;
using StructureMap.Pipeline;
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -103,7 +103,7 @@
/// </summary>
/// <typeparam name="PLUGGEDTYPE"></typeparam>
/// <returns></returns>
- [Obsolete("Favor For<ISomething>().Use<Something>()")]
+ [Obsolete("Favor For<ISomething>().Use<Something>() or For<ISomething>().Add<Something>()")]
SmartInstance<PLUGGEDTYPE> OfConcreteType<PLUGGEDTYPE>() where PLUGGEDTYPE : T;
/// <summary>
Modified: trunk/Source/StructureMap/Configuration/FamilyParser.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/FamilyParser.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Configuration/FamilyParser.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,6 +1,5 @@
using System;
using System.Xml;
-using StructureMap.Attributes;
using StructureMap.Graph;
using StructureMap.Pipeline;
using StructureMap.Source;
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Container.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -18,7 +18,6 @@
private InterceptorLibrary _interceptorLibrary;
private PipelineGraph _pipelineGraph;
private PluginGraph _pluginGraph;
- private IObjectCache _transientCache = new NulloObjectCache();
public Container(Action<ConfigurationExpression> action)
{
@@ -65,7 +64,7 @@
/// <summary>
/// Provides queryable access to the configured PluginType's and Instances of this Container
/// </summary>
- public IModel Model { get { return new Model(_pipelineGraph, this); } }
+ public IModel Model { get { return new Model(_pipelineGraph.GetPluginTypes(this)); } }
/// <summary>
/// Creates or finds the named instance of T
@@ -442,8 +441,7 @@
var container = new Container
{
_interceptorLibrary = _interceptorLibrary,
- _pipelineGraph = _pipelineGraph.Clone(),
- _transientCache = new MainObjectCache()
+ _pipelineGraph = _pipelineGraph.ToNestedGraph(),
};
// Fixes a mild bug. The child container should inject itself
@@ -467,61 +465,12 @@
public void Dispose()
{
- _transientCache.DisposeAndClear();
_pipelineGraph.Dispose();
}
#endregion
- /// <summary>
- /// Injects the given object into a Container by name for the designated
- /// pluginType. Mostly used for temporarily setting up return values of the Container
- /// to introduce mocks or stubs during automated testing scenarios
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="name"></param>
- /// <param name="object"></param>
- public void Inject<T>(string name, T @object)
- {
- ObjectInstance instance = new ObjectInstance(@object).WithName(name);
- _transientCache.Set(typeof (T), instance, @object);
- _pipelineGraph.AddInstance<T>(instance);
- }
- /// <summary>
- /// Injects the given object into a Container as the default for the designated
- /// pluginType. Mostly used for temporarily setting up return values of the Container
- /// to introduce mocks or stubs during automated testing scenarios
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="object"></param>
- public void Inject(Type pluginType, object @object)
- {
- if (!@object.GetType().CanBeCastTo(pluginType))
- {
- throw new StructureMapException(220, pluginType.FullName,
- @object.GetType().FullName);
- }
-
-
- var instance = new ObjectInstance(@object);
- _transientCache.Set(pluginType, instance, @object);
- _pipelineGraph.SetDefault(pluginType, instance);
- }
-
- /// <summary>
- /// Injects the given object into a Container as the default for the designated
- /// PLUGINTYPE. Mostly used for temporarily setting up return values of the Container
- /// to introduce mocks or stubs during automated testing scenarios
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <param name="object"></param>
- public void Inject<PLUGINTYPE>(PLUGINTYPE @object)
- {
- Instance instance = _pipelineGraph.Inject(@object);
- _transientCache.Set(typeof (PLUGINTYPE), instance, @object);
- }
-
private object buildInstanceWithArgs(Type pluginType, Instance defaultInstance, ExplicitArguments args,
string requestedName)
{
@@ -561,11 +510,16 @@
}
_pluginGraph = pluginGraph;
+
+ var thisInstance = new ObjectInstance(this);
+ _pluginGraph.FindFamily(typeof(IContainer)).AddInstance(thisInstance);
+ _pluginGraph.ProfileManager.SetDefault(typeof(IContainer), thisInstance);
+
pluginGraph.Log.AssertFailures();
_pipelineGraph = new PipelineGraph(pluginGraph);
- _pipelineGraph.Inject<IContainer>(this);
+
}
[Obsolete("delegate to something cleaner in BuildSession")]
@@ -583,7 +537,7 @@
private BuildSession withNewSession(string name)
{
- return new BuildSession(_pipelineGraph, _interceptorLibrary, _transientCache)
+ return new BuildSession(_pipelineGraph, _interceptorLibrary)
{
RequestedName = name
};
@@ -644,5 +598,31 @@
}
#endregion
+
+ /// <summary>
+ /// Injects the given object into a Container as the default for the designated
+ /// PLUGINTYPE. Mostly used for temporarily setting up return values of the Container
+ /// to introduce mocks or stubs during automated testing scenarios
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <param name="instance"></param>
+ public void Inject<PLUGINTYPE>(PLUGINTYPE instance)
+ {
+ Configure(x => x.For<PLUGINTYPE>().Use(instance));
+ }
+
+ /// <summary>
+ /// Injects the given object into a Container as the default for the designated
+ /// pluginType. Mostly used for temporarily setting up return values of the Container
+ /// to introduce mocks or stubs during automated testing scenarios
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="object"></param>
+ public void Inject(Type pluginType, object @object)
+ {
+ Configure(x => x.For(pluginType).Use(@object));
+ }
+
+
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -18,7 +18,7 @@
private List<Instance> _explicitInstances;
public ValidationBuildSession(PipelineGraph pipelineGraph, InterceptorLibrary interceptorLibrary)
- : base(pipelineGraph, interceptorLibrary, new NulloObjectCache())
+ : base(pipelineGraph, interceptorLibrary)
{
}
@@ -104,14 +104,11 @@
_explicitInstances = pipelineGraph.GetAllInstances();
_errors = new ErrorCollection();
- foreach (PluginTypeConfiguration pluginType in pipelineGraph.PluginTypes)
+ pipelineGraph.EachInstance((t, i) =>
{
- foreach (Instance instance in pluginType.Instances)
- {
- _buildStack = new BuildStack();
- validateInstance(pluginType.PluginType, instance);
- }
- }
+ _buildStack = new BuildStack();
+ validateInstance(t, i);
+ });
}
public string BuildErrorMessages()
Modified: trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -10,7 +10,7 @@
public class WhatDoIHaveWriter
{
private readonly PipelineGraph _graph;
- private List<IInstance> _instances;
+ private List<InstanceRef> _instances;
private TextReportWriter _writer;
public WhatDoIHaveWriter(PipelineGraph graph)
@@ -32,12 +32,12 @@
private void writeContentsOfPluginTypes(StringWriter stringWriter)
{
_writer = new TextReportWriter(3);
- _instances = new List<IInstance>();
+ _instances = new List<InstanceRef>();
_writer.AddDivider('=');
_writer.AddText("PluginType", "Name", "Description");
- foreach (PluginTypeConfiguration pluginType in _graph.PluginTypes)
+ foreach (IPluginTypeConfiguration pluginType in _graph.GetPluginTypes(null))
{
writePluginType(pluginType);
}
@@ -64,7 +64,7 @@
writer.WriteLine();
}
- private void writePluginType(PluginTypeConfiguration pluginType)
+ private void writePluginType(IPluginTypeConfiguration pluginType)
{
_writer.AddDivider('-');
var contents = new[]
@@ -90,13 +90,13 @@
_writer.AddContent("Scoped as: PerRequest");
}
- foreach (IInstance instance in pluginType.Instances)
+ foreach (InstanceRef instance in pluginType.Instances)
{
writeInstance(instance);
}
}
- private void writeInstance(IInstance instance)
+ private void writeInstance(InstanceRef instance)
{
if (_instances.Contains(instance))
{
@@ -110,7 +110,7 @@
}
- private void setContents(string[] contents, IInstance instance)
+ private void setContents(string[] contents, InstanceRef instance)
{
contents[1] = instance.Name;
contents[2] = instance.Description;
Modified: trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using StructureMap.Pipeline;
+using StructureMap.Query;
using StructureMap.Util;
namespace StructureMap.Graph
@@ -16,14 +17,11 @@
public int FamilyCount { get { return _families.Count; } }
- public IEnumerable<PluginTypeConfiguration> Families
+ public IEnumerable<PluginFamily> Families
{
get
{
- foreach (PluginFamily family in _families.GetAll())
- {
- yield return family.GetConfiguration();
- }
+ return _families.GetAll();
}
}
Modified: trunk/Source/StructureMap/Graph/IPluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/IPluginFamily.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Graph/IPluginFamily.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,5 +1,4 @@
using System;
-using StructureMap.Attributes;
using StructureMap.Pipeline;
namespace StructureMap.Graph
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using StructureMap.Attributes;
using StructureMap.Pipeline;
using StructureMap.Query;
using StructureMap.TypeRules;
@@ -57,6 +56,12 @@
public void SetScopeTo(InstanceScope scope)
{
+ if (scope == InstanceScope.Transient)
+ {
+ _lifecycle = null;
+ return;
+ }
+
_lifecycle = Lifecycles.GetLifecycle(scope);
}
@@ -79,7 +84,13 @@
_instances[instance.Name] = instance;
}
+ public void SetDefault(Instance instance)
+ {
+ AddInstance(instance);
+ DefaultInstanceKey = instance.Name;
+ }
+
// For testing
public InstanceMemento GetMemento(string instanceKey)
{
@@ -156,9 +167,13 @@
return _instances.Exists(instance => instance.Matches(plugin));
}
- public void EachInstance(Action<Instance> action)
+
+ public IEnumerable<Instance> Instances
{
- _instances.Each(action);
+ get
+ {
+ return _instances.GetAll();
+ }
}
public Instance GetInstance(string name)
@@ -243,7 +258,8 @@
public void ImportFrom(PluginFamily source)
{
- source.EachInstance(instance => _instances.Fill(instance.Name, instance));
+ source.Instances.Each(instance => _instances.Fill(instance.Name, instance));
+
source._pluggedTypes.Each((key, plugin) => _pluggedTypes.Fill(key, plugin));
if (source.MissingInstance != null)
@@ -314,18 +330,6 @@
}
}
- public PluginTypeConfiguration GetConfiguration()
- {
- return new PluginTypeConfiguration
- {
- Default = GetDefaultInstance(),
- PluginType = PluginType,
- Lifecycle = _lifecycle,
- Instances = Instances
- };
- }
-
- [Obsolete("replace with Instances")]
public void ForInstance(string name, Action<Instance> action)
{
_instances.WithValue(name, action);
@@ -340,9 +344,6 @@
public int InstanceCount { get { return _instances.Count; } }
- [Obsolete]
- public IEnumerable<IInstance> Instances { get { return _instances.GetAll(); } }
-
public Instance MissingInstance { get; set; }
/// <summary>
@@ -353,6 +354,7 @@
/// <summary>
/// The InstanceKey of the default instance of the PluginFamily
/// </summary>
+ [Obsolete]
public string DefaultInstanceKey { get { return _defaultKey; } set { _defaultKey = value ?? string.Empty; } }
#endregion
Modified: trunk/Source/StructureMap/IContainer.cs
===================================================================
--- trunk/Source/StructureMap/IContainer.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/IContainer.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -135,15 +135,6 @@
/// <param name="object"></param>
void Inject(Type pluginType, object @object);
- /// <summary>
- /// Injects the given object into a Container by name for the designated
- /// pluginType. Mostly used for temporarily setting up return values of the Container
- /// to introduce mocks or stubs during automated testing scenarios
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="name"></param>
- /// <param name="instance"></param>
- void Inject<T>(string name, T instance);
/// <summary>
/// Sets the default instance for all PluginType's to the designated Profile.
Modified: trunk/Source/StructureMap/InstanceFactory.cs
===================================================================
--- trunk/Source/StructureMap/InstanceFactory.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/InstanceFactory.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -42,7 +42,7 @@
_pluginType = family.PluginType;
MissingInstance = family.MissingInstance;
- family.EachInstance(AddInstance);
+ family.Instances.Each(AddInstance);
}
catch (StructureMapException)
{
@@ -105,8 +105,9 @@
_lifecycle = family.Lifecycle;
}
- family.EachInstance(instance => _instances.Fill(instance.Name, instance));
+ family.Instances.Each(instance => _instances.Fill(instance.Name, instance));
+
if (family.MissingInstance != null)
{
MissingInstance = family.MissingInstance;
Copied: trunk/Source/StructureMap/InstanceScope.cs (from rev 302, trunk/Source/StructureMap/Attributes/InstanceScope.cs)
===================================================================
--- trunk/Source/StructureMap/InstanceScope.cs (rev 0)
+++ trunk/Source/StructureMap/InstanceScope.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -0,0 +1,15 @@
+namespace StructureMap
+{
+ public enum InstanceScope
+ {
+ PerRequest,
+ Singleton,
+ ThreadLocal,
+ HttpContext,
+ Hybrid,
+ HttpSession,
+ HybridHttpSession,
+ Unique,
+ Transient
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/ObjectFactory.cs
===================================================================
--- trunk/Source/StructureMap/ObjectFactory.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/ObjectFactory.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -63,24 +63,6 @@
}
- [Obsolete("Please use GetInstance(Type) instead")]
- public static object FillDependencies(Type type)
- {
- return container.FillDependencies(type);
- }
-
- [Obsolete("Please use GetInstance<T>() instead")]
- public static T FillDependencies<T>()
- {
- return (T) container.FillDependencies(typeof (T));
- }
-
- [Obsolete("Please use Inject(Type, object) instead.")]
- public static void InjectStub(Type pluginType, object stub)
- {
- Inject(pluginType, stub);
- }
-
/// <summary>
/// Injects the given object into a Container as the default for the designated
/// pluginType. Mostly used for temporarily setting up return values of the Container
@@ -93,12 +75,6 @@
container.Inject(pluginType, instance);
}
- [Obsolete("Please use Inject() instead.")]
- public static void InjectStub<PLUGINTYPE>(PLUGINTYPE stub)
- {
- Inject(stub);
- }
-
/// <summary>
/// Injects the given object into a Container as the default for the designated
/// PLUGINTYPE. Mostly used for temporarily setting up return values of the Container
@@ -111,25 +87,7 @@
container.Inject(instance);
}
- /// <summary>
- /// Injects the given object into a Container by name for the designated
- /// pluginType. Mostly used for temporarily setting up return values of the Container
- /// to introduce mocks or stubs during automated testing scenarios
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <param name="name"></param>
- /// <param name="instance"></param>
- public static void Inject<PLUGINTYPE>(string name, PLUGINTYPE instance)
- {
- container.Inject(name, instance);
- }
- [Obsolete("Please use Inject<PLUGINTYPE>(name) instead.")]
- public static void InjectStub<PLUGINTYPE>(string name, PLUGINTYPE stub)
- {
- Inject(name, stub);
- }
-
/// <summary>
/// Returns a report detailing the complete configuration of all PluginTypes and Instances
/// </summary>
Modified: trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,3 +1,4 @@
+using System;
using System.Collections;
using System.Web;
@@ -34,6 +35,11 @@
return (IObjectCache) items[ITEM_NAME];
}
+ public string Scope
+ {
+ get { return InstanceScope.HttpContext.ToString(); }
+ }
+
public static bool HasContext()
{
return HttpContext.Current != null;
Modified: trunk/Source/StructureMap/Pipeline/HttpLifecycleBase.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HttpLifecycleBase.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Pipeline/HttpLifecycleBase.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,3 +1,5 @@
+using System;
+
namespace StructureMap.Pipeline
{
public abstract class HttpLifecycleBase<HTTP, NONHTTP> : ILifecycle
@@ -25,9 +27,7 @@
? _http.FindCache()
: _nonHttp.FindCache();
}
- }
- public class HybridLifecycle : HttpLifecycleBase<HttpContextLifecycle, ThreadLocalStorageLifecycle>
- {
+ public abstract string Scope { get;}
}
}
\ No newline at end of file
Added: trunk/Source/StructureMap/Pipeline/HybridLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HybridLifecycle.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/HybridLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -0,0 +1,10 @@
+namespace StructureMap.Pipeline
+{
+ public class HybridLifecycle : HttpLifecycleBase<HttpContextLifecycle, ThreadLocalStorageLifecycle>
+ {
+ public override string Scope
+ {
+ get { return InstanceScope.Hybrid.ToString(); }
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,3 +1,5 @@
+using System;
+
namespace StructureMap.Pipeline
{
public class HybridSessionLifecycle : HttpLifecycleBase<HttpSessionLifecycle, ThreadLocalStorageLifecycle>
@@ -2,2 +4,6 @@
{
+ public override string Scope
+ {
+ get { return InstanceScope.HybridHttpSession.ToString(); }
+ }
}
Modified: trunk/Source/StructureMap/Pipeline/ILifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ILifecycle.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Pipeline/ILifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,3 +1,5 @@
+using StructureMap.Attributes;
+
namespace StructureMap.Pipeline
{
public interface ILifecycle
@@ -4,5 +6,6 @@
{
void EjectAll();
IObjectCache FindCache();
+ string Scope { get; }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/Instance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Instance.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Pipeline/Instance.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -2,13 +2,10 @@
using StructureMap.Diagnostics;
using StructureMap.Graph;
using StructureMap.Interceptors;
-using StructureMap.Query;
namespace StructureMap.Pipeline
{
-
-
- public interface IDiagnosticInstance : IInstance
+ public interface IDiagnosticInstance
{
bool CanBePartOfPluginFamily(PluginFamily family);
Instance FindInstanceForProfile(PluginFamily family, string profileName, GraphLog log);
@@ -38,7 +35,10 @@
#region IDiagnosticInstance Members
public string Name { get { return _name; } set { _name = value; } }
+ internal Type ConcreteType { get { return getConcreteType(null); } }
+ internal string Description { get { return getDescription(); } }
+
bool IDiagnosticInstance.CanBePartOfPluginFamily(PluginFamily family)
{
return canBePartOfPluginFamily(family);
@@ -59,10 +59,6 @@
preprocess(family);
}
- Type IInstance.ConcreteType { get { return getConcreteType(null); } }
-
- string IInstance.Description { get { return getDescription(); } }
-
#endregion
public virtual object Build(Type pluginType, BuildSession session)
Modified: trunk/Source/StructureMap/Pipeline/Lifecycles.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Lifecycles.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Pipeline/Lifecycles.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,5 +1,4 @@
using System;
-using StructureMap.Attributes;
namespace StructureMap.Pipeline
{
@@ -29,6 +28,9 @@
case InstanceScope.HybridHttpSession:
return new HybridSessionLifecycle();
+
+ case InstanceScope.Unique:
+ return new UniquePerRequestLifecycle();
}
throw new ArgumentOutOfRangeException("scope");
Modified: trunk/Source/StructureMap/Pipeline/ObjectBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ObjectBuilder.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Pipeline/ObjectBuilder.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -5,17 +5,15 @@
{
public class ObjectBuilder
{
- private readonly IObjectCache _defaultCache;
private readonly InterceptorLibrary _library;
private readonly PipelineGraph _pipeline;
- public ObjectBuilder(PipelineGraph pipeline, InterceptorLibrary library, IObjectCache defaultCache)
+ public ObjectBuilder(PipelineGraph pipeline, InterceptorLibrary library)
{
if (pipeline == null) throw new ArgumentNullException("pipeline");
_pipeline = pipeline;
_library = library;
- _defaultCache = defaultCache;
}
public object Resolve(Type pluginType, Instance instance, BuildSession session)
@@ -59,10 +57,7 @@
public IObjectCache FindCache(Type pluginType, Instance instance, BuildSession session)
{
- ILifecycle lifecycle = _pipeline.ForType(pluginType).Lifecycle;
- return lifecycle == null
- ? _defaultCache
- : lifecycle.FindCache();
+ return _pipeline.FindCache(pluginType);
}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/SingletonLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/SingletonLifecycle.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Pipeline/SingletonLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,3 +1,5 @@
+using System;
+
namespace StructureMap.Pipeline
{
public class SingletonLifecycle : ILifecycle
@@ -13,5 +15,10 @@
{
return _cache;
}
+
+ public string Scope
+ {
+ get { return InstanceScope.Singleton.ToString(); }
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ThreadLocalStorageLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ThreadLocalStorageLifecycle.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Pipeline/ThreadLocalStorageLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -18,6 +18,11 @@
return _cache;
}
+ public string Scope
+ {
+ get { return InstanceScope.ThreadLocal.ToString(); }
+ }
+
private void guaranteeHashExists()
{
if (_cache == null)
Modified: trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,3 +1,5 @@
+using System;
+
namespace StructureMap.Pipeline
{
/// <summary>
@@ -14,39 +16,10 @@
return new NulloObjectCache();
}
- //#region IBuildInterceptor Members
+ public string Scope
+ {
+ get { return InstanceScope.Unique.ToString(); } }
- //private IBuildPolicy _innerPolicy = new BuildPolicy();
- //public IBuildPolicy InnerPolicy
- //{
- // get { return _innerPolicy; }
- // set { _innerPolicy = value; }
- //}
-
- //#endregion
-
- //#region IBuildPolicy Members
-
- //public object Build(BuildSession buildSession, Type pluginType, Instance instance)
- //{
- // //insert a default object creator
- // buildSession.RegisterDefault(pluginType, () => InnerPolicy.Build(buildSession, pluginType, instance));
-
- // //build this object for the first time
- // return buildSession.CreateInstance(pluginType);
- //}
-
- //public IBuildPolicy Clone()
- //{
- // return new UniquePerRequestInterceptor();
- //}
-
- //public void EjectAll()
- //{
- // InnerPolicy.EjectAll();
- //}
-
- //#endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -19,12 +19,14 @@
private readonly GenericsPluginGraph _genericsGraph = new GenericsPluginGraph();
private readonly GraphLog _log;
private readonly ProfileManager _profileManager;
+ private readonly IObjectCache _transientCache;
private MissingFactoryFunction _missingFactory =
(pluginType, profileManager) => null;
public PipelineGraph(PluginGraph graph)
{
+ _transientCache = new NulloObjectCache();
_profileManager = graph.ProfileManager;
_log = graph.Log;
@@ -47,6 +49,7 @@
_profileManager = profileManager;
_genericsGraph = genericsGraph;
_log = log;
+ _transientCache = new MainObjectCache();
}
public GraphLog Log { get { return _log; } }
@@ -55,28 +58,16 @@
public string CurrentProfile { get { return _profileManager.CurrentProfile; } set { _profileManager.CurrentProfile = value; } }
- public IEnumerable<PluginTypeConfiguration> PluginTypes
+ public IEnumerable<IPluginTypeConfiguration> GetPluginTypes(IContainer container)
{
- get
+ foreach (PluginFamily family in _genericsGraph.Families)
{
- foreach (PluginTypeConfiguration configuration in _genericsGraph.Families)
- {
- yield return configuration;
- }
+ yield return new GenericFamilyConfiguration(family);
+ }
- var factories = new IInstanceFactory[_factories.Count];
- _factories.Values.CopyTo(factories, 0);
-
- foreach (IInstanceFactory factory in factories)
- {
- yield return new PluginTypeConfiguration
- {
- Default = _profileManager.GetDefault(factory.PluginType),
- PluginType = factory.PluginType,
- Lifecycle = factory.Lifecycle,
- Instances = factory.AllInstances
- };
- }
+ foreach (IInstanceFactory factory in _factories.Values.ToArray())
+ {
+ yield return new InstanceFactoryTypeConfiguration(factory.PluginType, container, this);
}
}
@@ -101,9 +92,11 @@
_factories.Clear();
_profileManager.Dispose();
_genericsGraph.ClearAll();
+
+ _transientCache.DisposeAndClear();
}
- public PipelineGraph Clone()
+ public PipelineGraph ToNestedGraph()
{
var clone = new PipelineGraph(_profileManager.Clone(), _genericsGraph.Clone(), _log)
{
@@ -198,37 +191,13 @@
ForType(typeof (T)).AddInstance(instance);
}
- public Instance Inject<PLUGINTYPE>(PLUGINTYPE instance)
- {
- var literalInstance = new ObjectInstance(instance);
- ForType(typeof (PLUGINTYPE)).AddInstance(literalInstance);
- SetDefault(typeof (PLUGINTYPE), literalInstance);
-
- return literalInstance;
- }
-
public void EjectAllInstancesOf<T>()
{
ForType(typeof (T)).EjectAllInstances();
_profileManager.EjectAllInstancesOf<T>();
}
- [Obsolete("Move this to PluginTypeConfiguration")]
- public IEnumerable<IInstance> InstancesOf(Type pluginType)
- {
- if (_genericsGraph.HasFamily(pluginType))
- {
- return _genericsGraph.FindFamily(pluginType).Instances;
- }
- if (_factories.ContainsKey(pluginType))
- {
- return _factories[pluginType].AllInstances;
- }
-
- return new IInstance[0];
- }
-
public List<Instance> GetAllInstances()
{
return _factories.Values.SelectMany(x => x.AllInstances).ToList();
@@ -249,5 +218,21 @@
{
return ForType(pluginType).FindInstance(instanceKey) != null;
}
+
+ public void EachInstance(Action<Type, Instance> action)
+ {
+ _factories.Values.Each(f =>
+ {
+ f.AllInstances.Each(i => action(f.PluginType, i));
+ });
+ }
+
+ public IObjectCache FindCache(Type pluginType)
+ {
+ ILifecycle lifecycle = ForType(pluginType).Lifecycle;
+ return lifecycle == null
+ ? _transientCache
+ : lifecycle.FindCache();
+ }
}
}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/PluginTypeConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/PluginTypeConfiguration.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/PluginTypeConfiguration.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,32 +0,0 @@
-using System;
-using System.Collections.Generic;
-using StructureMap.Pipeline;
-using StructureMap.Query;
-
-namespace StructureMap
-{
- /// <summary>
- /// Metadata describing the registration of a PluginType
- /// </summary>
- public class PluginTypeConfiguration
- {
- public Type PluginType { get; set; }
-
- /// <summary>
- /// The "instance" that will be used when Container.GetInstance(PluginType) is called.
- /// See <see cref="IInstance">IInstance</see> for more information
- /// </summary>
- public IInstance Default { get; set; }
-
- /// <summary>
- /// The build "policy" for this PluginType. Used by the WhatDoIHave() diagnostics methods
- /// </summary>
- public ILifecycle Lifecycle { get; set; }
-
- /// <summary>
- /// All of the <see cref="IInstance">IInstance</see>'s registered
- /// for this PluginType
- /// </summary>
- public IEnumerable<IInstance> Instances { get; set; }
- }
-}
\ No newline at end of file
Added: trunk/Source/StructureMap/Query/EmptyConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/EmptyConfiguration.cs (rev 0)
+++ trunk/Source/StructureMap/Query/EmptyConfiguration.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+
+namespace StructureMap.Query
+{
+ public class EmptyConfiguration : IPluginTypeConfiguration
+ {
+ private readonly Type _pluginType;
+
+ public EmptyConfiguration(Type pluginType)
+ {
+ _pluginType = pluginType;
+ }
+
+ public Type PluginType
+ {
+ get { return _pluginType; }
+ }
+
+ /// <summary>
+ /// The "instance" that will be used when Container.GetInstance(PluginType) is called.
+ /// See <see cref="InstanceRef">InstanceRef</see> for more information
+ /// </summary>
+ public InstanceRef Default
+ {
+ get { return null; } }
+
+ /// <summary>
+ /// The build "policy" for this PluginType. Used by the WhatDoIHave() diagnostics methods
+ /// </summary>
+ public string Lifecycle
+ {
+ get { return null; } }
+
+ /// <summary>
+ /// All of the <see cref="InstanceRef">InstanceRef</see>'s registered
+ /// for this PluginType
+ /// </summary>
+ public IEnumerable<InstanceRef> Instances
+ {
+ get { return new InstanceRef[0]; } }
+
+ /// <summary>
+ /// Simply query to see if there are any implementations registered
+ /// </summary>
+ /// <returns></returns>
+ public bool HasImplementations()
+ {
+ return false;
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs (rev 0)
+++ trunk/Source/StructureMap/Query/GenericFamilyConfiguration.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using StructureMap.Graph;
+using StructureMap.Pipeline;
+
+namespace StructureMap.Query
+{
+ public class GenericFamilyConfiguration : IPluginTypeConfiguration, IFamily
+ {
+ private readonly PluginFamily _family;
+
+ public GenericFamilyConfiguration(PluginFamily family)
+ {
+ _family = family;
+ }
+
+ void IFamily.Eject(Instance instance)
+ {
+ }
+
+ object IFamily.Build(Instance instance)
+ {
+ return null;
+ }
+
+ bool IFamily.HasBeenCreated(Instance instance)
+ {
+ return false;
+ }
+
+ public Type PluginType { get { return _family.PluginType; } }
+
+ /// <summary>
+ /// The "instance" that will be used when Container.GetInstance(PluginType) is called.
+ /// See <see cref="InstanceRef">InstanceRef</see> for more information
+ /// </summary>
+ public InstanceRef Default
+ {
+ get
+ {
+ Instance defaultInstance = _family.GetDefaultInstance();
+ return defaultInstance == null ? null : new InstanceRef(defaultInstance, this);
+ }
+ }
+
+ /// <summary>
+ /// The build "policy" for this PluginType. Used by the WhatDoIHave() diagnostics methods
+ /// </summary>
+ public string Lifecycle
+ {
+ get
+ {
+ return _family.Lifecycle.ToName();
+ }
+ }
+
+ /// <summary>
+ /// All of the <see cref="InstanceRef">InstanceRef</see>'s registered
+ /// for this PluginType
+ /// </summary>
+ public IEnumerable<InstanceRef> Instances
+ {
+ get
+ {
+ return _family.Instances.Select(x => new InstanceRef(x, this));
+ }
+ }
+
+ /// <summary>
+ /// Simply query to see if there are any implementations registered
+ /// </summary>
+ /// <returns></returns>
+ public bool HasImplementations()
+ {
+ return _family.InstanceCount > 0;
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap/Query/IFamily.cs
===================================================================
--- trunk/Source/StructureMap/Query/IFamily.cs (rev 0)
+++ trunk/Source/StructureMap/Query/IFamily.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -0,0 +1,13 @@
+using System;
+using StructureMap.Pipeline;
+
+namespace StructureMap.Query
+{
+ public interface IFamily
+ {
+ Type PluginType { get; }
+ void Eject(Instance instance);
+ object Build(Instance instance);
+ bool HasBeenCreated(Instance instance);
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/IModel.cs
===================================================================
--- trunk/Source/StructureMap/Query/IModel.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Query/IModel.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -5,20 +5,8 @@
namespace StructureMap.Query
{
- public interface IInstance
- {
- string Name { get; }
- /// <summary>
- /// The actual concrete type of this Instance. Not every type of IInstance
- /// can determine the ConcreteType
- /// </summary>
- Type ConcreteType { get; }
-
- string Description { get; }
- }
-
/// <summary>
/// Models the state of a Container or ObjectFactory. Can be used to query for the
/// existence of types registered with StructureMap
@@ -28,9 +16,9 @@
/// <summary>
/// Access to all the <seealso cref="PluginTypeConfiguration">Plugin Type</seealso> registrations
/// </summary>
- IEnumerable<PluginTypeConfiguration> PluginTypes { get; }
+ IEnumerable<IPluginTypeConfiguration> PluginTypes { get; }
- IEnumerable<IInstance> AllInstances { get; }
+ IEnumerable<InstanceRef> AllInstances { get; }
/// <summary>
/// Can StructureMap fulfill a request to ObjectFactory.GetInstance(pluginType) from the
@@ -55,13 +43,13 @@
/// </summary>
/// <param name="pluginType"></param>
/// <returns></returns>
- IEnumerable<IInstance> InstancesOf(Type pluginType);
+ IEnumerable<InstanceRef> InstancesOf(Type pluginType);
/// <summary>
/// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
/// </summary>
/// <returns></returns>
- IEnumerable<IInstance> InstancesOf<T>();
+ IEnumerable<InstanceRef> InstancesOf<T>();
/// <summary>
/// Does the current container have existing configuration for the "pluginType"
@@ -92,5 +80,19 @@
/// </summary>
/// <returns></returns>
Type DefaultTypeFor(Type pluginType);
+
+ /// <summary>
+ /// Retrieves the configuration for the given type
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ IPluginTypeConfiguration For<T>();
+
+ /// <summary>
+ /// Retrieves the configuration for the given type
+ /// </summary>
+ /// <param name="type"></param>
+ /// <returns></returns>
+ IPluginTypeConfiguration For(Type type);
}
}
\ No newline at end of file
Added: trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs (rev 0)
+++ trunk/Source/StructureMap/Query/IPluginTypeConfiguration.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+
+namespace StructureMap.Query
+{
+ public interface IPluginTypeConfiguration
+ {
+ Type PluginType { get; }
+
+ /// <summary>
+ /// The "instance" that will be used when Container.GetInstance(PluginType) is called.
+ /// See <see cref="InstanceRef">InstanceRef</see> for more information
+ /// </summary>
+ InstanceRef Default { get; }
+
+ /// <summary>
+ /// The build "policy" for this PluginType. Used by the WhatDoIHave() diagnostics methods
+ /// </summary>
+ string Lifecycle { get; }
+
+ /// <summary>
+ /// All of the <see cref="InstanceRef">InstanceRef</see>'s registered
+ /// for this PluginType
+ /// </summary>
+ IEnumerable<InstanceRef> Instances { get; }
+
+ /// <summary>
+ /// Simply query to see if there are any implementations registered
+ /// </summary>
+ /// <returns></returns>
+ bool HasImplementations();
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs (rev 0)
+++ trunk/Source/StructureMap/Query/InstanceFactoryTypeConfiguration.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using StructureMap.Pipeline;
+
+namespace StructureMap.Query
+{
+ public class InstanceFactoryTypeConfiguration : IPluginTypeConfiguration, IFamily
+ {
+ private readonly IContainer _container;
+ private readonly PipelineGraph _graph;
+ private readonly Type _pluginType;
+
+ public InstanceFactoryTypeConfiguration(Type pluginType, IContainer container, PipelineGraph graph)
+ {
+ _pluginType = pluginType;
+ _container = container;
+ _graph = graph;
+ }
+
+ private IObjectCache cache { get { return _graph.FindCache(_pluginType); } }
+ private IInstanceFactory factory { get { return _graph.ForType(_pluginType); } }
+
+ void IFamily.Eject(Instance instance)
+ {
+ cache.Eject(_pluginType, instance);
+ }
+
+ object IFamily.Build(Instance instance)
+ {
+ // It's important to use this overload to get it to
+ // respect the lifecycle. I think. It works, so leave
+ // it alone.
+ return _container.GetInstance(_pluginType, instance.Name);
+ }
+
+ bool IFamily.HasBeenCreated(Instance instance)
+ {
+ return cache.Has(_pluginType, instance);
+ }
+
+ public Type PluginType { get { return _pluginType; } }
+
+ /// <summary>
+ /// The "instance" that will be used when Container.GetInstance(PluginType) is called.
+ /// See <see cref="InstanceRef">InstanceRef</see> for more information
+ /// </summary>
+ public InstanceRef Default
+ {
+ get
+ {
+ Instance instance = _graph.GetDefault(_pluginType);
+ return toRef(instance);
+ }
+ }
+
+ /// <summary>
+ /// The build "policy" for this PluginType. Used by the WhatDoIHave() diagnostics methods
+ /// </summary>
+ public string Lifecycle { get { return factory.Lifecycle.ToName(); } }
+
+ /// <summary>
+ /// All of the <see cref="InstanceRef">InstanceRef</see>'s registered
+ /// for this PluginType
+ /// </summary>
+ public IEnumerable<InstanceRef> Instances { get { return factory.AllInstances.Select(x => toRef(x)); } }
+
+ /// <summary>
+ /// Simply query to see if there are any implementations registered
+ /// </summary>
+ /// <returns></returns>
+ public bool HasImplementations()
+ {
+ return factory.AllInstances.Any();
+ }
+
+ private InstanceRef toRef(Instance instance)
+ {
+ if (instance == null) return null;
+
+ return new InstanceRef(instance, this);
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap/Query/InstanceRef.cs
===================================================================
--- trunk/Source/StructureMap/Query/InstanceRef.cs (rev 0)
+++ trunk/Source/StructureMap/Query/InstanceRef.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -0,0 +1,45 @@
+using System;
+using StructureMap.Pipeline;
+
+namespace StructureMap.Query
+{
+ public class InstanceRef
+ {
+ private readonly IFamily _family;
+ private readonly Instance _instance;
+
+ public InstanceRef(Instance instance, IFamily family)
+ {
+ _instance = instance;
+ _family = family;
+ }
+
+
+ public string Name { get { return _instance.Name; } }
+
+ /// <summary>
+ /// The actual concrete type of this Instance. Not every type of IInstance
+ /// can determine the ConcreteType
+ /// </summary>
+ public Type ConcreteType { get { return _instance.ConcreteType; } }
+
+
+ public string Description { get { return _instance.Description; } }
+ public Type PluginType { get { return _family.PluginType; } }
+
+ public void EjectObject()
+ {
+ _family.Eject(_instance);
+ }
+
+ public T Get<T>() where T : class
+ {
+ return _family.Build(_instance) as T;
+ }
+
+ public bool ObjectHasBeenCreated()
+ {
+ return _family.HasBeenCreated(_instance);
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Query/Model.cs
===================================================================
--- trunk/Source/StructureMap/Query/Model.cs 2009-12-27 16:51:25 UTC (rev 305)
+++ trunk/Source/StructureMap/Query/Model.cs 2009-12-28 01:17:17 UTC (rev 306)
@@ -1,19 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using StructureMap.Pipeline;
namespace StructureMap.Query
{
public class Model : IModel
{
- private readonly PipelineGraph _graph;
- private readonly IContainer _container;
+ private readonly IEnumerable<IPluginTypeConf...
[truncated message content] |
|
From: <jer...@us...> - 2009-12-27 16:51:33
|
Revision: 305
http://structuremap.svn.sourceforge.net/structuremap/?rev=305&view=rev
Author: jeremydmiller
Date: 2009-12-27 16:51:25 +0000 (Sun, 27 Dec 2009)
Log Message:
-----------
Some refactoring in preparation for redoing the "Model" query system
Modified Paths:
--------------
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs
trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/IContainer.cs
trunk/Source/StructureMap/ObjectFactory.cs
trunk/Source/StructureMap/Pipeline/Instance.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/PluginTypeConfiguration.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs
trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs
trunk/Source/StructureMap.Testing/ModelQueryTester.cs
trunk/Source/StructureMap.Testing/PipelineGraphTester.cs
Added Paths:
-----------
trunk/Source/StructureMap/Query/
trunk/Source/StructureMap/Query/IModel.cs
trunk/Source/StructureMap/Query/Model.cs
Removed Paths:
-------------
trunk/Source/StructureMap/IModel.cs
trunk/Source/StructureMap/Model.cs
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/Container.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -8,6 +8,7 @@
using StructureMap.Graph;
using StructureMap.Interceptors;
using StructureMap.Pipeline;
+using StructureMap.Query;
using StructureMap.TypeRules;
namespace StructureMap
Modified: trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -6,6 +6,7 @@
using StructureMap.Graph;
using StructureMap.Interceptors;
using StructureMap.Pipeline;
+using StructureMap.Query;
namespace StructureMap.Diagnostics
{
@@ -14,7 +15,7 @@
private readonly Stack<BuildDependency> _dependencyStack = new Stack<BuildDependency>();
private readonly List<ValidationError> _validationErrors = new List<ValidationError>();
private ErrorCollection _errors;
- private List<IInstance> _explicitInstances;
+ private List<Instance> _explicitInstances;
public ValidationBuildSession(PipelineGraph pipelineGraph, InterceptorLibrary interceptorLibrary)
: base(pipelineGraph, interceptorLibrary, new NulloObjectCache())
Modified: trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -2,6 +2,7 @@
using System.IO;
using System.Text;
using StructureMap.Pipeline;
+using StructureMap.Query;
using StructureMap.TypeRules;
namespace StructureMap.Diagnostics
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -3,6 +3,7 @@
using System.Linq;
using StructureMap.Attributes;
using StructureMap.Pipeline;
+using StructureMap.Query;
using StructureMap.TypeRules;
using StructureMap.Util;
@@ -324,6 +325,7 @@
};
}
+ [Obsolete("replace with Instances")]
public void ForInstance(string name, Action<Instance> action)
{
_instances.WithValue(name, action);
@@ -338,7 +340,9 @@
public int InstanceCount { get { return _instances.Count; } }
+ [Obsolete]
public IEnumerable<IInstance> Instances { get { return _instances.GetAll(); } }
+
public Instance MissingInstance { get; set; }
/// <summary>
Modified: trunk/Source/StructureMap/IContainer.cs
===================================================================
--- trunk/Source/StructureMap/IContainer.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/IContainer.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -2,6 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using StructureMap.Pipeline;
+using StructureMap.Query;
namespace StructureMap
{
Deleted: trunk/Source/StructureMap/IModel.cs
===================================================================
--- trunk/Source/StructureMap/IModel.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/IModel.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -1,81 +0,0 @@
-using System;
-using System.Collections.Generic;
-using StructureMap.Pipeline;
-
-namespace StructureMap
-{
- /// <summary>
- /// Models the state of a Container or ObjectFactory. Can be used to query for the
- /// existence of types registered with StructureMap
- /// </summary>
- public interface IModel
- {
- /// <summary>
- /// Access to all the <seealso cref="PluginTypeConfiguration">Plugin Type</seealso> registrations
- /// </summary>
- IEnumerable<PluginTypeConfiguration> PluginTypes { get; }
-
- IEnumerable<IInstance> AllInstances { get; }
-
- /// <summary>
- /// Can StructureMap fulfill a request to ObjectFactory.GetInstance(pluginType) from the
- /// current configuration. This does not include concrete classes that could be auto-configured
- /// upon demand
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- bool HasDefaultImplementationFor(Type pluginType);
-
- /// <summary>
- /// Can StructureMap fulfill a request to ObjectFactory.GetInstance<T>() from the
- /// current configuration. This does not include concrete classes that could be auto-configured
- /// upon demand
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- bool HasDefaultImplementationFor<T>();
-
- /// <summary>
- /// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- IEnumerable<IInstance> InstancesOf(Type pluginType);
-
- /// <summary>
- /// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
- /// </summary>
- /// <returns></returns>
- IEnumerable<IInstance> InstancesOf<T>();
-
- /// <summary>
- /// Does the current container have existing configuration for the "pluginType"
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- bool HasImplementationsFor(Type pluginType);
-
- /// <summary>
- /// Does the current container have existing configuration for the type T
- /// </summary>
- /// <returns></returns>
- bool HasImplementationsFor<T>();
-
- /// <summary>
- /// Find the concrete type for the default Instance of T.
- /// In other words, when I call Container.GetInstance(Type),
- /// what do I get? May be indeterminate
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- Type DefaultTypeFor<T>();
-
- /// <summary>
- /// Find the concrete type for the default Instance of pluginType.
- /// In other words, when I call Container.GetInstance(Type),
- /// what do I get? May be indeterminate
- /// </summary>
- /// <returns></returns>
- Type DefaultTypeFor(Type pluginType);
- }
-}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Model.cs
===================================================================
--- trunk/Source/StructureMap/Model.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/Model.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -1,85 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using StructureMap.Pipeline;
-
-namespace StructureMap
-{
- public class Model : IModel
- {
- private readonly PipelineGraph _graph;
- private readonly IContainer _container;
-
- internal Model(PipelineGraph graph, IContainer container)
- {
- _graph = graph;
- _container = container;
- }
-
- #region IModel Members
-
- public bool HasDefaultImplementationFor(Type pluginType)
- {
- return findForFamily(pluginType, f => f.Default != null);
- }
-
- private T findForFamily<T>(Type pluginType, Func<PluginTypeConfiguration, T> func)
- {
- PluginTypeConfiguration family = PluginTypes.FirstOrDefault(x => x.PluginType == pluginType);
- return family == null ? default(T) : func(family);
- }
-
- public bool HasDefaultImplementationFor<T>()
- {
- return HasDefaultImplementationFor(typeof (T));
- }
-
- public Type DefaultTypeFor<T>()
- {
- return DefaultTypeFor(typeof (T));
- }
-
- public Type DefaultTypeFor(Type pluginType)
- {
- return findForFamily(pluginType, f => f.Default == null ? null : f.Default.ConcreteType);
- }
-
- public IEnumerable<PluginTypeConfiguration> PluginTypes { get { return _graph.PluginTypes; } }
-
- public IEnumerable<IInstance> InstancesOf(Type pluginType)
- {
- return _graph.InstancesOf(pluginType);
- }
-
- public IEnumerable<IInstance> InstancesOf<T>()
- {
- return _graph.InstancesOf(typeof (T));
- }
-
- public bool HasImplementationsFor(Type pluginType)
- {
- return _graph.InstancesOf(pluginType).Count() > 0;
- }
-
- public bool HasImplementationsFor<T>()
- {
- return HasImplementationsFor(typeof (T));
- }
-
- public IEnumerable<IInstance> AllInstances
- {
- get
- {
- foreach (PluginTypeConfiguration pluginType in PluginTypes)
- {
- foreach (IInstance instance in pluginType.Instances)
- {
- yield return instance;
- }
- }
- }
- }
-
- #endregion
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap/ObjectFactory.cs
===================================================================
--- trunk/Source/StructureMap/ObjectFactory.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/ObjectFactory.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -3,6 +3,7 @@
using System.Collections.Generic;
using StructureMap.Graph;
using StructureMap.Pipeline;
+using StructureMap.Query;
namespace StructureMap
{
Modified: trunk/Source/StructureMap/Pipeline/Instance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Instance.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/Pipeline/Instance.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -2,23 +2,12 @@
using StructureMap.Diagnostics;
using StructureMap.Graph;
using StructureMap.Interceptors;
+using StructureMap.Query;
namespace StructureMap.Pipeline
{
- public interface IInstance
- {
- string Name { get; }
- /// <summary>
- /// The actual concrete type of this Instance. Not every type of IInstance
- /// can determine the ConcreteType
- /// </summary>
- Type ConcreteType { get; }
-
- string Description { get; }
- }
-
public interface IDiagnosticInstance : IInstance
{
bool CanBePartOfPluginFamily(PluginFamily family);
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -4,6 +4,7 @@
using StructureMap.Diagnostics;
using StructureMap.Graph;
using StructureMap.Pipeline;
+using StructureMap.Query;
namespace StructureMap
{
@@ -212,6 +213,7 @@
_profileManager.EjectAllInstancesOf<T>();
}
+ [Obsolete("Move this to PluginTypeConfiguration")]
public IEnumerable<IInstance> InstancesOf(Type pluginType)
{
if (_genericsGraph.HasFamily(pluginType))
@@ -227,16 +229,9 @@
return new IInstance[0];
}
- public List<IInstance> GetAllInstances()
+ public List<Instance> GetAllInstances()
{
- var list = new List<IInstance>();
-
- foreach (var pair in _factories)
- {
- list.AddRange(pair.Value.AllInstances);
- }
-
- return list;
+ return _factories.Values.SelectMany(x => x.AllInstances).ToList();
}
public bool HasDefaultForPluginType(Type pluginType)
Modified: trunk/Source/StructureMap/PluginTypeConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/PluginTypeConfiguration.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/PluginTypeConfiguration.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using StructureMap.Pipeline;
+using StructureMap.Query;
namespace StructureMap
{
@@ -13,7 +14,7 @@
/// <summary>
/// The "instance" that will be used when Container.GetInstance(PluginType) is called.
- /// See <see cref="StructureMap.Pipeline.IInstance">IInstance</see> for more information
+ /// See <see cref="IInstance">IInstance</see> for more information
/// </summary>
public IInstance Default { get; set; }
@@ -23,7 +24,7 @@
public ILifecycle Lifecycle { get; set; }
/// <summary>
- /// All of the <see cref="StructureMap.Pipeline.IInstance">IInstance</see>'s registered
+ /// All of the <see cref="IInstance">IInstance</see>'s registered
/// for this PluginType
/// </summary>
public IEnumerable<IInstance> Instances { get; set; }
Copied: trunk/Source/StructureMap/Query/IModel.cs (from rev 304, trunk/Source/StructureMap/IModel.cs)
===================================================================
--- trunk/Source/StructureMap/Query/IModel.cs (rev 0)
+++ trunk/Source/StructureMap/Query/IModel.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using StructureMap.Pipeline;
+
+namespace StructureMap.Query
+{
+
+ public interface IInstance
+ {
+ string Name { get; }
+
+ /// <summary>
+ /// The actual concrete type of this Instance. Not every type of IInstance
+ /// can determine the ConcreteType
+ /// </summary>
+ Type ConcreteType { get; }
+
+
+ string Description { get; }
+ }
+
+ /// <summary>
+ /// Models the state of a Container or ObjectFactory. Can be used to query for the
+ /// existence of types registered with StructureMap
+ /// </summary>
+ public interface IModel
+ {
+ /// <summary>
+ /// Access to all the <seealso cref="PluginTypeConfiguration">Plugin Type</seealso> registrations
+ /// </summary>
+ IEnumerable<PluginTypeConfiguration> PluginTypes { get; }
+
+ IEnumerable<IInstance> AllInstances { get; }
+
+ /// <summary>
+ /// Can StructureMap fulfill a request to ObjectFactory.GetInstance(pluginType) from the
+ /// current configuration. This does not include concrete classes that could be auto-configured
+ /// upon demand
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ bool HasDefaultImplementationFor(Type pluginType);
+
+ /// <summary>
+ /// Can StructureMap fulfill a request to ObjectFactory.GetInstance<T>() from the
+ /// current configuration. This does not include concrete classes that could be auto-configured
+ /// upon demand
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ bool HasDefaultImplementationFor<T>();
+
+ /// <summary>
+ /// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ IEnumerable<IInstance> InstancesOf(Type pluginType);
+
+ /// <summary>
+ /// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
+ /// </summary>
+ /// <returns></returns>
+ IEnumerable<IInstance> InstancesOf<T>();
+
+ /// <summary>
+ /// Does the current container have existing configuration for the "pluginType"
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ bool HasImplementationsFor(Type pluginType);
+
+ /// <summary>
+ /// Does the current container have existing configuration for the type T
+ /// </summary>
+ /// <returns></returns>
+ bool HasImplementationsFor<T>();
+
+ /// <summary>
+ /// Find the concrete type for the default Instance of T.
+ /// In other words, when I call Container.GetInstance(Type),
+ /// what do I get? May be indeterminate
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ Type DefaultTypeFor<T>();
+
+ /// <summary>
+ /// Find the concrete type for the default Instance of pluginType.
+ /// In other words, when I call Container.GetInstance(Type),
+ /// what do I get? May be indeterminate
+ /// </summary>
+ /// <returns></returns>
+ Type DefaultTypeFor(Type pluginType);
+ }
+}
\ No newline at end of file
Copied: trunk/Source/StructureMap/Query/Model.cs (from rev 304, trunk/Source/StructureMap/Model.cs)
===================================================================
--- trunk/Source/StructureMap/Query/Model.cs (rev 0)
+++ trunk/Source/StructureMap/Query/Model.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using StructureMap.Pipeline;
+
+namespace StructureMap.Query
+{
+ public class Model : IModel
+ {
+ private readonly PipelineGraph _graph;
+ private readonly IContainer _container;
+
+ internal Model(PipelineGraph graph, IContainer container)
+ {
+ _graph = graph;
+ _container = container;
+ }
+
+ #region IModel Members
+
+ public bool HasDefaultImplementationFor(Type pluginType)
+ {
+ return findForFamily(pluginType, f => f.Default != null);
+ }
+
+ private T findForFamily<T>(Type pluginType, Func<PluginTypeConfiguration, T> func)
+ {
+ PluginTypeConfiguration family = PluginTypes.FirstOrDefault(x => x.PluginType == pluginType);
+ return family == null ? default(T) : func(family);
+ }
+
+ public bool HasDefaultImplementationFor<T>()
+ {
+ return HasDefaultImplementationFor(typeof (T));
+ }
+
+ public Type DefaultTypeFor<T>()
+ {
+ return DefaultTypeFor(typeof (T));
+ }
+
+ public Type DefaultTypeFor(Type pluginType)
+ {
+ return findForFamily(pluginType, f => f.Default == null ? null : f.Default.ConcreteType);
+ }
+
+ public IEnumerable<PluginTypeConfiguration> PluginTypes { get { return _graph.PluginTypes; } }
+
+ public IEnumerable<IInstance> InstancesOf(Type pluginType)
+ {
+ return _graph.InstancesOf(pluginType);
+ }
+
+ public IEnumerable<IInstance> InstancesOf<T>()
+ {
+ return _graph.InstancesOf(typeof (T));
+ }
+
+ public bool HasImplementationsFor(Type pluginType)
+ {
+ return _graph.InstancesOf(pluginType).Count() > 0;
+ }
+
+ public bool HasImplementationsFor<T>()
+ {
+ return HasImplementationsFor(typeof (T));
+ }
+
+ public IEnumerable<IInstance> AllInstances
+ {
+ get
+ {
+ foreach (PluginTypeConfiguration pluginType in PluginTypes)
+ {
+ foreach (IInstance instance in pluginType.Instances)
+ {
+ yield return instance;
+ }
+ }
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap/StructureMap.csproj 2009-12-27 16:51:25 UTC (rev 305)
@@ -367,7 +367,7 @@
<Compile Include="Graph\PluggableAttributeScanner.cs" />
<Compile Include="Graph\PluginCache.cs" />
<Compile Include="IContext.cs" />
- <Compile Include="IModel.cs" />
+ <Compile Include="Query\IModel.cs" />
<Compile Include="Pipeline\Arguments.cs" />
<Compile Include="Pipeline\ArrayCoercion.cs" />
<Compile Include="Pipeline\ConditionalInstance.cs" />
@@ -392,7 +392,7 @@
<Compile Include="TypeExtensions.cs" />
<Compile Include="IBootstrapper.cs" />
<Compile Include="InitializationExpression.cs" />
- <Compile Include="Model.cs" />
+ <Compile Include="Query\Model.cs" />
<Compile Include="Pipeline\BuildFrame.cs" />
<Compile Include="Pipeline\BuildStack.cs" />
<Compile Include="Pipeline\ConfiguredInstanceBase.cs" />
Modified: trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs
===================================================================
--- trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -4,6 +4,7 @@
using System.Linq;
using Microsoft.VisualStudio.DebuggerVisualizers;
using StructureMap.Pipeline;
+using StructureMap.Query;
namespace StructureMap.DebuggerVisualizers
{
Modified: trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -6,6 +6,7 @@
using StructureMap.Configuration.DSL;
using StructureMap.Graph;
using StructureMap.Pipeline;
+using StructureMap.Query;
using StructureMap.Testing.DocumentationExamples;
using StructureMap.Testing.Widget;
using StructureMap.Testing.Widget3;
Modified: trunk/Source/StructureMap.Testing/ModelQueryTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/ModelQueryTester.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap.Testing/ModelQueryTester.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -3,6 +3,7 @@
using NUnit.Framework;
using StructureMap.Configuration.DSL;
using StructureMap.Graph;
+using StructureMap.Query;
using StructureMap.Testing.GenericWidgets;
using StructureMap.Testing.Graph;
using StructureMap.Testing.Widget;
Modified: trunk/Source/StructureMap.Testing/PipelineGraphTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/PipelineGraphTester.cs 2009-12-27 15:59:19 UTC (rev 304)
+++ trunk/Source/StructureMap.Testing/PipelineGraphTester.cs 2009-12-27 16:51:25 UTC (rev 305)
@@ -4,6 +4,7 @@
using StructureMap.Configuration.DSL;
using StructureMap.Graph;
using StructureMap.Pipeline;
+using StructureMap.Query;
using StructureMap.Testing.GenericWidgets;
using StructureMap.Testing.Graph;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-27 15:59:29
|
Revision: 304
http://structuremap.svn.sourceforge.net/structuremap/?rev=304&view=rev
Author: jeremydmiller
Date: 2009-12-27 15:59:19 +0000 (Sun, 27 Dec 2009)
Log Message:
-----------
refactored and also extended the IObjectCache, MainObjectCache classes to get ready for extensions to "Model"
Modified Paths:
--------------
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Model.cs
trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
trunk/Source/StructureMap/Pipeline/IObjectCache.cs
trunk/Source/StructureMap/Pipeline/Instance.cs
trunk/Source/StructureMap/Pipeline/MainObjectCache.cs
trunk/Source/StructureMap/Pipeline/NulloObjectCache.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap.Testing/ModelQueryTester.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
Added Paths:
-----------
trunk/Source/StructureMap/IModel.cs
trunk/Source/StructureMap.Testing/Pipeline/MainObjectCacheTester.cs
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-26 20:51:05 UTC (rev 303)
+++ trunk/Source/StructureMap/Container.cs 2009-12-27 15:59:19 UTC (rev 304)
@@ -64,7 +64,7 @@
/// <summary>
/// Provides queryable access to the configured PluginType's and Instances of this Container
/// </summary>
- public IModel Model { get { return new Model(_pipelineGraph); } }
+ public IModel Model { get { return new Model(_pipelineGraph, this); } }
/// <summary>
/// Creates or finds the named instance of T
Added: trunk/Source/StructureMap/IModel.cs
===================================================================
--- trunk/Source/StructureMap/IModel.cs (rev 0)
+++ trunk/Source/StructureMap/IModel.cs 2009-12-27 15:59:19 UTC (rev 304)
@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using StructureMap.Pipeline;
+
+namespace StructureMap
+{
+ /// <summary>
+ /// Models the state of a Container or ObjectFactory. Can be used to query for the
+ /// existence of types registered with StructureMap
+ /// </summary>
+ public interface IModel
+ {
+ /// <summary>
+ /// Access to all the <seealso cref="PluginTypeConfiguration">Plugin Type</seealso> registrations
+ /// </summary>
+ IEnumerable<PluginTypeConfiguration> PluginTypes { get; }
+
+ IEnumerable<IInstance> AllInstances { get; }
+
+ /// <summary>
+ /// Can StructureMap fulfill a request to ObjectFactory.GetInstance(pluginType) from the
+ /// current configuration. This does not include concrete classes that could be auto-configured
+ /// upon demand
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ bool HasDefaultImplementationFor(Type pluginType);
+
+ /// <summary>
+ /// Can StructureMap fulfill a request to ObjectFactory.GetInstance<T>() from the
+ /// current configuration. This does not include concrete classes that could be auto-configured
+ /// upon demand
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ bool HasDefaultImplementationFor<T>();
+
+ /// <summary>
+ /// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ IEnumerable<IInstance> InstancesOf(Type pluginType);
+
+ /// <summary>
+ /// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
+ /// </summary>
+ /// <returns></returns>
+ IEnumerable<IInstance> InstancesOf<T>();
+
+ /// <summary>
+ /// Does the current container have existing configuration for the "pluginType"
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ bool HasImplementationsFor(Type pluginType);
+
+ /// <summary>
+ /// Does the current container have existing configuration for the type T
+ /// </summary>
+ /// <returns></returns>
+ bool HasImplementationsFor<T>();
+
+ /// <summary>
+ /// Find the concrete type for the default Instance of T.
+ /// In other words, when I call Container.GetInstance(Type),
+ /// what do I get? May be indeterminate
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ Type DefaultTypeFor<T>();
+
+ /// <summary>
+ /// Find the concrete type for the default Instance of pluginType.
+ /// In other words, when I call Container.GetInstance(Type),
+ /// what do I get? May be indeterminate
+ /// </summary>
+ /// <returns></returns>
+ Type DefaultTypeFor(Type pluginType);
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Model.cs
===================================================================
--- trunk/Source/StructureMap/Model.cs 2009-12-26 20:51:05 UTC (rev 303)
+++ trunk/Source/StructureMap/Model.cs 2009-12-27 15:59:19 UTC (rev 304)
@@ -5,79 +5,28 @@
namespace StructureMap
{
- /// <summary>
- /// Models the state of a Container or ObjectFactory. Can be used to query for the
- /// existence of types registered with StructureMap
- /// </summary>
- public interface IModel
- {
- /// <summary>
- /// Access to all the <seealso cref="PluginTypeConfiguration">Plugin Type</seealso> registrations
- /// </summary>
- IEnumerable<PluginTypeConfiguration> PluginTypes { get; }
-
- IEnumerable<IInstance> AllInstances { get; }
-
- /// <summary>
- /// Can StructureMap fulfill a request to ObjectFactory.GetInstance(pluginType) from the
- /// current configuration. This does not include concrete classes that could be auto-configured
- /// upon demand
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- bool HasDefaultImplementationFor(Type pluginType);
-
- /// <summary>
- /// Can StructureMap fulfill a request to ObjectFactory.GetInstance<T>() from the
- /// current configuration. This does not include concrete classes that could be auto-configured
- /// upon demand
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- bool HasDefaultImplementationFor<T>();
-
- /// <summary>
- /// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- IEnumerable<IInstance> InstancesOf(Type pluginType);
-
- /// <summary>
- /// Queryable access to all of the <see cref="IInstance">IInstance</see> for a given PluginType
- /// </summary>
- /// <returns></returns>
- IEnumerable<IInstance> InstancesOf<T>();
-
- /// <summary>
- /// Does the current container have existing configuration for the "pluginType"
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- bool HasImplementationsFor(Type pluginType);
-
- /// <summary>
- /// Does the current container have existing configuration for the type T
- /// </summary>
- /// <returns></returns>
- bool HasImplementationsFor<T>();
- }
-
public class Model : IModel
{
private readonly PipelineGraph _graph;
+ private readonly IContainer _container;
- internal Model(PipelineGraph graph)
+ internal Model(PipelineGraph graph, IContainer container)
{
_graph = graph;
+ _container = container;
}
#region IModel Members
public bool HasDefaultImplementationFor(Type pluginType)
{
+ return findForFamily(pluginType, f => f.Default != null);
+ }
+
+ private T findForFamily<T>(Type pluginType, Func<PluginTypeConfiguration, T> func)
+ {
PluginTypeConfiguration family = PluginTypes.FirstOrDefault(x => x.PluginType == pluginType);
- return family == null ? false : family.Default != null;
+ return family == null ? default(T) : func(family);
}
public bool HasDefaultImplementationFor<T>()
@@ -85,6 +34,16 @@
return HasDefaultImplementationFor(typeof (T));
}
+ public Type DefaultTypeFor<T>()
+ {
+ return DefaultTypeFor(typeof (T));
+ }
+
+ public Type DefaultTypeFor(Type pluginType)
+ {
+ return findForFamily(pluginType, f => f.Default == null ? null : f.Default.ConcreteType);
+ }
+
public IEnumerable<PluginTypeConfiguration> PluginTypes { get { return _graph.PluginTypes; } }
public IEnumerable<IInstance> InstancesOf(Type pluginType)
Modified: trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs 2009-12-26 20:51:05 UTC (rev 303)
+++ trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs 2009-12-27 15:59:19 UTC (rev 304)
@@ -119,11 +119,6 @@
return instance;
}
- protected override void addTemplatedInstanceTo(PluginFamily family, Type[] templateTypes)
- {
- throw new NotImplementedException();
- }
-
protected override sealed string getDescription()
{
return "Configured Instance of " + _plugin.PluggedType.AssemblyQualifiedName;
Modified: trunk/Source/StructureMap/Pipeline/IObjectCache.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/IObjectCache.cs 2009-12-26 20:51:05 UTC (rev 303)
+++ trunk/Source/StructureMap/Pipeline/IObjectCache.cs 2009-12-27 15:59:19 UTC (rev 304)
@@ -8,6 +8,11 @@
int Count { get; }
+ bool Has(Type pluginType, Instance instance);
+
+ void Eject(Type pluginType, Instance instance);
+
+
object Get(Type pluginType, Instance instance);
void Set(Type pluginType, Instance instance, object value);
void DisposeAndClear();
Modified: trunk/Source/StructureMap/Pipeline/Instance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Instance.cs 2009-12-26 20:51:05 UTC (rev 303)
+++ trunk/Source/StructureMap/Pipeline/Instance.cs 2009-12-27 15:59:19 UTC (rev 304)
@@ -25,9 +25,6 @@
Instance FindInstanceForProfile(PluginFamily family, string profileName, GraphLog log);
InstanceToken CreateToken();
void Preprocess(PluginFamily family);
-
- [Obsolete("can go away")]
- void AddTemplatedInstanceTo(PluginFamily family, Type[] templateTypes);
}
public abstract class Instance : IDiagnosticInstance
@@ -73,12 +70,6 @@
preprocess(family);
}
- [Obsolete("Can go")]
- void IDiagnosticInstance.AddTemplatedInstanceTo(PluginFamily family, Type[] templateTypes)
- {
- addTemplatedInstanceTo(family, templateTypes);
- }
-
Type IInstance.ConcreteType { get { return getConcreteType(null); } }
string IInstance.Description { get { return getDescription(); } }
Modified: trunk/Source/StructureMap/Pipeline/MainObjectCache.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/MainObjectCache.cs 2009-12-26 20:51:05 UTC (rev 303)
+++ trunk/Source/StructureMap/Pipeline/MainObjectCache.cs 2009-12-27 15:59:19 UTC (rev 304)
@@ -1,21 +1,38 @@
using System;
using System.Collections.Generic;
+using StructureMap.Util;
namespace StructureMap.Pipeline
{
public class MainObjectCache : IObjectCache
{
private readonly object _locker = new object();
- private readonly IDictionary<InstanceKey, object> _objects = new Dictionary<InstanceKey, object>();
+ private readonly Cache<InstanceKey, object> _objects = new Cache<InstanceKey, object>();
public object Locker { get { return _locker; } }
public int Count { get { return _objects.Count; } }
+ public bool Has(Type pluginType, Instance instance)
+ {
+ var key = new InstanceKey(instance, pluginType);
+ return _objects.Has(key);
+ }
+
+ public void Eject(Type pluginType, Instance instance)
+ {
+ var key = new InstanceKey(instance, pluginType);
+ if (!_objects.Has(key)) return;
+
+ var disposable = _objects[key] as IDisposable;
+ _objects.Remove(key);
+ disposeObject(disposable);
+ }
+
public object Get(Type pluginType, Instance instance)
{
var key = new InstanceKey(instance, pluginType);
- return _objects.ContainsKey(key) ? _objects[key] : null;
+ return _objects.Has(key) ? _objects[key] : null;
}
public void Set(Type pluginType, Instance instance, object value)
@@ -25,7 +42,7 @@
try
{
var key = new InstanceKey(instance, pluginType);
- _objects.Add(key, value);
+ _objects[key] = value;
}
catch (ArgumentException e)
{
@@ -39,25 +56,29 @@
{
lock (Locker)
{
- foreach (object @object in _objects.Values)
+ _objects.Each(@object =>
{
- if (@object is Container) continue;
+ if (@object is Container) return;
- var disposable = @object as IDisposable;
- if (disposable != null)
- {
- try
- {
- disposable.Dispose();
- }
- catch (Exception)
- {
- }
- }
- }
+ disposeObject(@object as IDisposable);
+ });
_objects.Clear();
}
}
+
+ private void disposeObject(IDisposable disposable)
+ {
+ if (disposable != null)
+ {
+ try
+ {
+ disposable.Dispose();
+ }
+ catch (Exception)
+ {
+ }
+ }
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/NulloObjectCache.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/NulloObjectCache.cs 2009-12-26 20:51:05 UTC (rev 303)
+++ trunk/Source/StructureMap/Pipeline/NulloObjectCache.cs 2009-12-27 15:59:19 UTC (rev 304)
@@ -8,6 +8,15 @@
public int Count { get { return 0; } }
+ public bool Has(Type pluginType, Instance instance)
+ {
+ return false;
+ }
+
+ public void Eject(Type pluginType, Instance instance)
+ {
+ }
+
public object Get(Type pluginType, Instance instance)
{
return null;
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-12-26 20:51:05 UTC (rev 303)
+++ trunk/Source/StructureMap/StructureMap.csproj 2009-12-27 15:59:19 UTC (rev 304)
@@ -367,6 +367,7 @@
<Compile Include="Graph\PluggableAttributeScanner.cs" />
<Compile Include="Graph\PluginCache.cs" />
<Compile Include="IContext.cs" />
+ <Compile Include="IModel.cs" />
<Compile Include="Pipeline\Arguments.cs" />
<Compile Include="Pipeline\ArrayCoercion.cs" />
<Compile Include="Pipeline\ConditionalInstance.cs" />
Modified: trunk/Source/StructureMap.Testing/ModelQueryTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/ModelQueryTester.cs 2009-12-26 20:51:05 UTC (rev 303)
+++ trunk/Source/StructureMap.Testing/ModelQueryTester.cs 2009-12-27 15:59:19 UTC (rev 304)
@@ -5,6 +5,7 @@
using StructureMap.Graph;
using StructureMap.Testing.GenericWidgets;
using StructureMap.Testing.Graph;
+using StructureMap.Testing.Widget;
namespace StructureMap.Testing
{
@@ -30,7 +31,7 @@
PluginGraph graph = registry.Build();
var pipeline = new PipelineGraph(graph);
- _model = new Model(pipeline);
+ _model = new Container(graph).Model;
_container = new Container(graph);
}
@@ -54,7 +55,7 @@
}
- private Model _model;
+ private IModel _model;
private Container _container;
@@ -67,6 +68,16 @@
}
[Test]
+ public void the_default_type_for()
+ {
+ _model.DefaultTypeFor<ISomething>().ShouldEqual(typeof (SomethingOne));
+ _model.DefaultTypeFor<IWidget>().ShouldBeNull();
+
+ _model.DefaultTypeFor(typeof (IService<>)).ShouldBeNull();
+ _model.DefaultTypeFor(typeof(ISomething)).ShouldEqual(typeof(SomethingOne));
+ }
+
+ [Test]
public void HasImplementationFor_w_container()
{
_container.Model.HasDefaultImplementationFor(typeof (ISomething)).ShouldBeTrue();
@@ -74,6 +85,8 @@
_container.Model.HasDefaultImplementationFor(typeof (IServiceProvider)).ShouldBeFalse();
}
+
+
[Test]
public void HasImplementationsFor()
{
@@ -109,7 +122,8 @@
[Test]
public void Iterate_over_pluginTypes()
{
- _model.PluginTypes.Count().ShouldEqual(3);
+ // 3 registered plus the 4th is the IContainer itself
+ _model.PluginTypes.Count().ShouldEqual(4);
}
[Test]
Added: trunk/Source/StructureMap.Testing/Pipeline/MainObjectCacheTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/MainObjectCacheTester.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/Pipeline/MainObjectCacheTester.cs 2009-12-27 15:59:19 UTC (rev 304)
@@ -0,0 +1,69 @@
+using System;
+using NUnit.Framework;
+using Rhino.Mocks;
+using StructureMap.Pipeline;
+using StructureMap.Testing.Widget;
+
+namespace StructureMap.Testing.Pipeline
+{
+ [TestFixture]
+ public class MainObjectCacheTester
+ {
+ private MainObjectCache cache;
+
+ [SetUp]
+ public void SetUp()
+ {
+ cache = new MainObjectCache();
+ }
+
+ [Test]
+ public void has()
+ {
+ var widget = new AWidget();
+ var instance = new ObjectInstance(widget);
+
+ cache.Has(typeof(IWidget), instance).ShouldBeFalse();
+
+ cache.Set(typeof(Rule), instance, widget);
+
+ cache.Has(typeof(IWidget), instance).ShouldBeFalse();
+
+ cache.Set(typeof(IWidget), new ObjectInstance(new AWidget()), widget);
+
+ cache.Has(typeof(IWidget), instance).ShouldBeFalse();
+
+ cache.Set(typeof(IWidget), instance, widget);
+
+ cache.Has(typeof(IWidget), instance).ShouldBeTrue();
+ }
+
+ [Test]
+ public void eject_a_disposable_object()
+ {
+ var disposable = MockRepository.GenerateMock<IDisposable>();
+ var instance = new ObjectInstance(disposable);
+
+ cache.Set(typeof(IWidget), instance, disposable);
+
+ cache.Eject(typeof(IWidget), instance);
+
+ cache.Has(typeof(IWidget), instance).ShouldBeFalse();
+
+ disposable.AssertWasCalled(x => x.Dispose());
+ }
+
+ [Test]
+ public void eject_a_non_disposable_object()
+ {
+ var widget = new AWidget();
+ var instance = new ObjectInstance(widget);
+
+ cache.Set(typeof(IWidget), instance, widget);
+
+ cache.Eject(typeof(IWidget), instance);
+
+ cache.Has(typeof(IWidget), instance).ShouldBeFalse();
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-26 20:51:05 UTC (rev 303)
+++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-27 15:59:19 UTC (rev 304)
@@ -364,6 +364,7 @@
<Compile Include="Pipeline\GenericsHelperExpressionTester.cs" />
<Compile Include="Pipeline\HybridBuildLifecycleTester.cs" />
<Compile Include="Pipeline\InstanceTester.cs" />
+ <Compile Include="Pipeline\MainObjectCacheTester.cs" />
<Compile Include="Pipeline\ObjectInstanceTester.cs" />
<Compile Include="Pipeline\MissingInstanceTester.cs" />
<Compile Include="Pipeline\NestedContainerSupportTester.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 20:51:14
|
Revision: 303
http://structuremap.svn.sourceforge.net/structuremap/?rev=303&view=rev
Author: jeremydmiller
Date: 2009-12-26 20:51:05 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
adding more capabilities to the GenericFamilyExpression to bring it up to par with the strong typed version
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-26 20:31:30 UTC (rev 302)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-26 20:51:05 UTC (rev 303)
@@ -67,6 +67,23 @@
return TheDefaultIsConcreteType(concreteType);
}
+
+ public LambdaInstance<object> Use(Func<IContext, object> func)
+ {
+ var instance = new LambdaInstance<object>(func);
+ Use(instance);
+
+ return instance;
+ }
+
+ public LambdaInstance<object> Add(Func<IContext, object> func)
+ {
+ var instance = new LambdaInstance<object>(func);
+ Add(instance);
+
+ return instance;
+ }
+
/// <summary>
/// Shortcut to add a value by type
/// </summary>
@@ -200,6 +217,45 @@
}
/// <summary>
+ /// Convenience method to mark a PluginFamily as a Singleton
+ /// </summary>
+ /// <returns></returns>
+ public GenericFamilyExpression Singleton()
+ {
+ return LifecycleIs(InstanceScope.Singleton);
+ }
+
+
+ /// <summary>
+ /// Convenience method to mark a PluginFamily as a Hybrid lifecycle
+ /// </summary>
+ /// <returns></returns>
+ public GenericFamilyExpression HybridHttpOrThreadLocalScoped()
+ {
+ return LifecycleIs(InstanceScope.Hybrid);
+ }
+
+ /// <summary>
+ /// Convenience method to mark a PluginFamily as HttpContext scoped
+ /// </summary>
+ /// <returns></returns>
+ public GenericFamilyExpression HttpContextScoped()
+ {
+ return LifecycleIs(InstanceScope.HttpContext);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="lifecycle"></param>
+ /// <returns></returns>
+ public GenericFamilyExpression LifecycleIs(InstanceScope lifecycle)
+ {
+ return alterAndContinue(family => family.SetScopeTo(lifecycle));
+ }
+
+
+ /// <summary>
/// Shortcut method to add an additional Instance to this Plugin Type
/// as just a Concrete Type. You can also chain other declarations after
/// this method to add constructor and setter arguments
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 20:31:38
|
Revision: 302
http://structuremap.svn.sourceforge.net/structuremap/?rev=302&view=rev
Author: jeremydmiller
Date: 2009-12-26 20:31:30 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
Introduced the new IRegistrationConvention, replacing all ITypeScanner classes
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/Graph/AssemblyScanner.cs
trunk/Source/StructureMap/Graph/FamilyAttributeScanner.cs
trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs
trunk/Source/StructureMap/Graph/FindRegistriesScanner.cs
trunk/Source/StructureMap/Graph/ITypeScanner.cs
trunk/Source/StructureMap/Graph/ImplementationMap.cs
trunk/Source/StructureMap/Graph/PluggableAttributeScanner.cs
trunk/Source/StructureMap/Graph/PluginGraph.cs
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -225,6 +225,13 @@
/// <typeparam name="U"></typeparam>
/// <returns></returns>
LambdaInstance<T> Redirect<T, U>() where T : class where U : class;
+
+ /// <summary>
+ /// Advanced Usage Only! Skips the Registry and goes right to the inner
+ /// Semantic Model of StructureMap. Use with care
+ /// </summary>
+ /// <param name="configure"></param>
+ void Configure(Action<PluginGraph> configure);
}
/// <summary>
@@ -641,6 +648,16 @@
});
}
+ /// <summary>
+ /// Advanced Usage Only! Skips the Registry and goes right to the inner
+ /// Semantic Model of StructureMap. Use with care
+ /// </summary>
+ /// <param name="configure"></param>
+ public void Configure(Action<PluginGraph> configure)
+ {
+ _actions.Add(configure);
+ }
+
#region Nested type: BuildWithExpression
/// <summary>
Modified: trunk/Source/StructureMap/Graph/AssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -49,8 +49,8 @@
public AssemblyScanner()
{
- With<FamilyAttributeScanner>();
- With<PluggableAttributeScanner>();
+ Convention<FamilyAttributeScanner>();
+ Convention<PluggableAttributeScanner>();
}
public int Count { get { return _assemblies.Count; } }
@@ -103,7 +103,7 @@
public void LookForRegistries()
{
- With<FindRegistriesScanner>();
+ Convention<FindRegistriesScanner>();
}
public void TheCallingAssembly()
@@ -141,8 +141,8 @@
public void IgnoreStructureMapAttributes()
{
- _scanners.RemoveAll(scanner => scanner is FamilyAttributeScanner);
- _scanners.RemoveAll(scanner => scanner is PluggableAttributeScanner);
+ _conventions.RemoveAll(scanner => scanner is FamilyAttributeScanner);
+ _conventions.RemoveAll(scanner => scanner is PluggableAttributeScanner);
}
@@ -189,7 +189,7 @@
public void SingleImplementationsOfInterface()
{
- _scanners.Fill(_implementationMap);
+ _conventions.Fill(_implementationMap);
_postScanningActions.Add(graph => _implementationMap.RegisterSingleImplementations(graph));
}
Modified: trunk/Source/StructureMap/Graph/FamilyAttributeScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/FamilyAttributeScanner.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap/Graph/FamilyAttributeScanner.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -1,19 +1,16 @@
using System;
+using StructureMap.Configuration.DSL;
namespace StructureMap.Graph
{
- public class FamilyAttributeScanner : ITypeScanner
+ public class FamilyAttributeScanner : IRegistrationConvention
{
- #region ITypeScanner Members
-
- public void Process(Type type, PluginGraph graph)
+ public void Process(Type type, Registry registry)
{
if (PluginFamilyAttribute.MarkedAsPluginFamily(type))
{
- graph.CreateFamily(type);
+ registry.Configure(x => x.FindFamily(type));
}
}
-
- #endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs
===================================================================
--- trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -1,9 +1,10 @@
using System;
+using StructureMap.Configuration.DSL;
using StructureMap.TypeRules;
namespace StructureMap.Graph
{
- public class FindAllTypesFilter : ITypeScanner
+ public class FindAllTypesFilter : IRegistrationConvention
{
private readonly Type _pluginType;
private Func<Type, string> _getName = type => PluginCache.GetPlugin(type).ConcreteKey;
@@ -13,22 +14,18 @@
_pluginType = pluginType;
}
- #region ITypeScanner Members
+ public void NameBy(Func<Type, string> getName)
+ {
+ _getName = getName;
+ }
- public void Process(Type type, PluginGraph graph)
+ public void Process(Type type, Registry registry)
{
if (type.CanBeCastTo(_pluginType) && Constructor.HasConstructors(type))
{
string name = _getName(type);
- graph.AddType(_pluginType, type, name);
+ registry.AddType(_pluginType, type, name);
}
}
-
- public void NameBy(Func<Type, string> getName)
- {
- _getName = getName;
- }
-
- #endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/FindRegistriesScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/FindRegistriesScanner.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap/Graph/FindRegistriesScanner.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -3,26 +3,14 @@
namespace StructureMap.Graph
{
- public class FindRegistriesScanner : ITypeScanner
+ public class FindRegistriesScanner : IRegistrationConvention
{
- #region ITypeScanner Members
-
- public void Process(Type type, PluginGraph graph)
+ public void Process(Type type, Registry registry)
{
- if (!Registry.IsPublicRegistry(type)) return;
-
- foreach (Registry previous in graph.Registries)
+ if (Registry.IsPublicRegistry(type))
{
- if (previous.GetType().Equals(type))
- {
- return;
- }
+ registry.Configure(x => x.ImportRegistry(type));
}
-
- var registry = (Registry) Activator.CreateInstance(type);
- registry.ConfigurePluginGraph(graph);
}
-
- #endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/ITypeScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/ITypeScanner.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap/Graph/ITypeScanner.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -36,7 +36,7 @@
}
}
- public class GenericConnectionScanner : ITypeScanner
+ public class GenericConnectionScanner : IRegistrationConvention
{
private readonly Type _openType;
@@ -50,12 +50,12 @@
}
}
- public void Process(Type type, PluginGraph graph)
+ public void Process(Type type, Registry registry)
{
Type interfaceType = type.FindInterfaceThatCloses(_openType);
if (interfaceType != null)
{
- graph.AddType(interfaceType, type);
+ registry.For(interfaceType).Add(type);
}
}
}
Modified: trunk/Source/StructureMap/Graph/ImplementationMap.cs
===================================================================
--- trunk/Source/StructureMap/Graph/ImplementationMap.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap/Graph/ImplementationMap.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -1,20 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using StructureMap.Configuration.DSL;
using StructureMap.TypeRules;
using StructureMap.Util;
namespace StructureMap.Graph
{
- public class ImplementationMap : ITypeScanner
+ public class ImplementationMap : IRegistrationConvention
{
private readonly Cache<Type, List<Type>> _types = new Cache<Type, List<Type>>(t => new List<Type>());
- public void Process(Type type, PluginGraph graph)
- {
- RegisterType(type);
- }
-
public void Register(Type interfaceType, Type concreteType)
{
_types[interfaceType].Add(concreteType);
@@ -37,5 +33,10 @@
}
});
}
+
+ public void Process(Type type, Registry registry)
+ {
+ RegisterType(type);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/PluggableAttributeScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluggableAttributeScanner.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap/Graph/PluggableAttributeScanner.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -1,19 +1,16 @@
using System;
+using StructureMap.Configuration.DSL;
namespace StructureMap.Graph
{
- public class PluggableAttributeScanner : ITypeScanner
+ public class PluggableAttributeScanner : IRegistrationConvention
{
- #region ITypeScanner Members
-
- public void Process(Type type, PluginGraph graph)
+ public void Process(Type type, Registry registry)
{
if (PluggableAttribute.MarkedAsPluggable(type))
{
- graph.AddType(type);
+ registry.AddType(type);
}
}
-
- #endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/PluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginGraph.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap/Graph/PluginGraph.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -5,6 +5,7 @@
using StructureMap.Diagnostics;
using StructureMap.Interceptors;
using StructureMap.Pipeline;
+using System.Linq;
namespace StructureMap.Graph
{
@@ -218,5 +219,13 @@
registry.ConfigurePluginGraph(this);
}
+
+ public void ImportRegistry(Type type)
+ {
+ if (Registries.Any(x => x.GetType() == type)) return;
+
+ var registry = (Registry)Activator.CreateInstance(type);
+ registry.ConfigurePluginGraph(this);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -246,6 +246,8 @@
{
return IsChild(type) || IsChildArray(type);
}
+
+
}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs 2009-12-26 19:29:05 UTC (rev 301)
+++ trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs 2009-12-26 20:31:30 UTC (rev 302)
@@ -194,10 +194,19 @@
var scanner = new FamilyAttributeScanner();
var graph = new PluginGraph();
- scanner.Process(typeof (ITypeThatHasAttributeButIsNotInRegistry), graph);
+ var registry = new Registry();
+
+ scanner.Process(typeof (ITypeThatHasAttributeButIsNotInRegistry), registry);
+ registry.ConfigurePluginGraph(graph);
+
graph.PluginFamilies.Contains(typeof (ITypeThatHasAttributeButIsNotInRegistry)).ShouldBeTrue();
- scanner.Process(GetType(), graph);
+ graph = new PluginGraph();
+ registry = new Registry();
+
+ scanner.Process(GetType(), registry);
+ registry.ConfigurePluginGraph(graph);
+
graph.PluginFamilies.Contains(GetType()).ShouldBeFalse();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 19:29:17
|
Revision: 301
http://structuremap.svn.sourceforge.net/structuremap/?rev=301&view=rev
Author: jeremydmiller
Date: 2009-12-26 19:29:05 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
converted the DefaultConventionScanner to be a RegistrationConvention
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/Graph/AssemblyScanner.cs
trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
trunk/Source/StructureMap/Graph/IAssemblyScanner.cs
trunk/Source/StructureMap/Graph/ITypeScanner.cs
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap.Testing/Graph/DefaultConventionScanningTester.cs
trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-26 18:39:40 UTC (rev 300)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-26 19:29:05 UTC (rev 301)
@@ -88,6 +88,7 @@
/// </summary>
/// <param name="concreteType"></param>
/// <returns></returns>
+ [Obsolete("Switch to Add()")]
public ConfiguredInstance AddType(Type concreteType)
{
var instance = new ConfiguredInstance(concreteType);
@@ -97,7 +98,19 @@
return instance;
}
+ /// <summary>
+ /// Shortcut method to add an additional Instance to this Plugin Type
+ /// as just a Concrete Type. This will only work if the Concrete Type
+ /// has no primitive constructor or mandatory Setter arguments.
+ /// </summary>
+ /// <param name="concreteType"></param>
+ /// <returns></returns>
+ public ConfiguredInstance Add(Type concreteType)
+ {
+ return AddType(concreteType);
+ }
+
public GenericFamilyExpression Add(Instance instance)
{
return alterAndContinue(family => family.AddInstance(instance));
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-26 18:39:40 UTC (rev 300)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-26 19:29:05 UTC (rev 301)
@@ -8,6 +8,225 @@
namespace StructureMap.Configuration.DSL
{
+ public interface IRegistry
+ {
+ /// <summary>
+ /// Adds the concreteType as an Instance of the pluginType
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="concreteType"></param>
+ void AddType(Type pluginType, Type concreteType);
+
+ /// <summary>
+ /// Adds the concreteType as an Instance of the pluginType with a name
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="concreteType"></param>
+ /// <param name="name"></param>
+ void AddType(Type pluginType, Type concreteType, string name);
+
+ /// <summary>
+ /// Add the pluggedType as an instance to any configured pluginType where pluggedType
+ /// could be assigned to the pluginType
+ /// </summary>
+ /// <param name="pluggedType"></param>
+ void AddType(Type pluggedType);
+
+ /// <summary>
+ /// Imports the configuration from another registry into this registry.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void IncludeRegistry<T>() where T : Registry, new();
+
+ /// <summary>
+ /// Imports the configuration from another registry into this registry.
+ /// </summary>
+ /// <param name="registry"></param>
+ void IncludeRegistry(Registry registry);
+
+ /// <summary>
+ /// Expression Builder used to define policies for a PluginType including
+ /// Scoping, the Default Instance, and interception. BuildInstancesOf()
+ /// and ForRequestedType() are synonyms
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ [Obsolete("Change to For<T>()")]
+ CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();
+
+ /// <summary>
+ /// Expression Builder used to define policies for a PluginType including
+ /// Scoping, the Default Instance, and interception. This method is specifically
+ /// meant for registering open generic types
+ /// </summary>
+ /// <returns></returns>
+ [Obsolete("Change to For(pluginType)")]
+ GenericFamilyExpression ForRequestedType(Type pluginType);
+
+ /// <summary>
+ /// This method is a shortcut for specifying the default constructor and
+ /// setter arguments for a ConcreteType. ForConcreteType is shorthand for:
+ /// ForRequestedType[T]().TheDefault.Is.OfConcreteType[T].**************
+ /// when the PluginType and ConcreteType are the same Type
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ Registry.BuildWithExpression<T> ForConcreteType<T>();
+
+ /// <summary>
+ /// Expression Builder used to define policies for a PluginType including
+ /// Scoping, the Default Instance, and interception. BuildInstancesOf()
+ /// and ForRequestedType() are synonyms
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ [Obsolete("Change to For<T>()")]
+ CreatePluginFamilyExpression<PLUGINTYPE> ForRequestedType<PLUGINTYPE>();
+
+ /// <summary>
+ /// Convenience method. Equivalent of ForRequestedType[PluginType]().AsSingletons()
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ CreatePluginFamilyExpression<PLUGINTYPE> ForSingletonOf<PLUGINTYPE>();
+
+ /// <summary>
+ /// Uses the configuration expressions of this Registry to create a PluginGraph
+ /// object that could be used to initialize a Container. This method is
+ /// mostly for internal usage, but might be helpful for diagnostics
+ /// </summary>
+ /// <returns></returns>
+ PluginGraph Build();
+
+ /// <summary>
+ /// Adds an additional, non-Default Instance to the PluginType T.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ [Obsolete("Prefer For<T>().Add() instead")]
+ IsExpression<T> InstanceOf<T>();
+
+ /// <summary>
+ /// Adds an additional, non-Default Instance to the designated pluginType
+ /// This method is mostly meant for open generic types
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ [Obsolete("Prefer For(type).Add() instead")]
+ GenericIsExpression InstanceOf(Type pluginType);
+
+ /// <summary>
+ /// Expression Builder to define the defaults for a named Profile. Each call
+ /// to CreateProfile is additive.
+ /// </summary>
+ /// <param name="profileName"></param>
+ /// <returns></returns>
+ ProfileExpression CreateProfile(string profileName);
+
+ /// <summary>
+ /// An alternative way to use CreateProfile that uses ProfileExpression
+ /// as a Nested Closure. This usage will result in cleaner code for
+ /// multiple declarations
+ /// </summary>
+ /// <param name="profileName"></param>
+ /// <param name="action"></param>
+ void CreateProfile(string profileName, Action<ProfileExpression> action);
+
+ /// <summary>
+ /// Registers a new TypeInterceptor object with the Container
+ /// </summary>
+ /// <param name="interceptor"></param>
+ void RegisterInterceptor(TypeInterceptor interceptor);
+
+ /// <summary>
+ /// Allows you to define a TypeInterceptor inline with Lambdas or anonymous delegates
+ /// </summary>
+ /// <param name="match"></param>
+ /// <returns></returns>
+ /// <example>
+ /// IfTypeMatches( ... ).InterceptWith( o => new ObjectWrapper(o) );
+ /// </example>
+ MatchedTypeInterceptor IfTypeMatches(Predicate<Type> match);
+
+ /// <summary>
+ /// Designates a policy for scanning assemblies to auto
+ /// register types
+ /// </summary>
+ /// <returns></returns>
+ void Scan(Action<IAssemblyScanner> action);
+
+ /// <summary>
+ /// Directs StructureMap to always inject dependencies into any and all public Setter properties
+ /// of the type PLUGINTYPE.
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ CreatePluginFamilyExpression<PLUGINTYPE> FillAllPropertiesOfType<PLUGINTYPE>();
+
+ /// <summary>
+ /// Creates automatic "policies" for which public setters are considered mandatory
+ /// properties by StructureMap that will be "setter injected" as part of the
+ /// construction process.
+ /// </summary>
+ /// <param name="action"></param>
+ void SetAllProperties(Action<SetterConvention> action);
+
+ /// <summary>
+ /// Use to programmatically select the constructor function of a concrete
+ /// class. Applies globally to all Containers in a single AppDomain.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="expression"></param>
+ void SelectConstructor<T>(Expression<Func<T>> expression);
+
+ /// <summary>
+ /// All requests For the "TO" types will be filled by fetching the "FROM"
+ /// type and casting it to "TO"
+ /// GetInstance(typeof(TO)) basically becomes (TO)GetInstance(typeof(FROM))
+ /// </summary>
+ /// <typeparam name="FROM"></typeparam>
+ /// <typeparam name="TO"></typeparam>
+ void Forward<FROM, TO>() where FROM : class where TO : class;
+
+ /// <summary>
+ /// Syntactic Sugar for saying ForRequestedType().TheDefault.IsThis( @object )
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <param name="object"></param>
+ void Register<PLUGINTYPE>(PLUGINTYPE @object);
+
+ /// <summary>
+ /// Syntactic Sugar for saying ForRequestedType().TheDefault.IsThis( instance )
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <param name="instance"></param>
+ void Register<PLUGINTYPE>(Instance instance);
+
+ /// <summary>
+ /// Shorthand for ForRequestedType<PLUGINTYPE>()
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ CreatePluginFamilyExpression<PLUGINTYPE> For<PLUGINTYPE>();
+
+ /// <summary>
+ /// Shorthand for ForRequestedType(pluginType)
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ GenericFamilyExpression For(Type pluginType);
+
+ /// <summary>
+ /// Shortcut to make StructureMap return the default object of U casted to T
+ /// whenever T is requested. I.e.:
+ /// For<T>().TheDefault.Is.ConstructedBy(c => c.GetInstance<U>() as T);
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <typeparam name="U"></typeparam>
+ /// <returns></returns>
+ LambdaInstance<T> Redirect<T, U>() where T : class where U : class;
+ }
+
/// <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.
@@ -21,12 +240,43 @@
/// }
/// }
/// </example>
- public class Registry
+ public class Registry : IRegistry
{
private readonly List<Action<PluginGraph>> _actions = new List<Action<PluginGraph>>();
private readonly List<Action> _basicActions = new List<Action>();
/// <summary>
+ /// Adds the concreteType as an Instance of the pluginType
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="concreteType"></param>
+ public void AddType(Type pluginType, Type concreteType)
+ {
+ _actions.Add(g => g.AddType(pluginType, concreteType));
+ }
+
+ /// <summary>
+ /// Adds the concreteType as an Instance of the pluginType with a name
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="concreteType"></param>
+ /// <param name="name"></param>
+ public void AddType(Type pluginType, Type concreteType, string name)
+ {
+ _actions.Add(g => g.AddType(pluginType, concreteType, name));
+ }
+
+ /// <summary>
+ /// Add the pluggedType as an instance to any configured pluginType where pluggedType
+ /// could be assigned to the pluginType
+ /// </summary>
+ /// <param name="pluggedType"></param>
+ public void AddType(Type pluggedType)
+ {
+ _actions.Add(g => g.AddType(pluggedType));
+ }
+
+ /// <summary>
/// Imports the configuration from another registry into this registry.
/// </summary>
/// <typeparam name="T"></typeparam>
@@ -315,6 +565,13 @@
PluginCache.GetPlugin(typeof (T)).UseConstructor(expression);
}
+ /// <summary>
+ /// All requests For the "TO" types will be filled by fetching the "FROM"
+ /// type and casting it to "TO"
+ /// GetInstance(typeof(TO)) basically becomes (TO)GetInstance(typeof(FROM))
+ /// </summary>
+ /// <typeparam name="FROM"></typeparam>
+ /// <typeparam name="TO"></typeparam>
public void Forward<FROM, TO>() where FROM : class where TO : class
{
For<TO>().AddInstances(x => x.ConstructedBy(c => c.GetInstance<FROM>() as TO));
Modified: trunk/Source/StructureMap/Graph/AssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 18:39:40 UTC (rev 300)
+++ trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 19:29:05 UTC (rev 301)
@@ -4,6 +4,7 @@
using System.IO;
using System.Linq;
using System.Reflection;
+using StructureMap.Configuration.DSL;
using StructureMap.TypeRules;
using StructureMap.Util;
@@ -39,6 +40,7 @@
public class AssemblyScanner : IAssemblyScanner
{
private readonly List<Assembly> _assemblies = new List<Assembly>();
+ private readonly List<IRegistrationConvention> _conventions = new List<IRegistrationConvention>();
private readonly CompositeFilter<Type> _filter = new CompositeFilter<Type>();
private readonly ImplementationMap _implementationMap = new ImplementationMap();
@@ -67,18 +69,18 @@
Assembly(AppDomain.CurrentDomain.Load(assemblyName));
}
+ [Obsolete("Replace ITypeScanner with IRegistrationConvention")]
public void With(ITypeScanner scanner)
{
- if (_scanners.Contains(scanner)) return;
-
- _scanners.Add(scanner);
+ _scanners.Fill(scanner);
}
public void WithDefaultConventions()
{
- With<DefaultConventionScanner>();
+ Convention<DefaultConventionScanner>();
}
+ [Obsolete("Replace ITypeScanner with IRegistrationConvention")]
public void With<T>() where T : ITypeScanner, new()
{
_scanners.RemoveAll(scanner => scanner is T);
@@ -90,6 +92,15 @@
}
}
+ public void Convention<T>() where T : IRegistrationConvention, new()
+ {
+ var previous = _conventions.FirstOrDefault(scanner => scanner is T);
+ if (previous == null)
+ {
+ With(new T());
+ }
+ }
+
public void LookForRegistries()
{
With<FindRegistriesScanner>();
@@ -206,14 +217,15 @@
public void AssembliesFromPath(string path, Predicate<Assembly> assemblyFilter)
{
- IEnumerable<string> assemblyPaths = Directory.GetFiles(path).Where(file =>
- Path.GetExtension(file).Equals(
- ".exe",
- StringComparison.OrdinalIgnoreCase)
- ||
- Path.GetExtension(file).Equals(
- ".dll",
- StringComparison.OrdinalIgnoreCase));
+ IEnumerable<string> assemblyPaths = Directory.GetFiles(path)
+ .Where(file =>
+ Path.GetExtension(file).Equals(
+ ".exe",
+ StringComparison.OrdinalIgnoreCase)
+ ||
+ Path.GetExtension(file).Equals(
+ ".dll",
+ StringComparison.OrdinalIgnoreCase));
foreach (string assemblyPath in assemblyPaths)
{
@@ -229,11 +241,23 @@
}
}
+ public void With(IRegistrationConvention convention)
+ {
+ _conventions.Fill(convention);
+ }
+
internal void ScanForAll(PluginGraph pluginGraph)
{
+ var registry = new Registry();
+
pluginGraph.Types.For(_assemblies, _filter).Each(
- type => { _scanners.Each(x => x.Process(type, pluginGraph)); });
+ type =>
+ {
+ _scanners.Each(x => x.Process(type, pluginGraph));
+ _conventions.Each(c => c.Process(type, registry));
+ });
+ registry.ConfigurePluginGraph(pluginGraph);
_postScanningActions.Each(x => x(pluginGraph));
}
Modified: trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2009-12-26 18:39:40 UTC (rev 300)
+++ trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2009-12-26 19:29:05 UTC (rev 301)
@@ -53,6 +53,9 @@
private static bool checkGenericType(Type pluggedType, Type pluginType)
{
+ if (pluginType.IsAssignableFrom(pluggedType)) return true;
+
+
// check interfaces
foreach (Type type in pluggedType.GetInterfaces())
{
Modified: trunk/Source/StructureMap/Graph/IAssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/IAssemblyScanner.cs 2009-12-26 18:39:40 UTC (rev 300)
+++ trunk/Source/StructureMap/Graph/IAssemblyScanner.cs 2009-12-26 19:29:05 UTC (rev 301)
@@ -185,5 +185,18 @@
/// The filters apply
/// </summary>
void SingleImplementationsOfInterface();
+
+ /// <summary>
+ /// Adds a registration convention to be applied to all the types in this
+ /// logical "scan" operation
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void Convention<T>() where T : IRegistrationConvention, new();
+
+ /// <summary>
+ /// Adds a registration convention to be applied to all the types in this
+ /// logical "scan" operation
+ /// </summary>
+ void With(IRegistrationConvention convention);
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/ITypeScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/ITypeScanner.cs 2009-12-26 18:39:40 UTC (rev 300)
+++ trunk/Source/StructureMap/Graph/ITypeScanner.cs 2009-12-26 19:29:05 UTC (rev 301)
@@ -1,30 +1,33 @@
using System;
+using StructureMap.Configuration.DSL;
using StructureMap.TypeRules;
namespace StructureMap.Graph
{
+ [Obsolete("Favor the new IRegistrationConvention")]
public interface ITypeScanner
{
void Process(Type type, PluginGraph graph);
}
- public class DefaultConventionScanner : ITypeScanner
+ public interface IRegistrationConvention
{
- #region ITypeScanner Members
+ void Process(Type type, Registry registry);
+ }
- public void Process(Type type, PluginGraph graph)
+ public class DefaultConventionScanner : IRegistrationConvention
+ {
+ public void Process(Type type, Registry registry)
{
if (!type.IsConcrete()) return;
Type pluginType = FindPluginType(type);
if (pluginType != null && Constructor.HasConstructors(type))
{
- graph.AddType(pluginType, type);
+ registry.For(pluginType).Add(type);
}
}
- #endregion
-
public virtual Type FindPluginType(Type concreteType)
{
string interfaceName = "I" + concreteType.Name;
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-26 18:39:40 UTC (rev 300)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-26 19:29:05 UTC (rev 301)
@@ -172,7 +172,7 @@
return false;
}
- if (IsOpenGeneric(pluginType))
+ if (pluginType.IsOpenGeneric() && pluggedType.IsGenericType)
{
return GenericsPluginGraph.CanBeCast(pluginType, pluggedType);
}
Modified: trunk/Source/StructureMap.Testing/Graph/DefaultConventionScanningTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/DefaultConventionScanningTester.cs 2009-12-26 18:39:40 UTC (rev 300)
+++ trunk/Source/StructureMap.Testing/Graph/DefaultConventionScanningTester.cs 2009-12-26 19:29:05 UTC (rev 301)
@@ -1,5 +1,6 @@
using System;
using NUnit.Framework;
+using StructureMap.Configuration.DSL;
using StructureMap.Graph;
namespace StructureMap.Testing.Graph
@@ -61,6 +62,14 @@
[TestFixture]
public class DefaultConventionScanningTester
{
+ [SetUp]
+ public void SetUp()
+ {
+ PluginCache.ResetAll();
+ }
+
+
+
[Test]
public void FindPluginType()
{
@@ -77,7 +86,7 @@
registry.Scan(x =>
{
x.TheCallingAssembly();
- x.With<DefaultConventionScanner>();
+ x.Convention<DefaultConventionScanner>();
});
});
@@ -105,8 +114,13 @@
{
var graph = new PluginGraph();
var scanner = new DefaultConventionScanner();
- scanner.Process(typeof (Convention), graph);
+ var registry = new Registry();
+
+ scanner.Process(typeof (Convention), registry);
+
+ registry.ConfigurePluginGraph(graph);
+
Assert.IsFalse(graph.PluginFamilies.Contains(typeof (IServer)));
Assert.IsTrue(graph.PluginFamilies.Contains(typeof (IConvention)));
Modified: trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs 2009-12-26 18:39:40 UTC (rev 300)
+++ trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs 2009-12-26 19:29:05 UTC (rev 301)
@@ -3,6 +3,7 @@
using NUnit.Framework;
using StructureMap.Graph;
using StructureMap.Pipeline;
+using StructureMap.Testing.Bugs;
using StructureMap.Testing.GenericWidgets;
namespace StructureMap.Testing.Graph
@@ -30,6 +31,12 @@
}
[Test]
+ public void checking_can_be_cast()
+ {
+ assertCanBeCast(typeof(IOpenType<>), typeof(OpenType<>));
+ }
+
+ [Test]
public void BuildAnInstanceManagerFromTemplatedPluginFamily()
{
var pluginGraph = new PluginGraph();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|