|
From: <jer...@us...> - 2008-08-08 23:54:42
|
Revision: 132
http://structuremap.svn.sourceforge.net/structuremap/?rev=132&view=rev
Author: jeremydmiller
Date: 2008-08-08 23:54:37 +0000 (Fri, 08 Aug 2008)
Log Message:
-----------
Refactoring access on PluginFamily and Plugin
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
trunk/Source/StructureMap/Graph/PluginCollection.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/InstanceFactory.cs
trunk/Source/StructureMap/InstanceMemento.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs
trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyMergeTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginGraphBuilderTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginGraphTester.cs
trunk/Source/StructureMap.Testing/Graph/SetterInjectionTester.cs
trunk/Source/StructureMap.Testing/InstanceMementoInstanceCreationTester.cs
trunk/Source/StructureMap.Testing/ObjectMother.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -82,7 +82,7 @@
return alterAndContinue(family =>
{
- Plugin plugin = family.Plugins.FindOrCreate(typeof (CONCRETETYPE), true);
+ Plugin plugin = family.FindPlugin(typeof (CONCRETETYPE));
family.DefaultInstanceKey = plugin.ConcreteKey;
});
@@ -157,7 +157,7 @@
{
Plugin plugin = new Plugin(typeof (CONCRETETYPE));
plugin.ConcreteKey = instanceName;
- family.Plugins.Add(plugin);
+ family.AddPlugin(plugin);
}
);
Modified: trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -102,15 +102,16 @@
templatedFamily.Policy = baseFamily.Policy.Clone();
// Add Plugins
- foreach (Plugin plugin in baseFamily.Plugins)
+ baseFamily.EachPlugin(plugin =>
{
if (CanBePluggedIntoGenericType(baseFamily.PluginType, plugin.PluggedType, templateTypes))
{
Plugin templatedPlugin = CreateTemplatedClone(plugin, templateTypes);
- templatedFamily.Plugins.Add(templatedPlugin);
+ templatedFamily.AddPlugin(templatedPlugin);
}
- }
+ });
+
// TODO -- Got a big problem here. Intances need to be copied over
baseFamily.EachInstance(i =>
{
@@ -139,6 +140,7 @@
{
templatedType = plugin.PluggedType;
}
+
Plugin templatedPlugin = new Plugin(templatedType, plugin.ConcreteKey);
foreach (SetterProperty setter in plugin.Setters)
{
Modified: trunk/Source/StructureMap/Graph/PluginCollection.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginCollection.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap/Graph/PluginCollection.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -11,11 +11,21 @@
public class PluginCollection : IEnumerable<Plugin>
{
private readonly PluginFamily _family;
- private readonly Cache<Type, Plugin> _plugins = new Cache<Type, Plugin>();
+ private readonly Cache<Type, Plugin> _plugins;
public PluginCollection(PluginFamily family)
{
_family = family;
+ _plugins = new Cache<Type, Plugin>(t =>
+ {
+ // Reject if the PluggedType cannot be upcast to the PluginType
+ if (!TypeRules.CanBeCast(_family.PluginType, t))
+ {
+ throw new StructureMapException(104, t, _family.PluginType);
+ }
+
+ return new Plugin(t);
+ });
}
public Plugin[] All
@@ -110,14 +120,6 @@
_plugins.Remove(plugin.PluggedType);
}
- public Plugin FindOrCreate(Type pluggedType, bool createDefaultInstanceOfType)
- {
- Plugin plugin = new Plugin(pluggedType);
- Add(plugin);
-
- return plugin;
- }
-
public List<Plugin> FindAutoFillablePlugins()
{
List<Plugin> list = new List<Plugin>();
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -47,7 +47,7 @@
Plugin plugin = Plugin.CreateForConcreteType(pluginType);
if (plugin != null)
{
- Plugins.Add(plugin);
+ _plugins.Add(plugin);
}
}
}
@@ -191,15 +191,7 @@
public Plugin AddPlugin(Type pluggedType)
{
- if (!HasPlugin(pluggedType))
- {
- Plugin plugin = new Plugin(pluggedType);
- AddPlugin(plugin);
-
- return plugin;
- }
-
- return Plugins[pluggedType];
+ return _plugins[pluggedType];
}
public Plugin AddPlugin(Type pluggedType, string key)
@@ -210,6 +202,7 @@
return plugin;
}
+ [Obsolete("Wanna make private")]
public void AddPlugin(Plugin plugin)
{
if (_plugins.HasPlugin(plugin.ConcreteKey))
@@ -228,10 +221,6 @@
#region properties
- public PluginCollection Plugins
- {
- get { return _plugins; }
- }
public bool IsGenericTemplate
{
@@ -281,17 +270,7 @@
public Plugin FindPlugin(Type pluggedType)
{
- if (HasPlugin(pluggedType))
- {
- return Plugins[pluggedType];
- }
- else
- {
- Plugin plugin = new Plugin(pluggedType);
- Plugins.Add(plugin);
-
- return plugin;
- }
+ return _plugins[pluggedType];
}
public void AddDefaultMemento(InstanceMemento memento)
@@ -325,9 +304,9 @@
{
source.EachInstance(instance => _instances.Fill(instance.Name, instance));
- foreach (Plugin plugin in source.Plugins)
+ foreach (Plugin plugin in source._plugins)
{
- Plugins.Fill(plugin);
+ _plugins.Fill(plugin);
}
}
@@ -335,5 +314,28 @@
{
return _instances.First;
}
+
+ public Plugin FindPlugin(string concreteKey)
+ {
+ return _plugins[concreteKey];
+ }
+
+ public bool HasPlugin(string concreteKey)
+ {
+ return _plugins.HasPlugin(concreteKey);
+ }
+
+ public void EachPlugin(Action<Plugin> action)
+ {
+ foreach (Plugin plugin in _plugins)
+ {
+ action(plugin);
+ }
+ }
+
+ public IEnumerable<Plugin> GetAllPlugins()
+ {
+ return _plugins.All;
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/InstanceFactory.cs
===================================================================
--- trunk/Source/StructureMap/InstanceFactory.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap/InstanceFactory.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -41,7 +41,7 @@
_policy = family.Policy;
_pluginType = family.PluginType;
- _instanceBuilders = new InstanceBuilderList(family.PluginType, family.Plugins.All);
+ _instanceBuilders = new InstanceBuilderList(family.PluginType, family.GetAllPlugins());
family.EachInstance(AddInstance);
@@ -141,7 +141,7 @@
public void ImportFrom(PluginFamily family)
{
- _instanceBuilders.Add(family.Plugins);
+ _instanceBuilders.Add(family.GetAllPlugins());
family.EachInstance(instance => _instances.Fill(instance.Name, instance));
}
Modified: trunk/Source/StructureMap/InstanceMemento.cs
===================================================================
--- trunk/Source/StructureMap/InstanceMemento.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap/InstanceMemento.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -84,8 +84,8 @@
public virtual Plugin FindPlugin(PluginFamily family)
{
- Plugin plugin = family.Plugins[innerConcreteKey] ?? getPluginByType(family) ??
- family.Plugins[Plugin.DEFAULT];
+ Plugin plugin = family.FindPlugin(innerConcreteKey) ?? getPluginByType(family) ??
+ family.FindPlugin(Plugin.DEFAULT);
if (plugin == null)
{
@@ -106,7 +106,7 @@
Type pluggedType = new TypePath(pluggedTypeName).FindType();
- return family.Plugins.FindOrCreate(pluggedType, false);
+ return family.FindPlugin(pluggedType);
}
/// <summary>
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -114,7 +114,7 @@
// F-ing generics. You have to check concrete key first
if (!string.IsNullOrEmpty(_concreteKey))
{
- return family.Plugins.HasPlugin(_concreteKey);
+ return family.HasPlugin(_concreteKey);
}
if (_pluggedType != null)
Modified: trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -76,10 +76,10 @@
Assert.IsNotNull(templatedFamily);
Assert.AreEqual(typeof (IGenericService<int>), templatedFamily.PluginType);
- Assert.AreEqual(3, templatedFamily.Plugins.Count);
- Assert.IsNotNull(templatedFamily.Plugins[typeof (GenericService<int>)]);
- Assert.IsNotNull(templatedFamily.Plugins[typeof (SecondGenericService<int>)]);
- Assert.IsNotNull(templatedFamily.Plugins[typeof (ThirdGenericService<int>)]);
+ Assert.AreEqual(3, templatedFamily.PluginCount);
+ Assert.IsNotNull(templatedFamily.FindPlugin(typeof (GenericService<int>)));
+ Assert.IsNotNull(templatedFamily.FindPlugin(typeof (SecondGenericService<int>)));
+ Assert.IsNotNull(templatedFamily.FindPlugin(typeof (ThirdGenericService<int>)));
}
[Test]
@@ -97,13 +97,13 @@
Assert.IsNotNull(templatedFamily);
Assert.AreEqual(typeof (IGenericService3<int, bool, string>), templatedFamily.PluginType);
- Assert.AreEqual(3, templatedFamily.Plugins.Count);
+ Assert.AreEqual(3, templatedFamily.PluginCount);
- Assert.AreEqual(typeof (GenericService3<int, bool, string>), templatedFamily.Plugins["Default"].PluggedType);
+ Assert.AreEqual(typeof (GenericService3<int, bool, string>), templatedFamily.FindPlugin("Default").PluggedType);
Assert.AreEqual(typeof (SecondGenericService3<int, bool, string>),
- templatedFamily.Plugins["Second"].PluggedType);
+ templatedFamily.FindPlugin("Second").PluggedType);
Assert.AreEqual(typeof (ThirdGenericService3<int, bool, string>),
- templatedFamily.Plugins["Third"].PluggedType);
+ templatedFamily.FindPlugin("Third").PluggedType);
}
Modified: trunk/Source/StructureMap.Testing/Graph/PluginFamilyMergeTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/PluginFamilyMergeTester.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap.Testing/Graph/PluginFamilyMergeTester.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -47,7 +47,7 @@
Plugin destinationPlugin = destination.AddPlugin(typeof (AWidget));
destination.ImportFrom(source);
- Assert.AreSame(destinationPlugin, destination.Plugins[typeof (AWidget)]);
+ Assert.AreSame(destinationPlugin, destination.FindPlugin(typeof (AWidget)));
}
[Test]
Modified: trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -36,7 +36,7 @@
family.DefaultInstanceKey = "DefaultKey";
family.AddPlugin(typeof (NotPluggableWidget), "NotPlugged");
- Assert.AreEqual(1, family.Plugins.Count, "Plugin Count");
+ Assert.AreEqual(1, family.PluginCount, "Plugin Count");
}
[Test, ExpectedException(typeof (StructureMapException))]
@@ -155,7 +155,7 @@
PluginFamily family = new PluginFamily(GetType());
Assert.AreEqual(1, family.PluginCount);
- Plugin plugin = family.Plugins[GetType()];
+ Plugin plugin = family.FindPlugin(GetType());
Assert.AreEqual(Plugin.DEFAULT, plugin.ConcreteKey);
Assert.AreEqual(GetType(), plugin.PluggedType);
}
Modified: trunk/Source/StructureMap.Testing/Graph/PluginGraphBuilderTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/PluginGraphBuilderTester.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap.Testing/Graph/PluginGraphBuilderTester.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -155,7 +155,7 @@
PluginFamily pluginFamily = pluginGraph.FindFamily(typeof (IWidget));
- Plugin plugin = pluginFamily.Plugins[typeof (ColorWidget)];
+ Plugin plugin = pluginFamily.FindPlugin(typeof (ColorWidget));
Assert.IsNotNull(plugin);
}
@@ -164,7 +164,7 @@
public void GotPluginThatIsAddedInConfigXml()
{
PluginFamily family = graph.FindFamily(typeof (IWidget));
- Plugin plugin = family.Plugins[typeof (NotPluggableWidget)];
+ Plugin plugin = family.FindPlugin(typeof (NotPluggableWidget));
Assert.IsNotNull(plugin);
Assert.AreEqual("NotPluggable", plugin.ConcreteKey);
}
@@ -174,7 +174,7 @@
public void GotRightNumberOfPluginsForIWidget()
{
PluginFamily pluginFamily = graph.FindFamily(typeof (IWidget));
- Assert.AreEqual(5, pluginFamily.Plugins.Count, "Should be 5 total");
+ Assert.AreEqual(5, pluginFamily.PluginCount, "Should be 5 total");
}
@@ -182,7 +182,7 @@
public void GotRightNumberOfPluginsForMultipleAssemblies()
{
PluginFamily pluginFamily = graph.FindFamily(typeof (Rule));
- Assert.AreEqual(5, pluginFamily.Plugins.Count, "Should be 5 total");
+ Assert.AreEqual(5, pluginFamily.PluginCount, "Should be 5 total");
}
[Test]
Modified: trunk/Source/StructureMap.Testing/Graph/PluginGraphTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/PluginGraphTester.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap.Testing/Graph/PluginGraphTester.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -62,7 +62,7 @@
PluginFamily family = graph.FindFamily(typeof (Rule));
Assert.IsNotNull(family);
- Assert.AreEqual(5, family.Plugins.Count, "There are 5 Rule classes in the two assemblies");
+ Assert.AreEqual(5, family.PluginCount, "There are 5 Rule classes in the two assemblies");
}
@@ -85,7 +85,7 @@
Assert.AreEqual(
5,
- family.Plugins.Count,
+ family.PluginCount,
"5 different IWidget classes are marked as Pluggable, + the manual add");
}
@@ -103,7 +103,7 @@
Assert.AreEqual("Blue", family.DefaultInstanceKey);
- Assert.AreEqual(4, family.Plugins.Count, "3 different IWidget classes are marked as Pluggable");
+ Assert.AreEqual(4, family.PluginCount, "3 different IWidget classes are marked as Pluggable");
}
[Test]
Modified: trunk/Source/StructureMap.Testing/Graph/SetterInjectionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/SetterInjectionTester.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap.Testing/Graph/SetterInjectionTester.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -133,7 +133,7 @@
{
PluginGraph pluginGraph = getPluginGraph();
PluginFamily family = pluginGraph.FindFamily(typeof (IGridColumn));
- Plugin plugin = family.Plugins["Other"];
+ Plugin plugin = family.FindPlugin("Other");
Assert.AreEqual(2, plugin.Setters.OptionalCount);
Assert.AreEqual(5, plugin.Setters.MandatoryCount);
Modified: trunk/Source/StructureMap.Testing/InstanceMementoInstanceCreationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/InstanceMementoInstanceCreationTester.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap.Testing/InstanceMementoInstanceCreationTester.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -178,7 +178,7 @@
PluginGraph graph = new PluginGraph();
Plugin plugin = new Plugin(typeof (ComplexRule));
- graph.FindFamily(typeof (Rule)).Plugins.Add(plugin);
+ graph.FindFamily(typeof (Rule)).AddPlugin(plugin);
MemoryInstanceMemento memento = ComplexRule.GetMemento();
memento.SetProperty(XmlConstants.PLUGGED_TYPE, typeof (ComplexRule).AssemblyQualifiedName);
@@ -204,7 +204,7 @@
PluginGraph graph = new PluginGraph();
Plugin plugin = new Plugin(typeof (ComplexRule));
- graph.FindFamily(typeof (Rule)).Plugins.Add(plugin);
+ graph.FindFamily(typeof(Rule)).AddPlugin(plugin);
MemoryInstanceMemento memento = ComplexRule.GetMemento();
memento.SetProperty(XmlConstants.PLUGGED_TYPE, typeof (ComplexRule).AssemblyQualifiedName);
@@ -223,7 +223,7 @@
PluginGraph graph = new PluginGraph();
Plugin plugin = new Plugin(typeof (ComplexRule));
- graph.FindFamily(typeof (Rule)).Plugins.Add(plugin);
+ graph.FindFamily(typeof(Rule)).AddPlugin(plugin);
MemoryInstanceMemento memento = ComplexRule.GetMemento();
memento.SetProperty(XmlConstants.PLUGGED_TYPE, typeof (ComplexRule).AssemblyQualifiedName);
Modified: trunk/Source/StructureMap.Testing/ObjectMother.cs
===================================================================
--- trunk/Source/StructureMap.Testing/ObjectMother.cs 2008-08-07 22:07:17 UTC (rev 131)
+++ trunk/Source/StructureMap.Testing/ObjectMother.cs 2008-08-08 23:54:37 UTC (rev 132)
@@ -43,7 +43,7 @@
public static Plugin GetPlugin(Type pluginType, string concreteKey)
{
PluginFamily family = GetPluginFamily(pluginType);
- return family.Plugins[concreteKey];
+ return family.FindPlugin(concreteKey);
}
public static PluginGraph GetPluginGraph()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|