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