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: <jer...@us...> - 2007-12-30 16:31:13
|
Revision: 51 http://structuremap.svn.sourceforge.net/structuremap/?rev=51&view=rev Author: jeremydmiller Date: 2007-12-30 08:31:10 -0800 (Sun, 30 Dec 2007) Log Message: ----------- updating RhinoMocks, the first cut at automocking, some clean up Modified Paths: -------------- trunk/Source/StructureMap/Configuration/ConfigurationParser.cs trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/Configuration/FamilyParser.cs trunk/Source/StructureMap/ConstructorMemento.cs trunk/Source/StructureMap/Delegates.cs trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs trunk/Source/StructureMap/Graph/Plugin.cs trunk/Source/StructureMap/Graph/PluginFamily.cs trunk/Source/StructureMap/InstanceBuilder.cs trunk/Source/StructureMap/InstanceFactory.cs trunk/Source/StructureMap/InstanceManager.cs trunk/Source/StructureMap/InstanceMemento.cs trunk/Source/StructureMap/MemoryInstanceMemento.cs trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj trunk/bin/Rhino.Mocks.dll Added Paths: ----------- trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs trunk/Source/StructureMap.Testing/NewFolder1/ Removed Paths: ------------- trunk/Source/StructureMap.Testing.GenericWidgets/bin/ Property Changed: ---------------- trunk/Source/StructureMap.Testing/ Modified: trunk/Source/StructureMap/Configuration/ConfigurationParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -167,7 +167,7 @@ public void ParseFamilies(IGraphBuilder builder) { FamilyParser familyParser = new FamilyParser(builder, _mementoCreator); - + XmlNodeList familyNodes = findNodes(XmlConstants.PLUGIN_FAMILY_NODE); foreach (XmlElement familyElement in familyNodes) { @@ -185,7 +185,6 @@ { familyParser.ParseInstanceElement(element); } - } Modified: trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -39,7 +39,7 @@ public override void ValidatePluggability(Type pluginType) { - if (!pluginType.Equals(typeof(PLUGINTYPE))) + if (!pluginType.Equals(typeof (PLUGINTYPE))) { throw new StructureMapException(306, typeof (PLUGINTYPE).FullName, pluginType.FullName); Modified: trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -20,7 +20,7 @@ public CreatePluginFamilyExpression() { - _pluginType = typeof(PLUGINTYPE); + _pluginType = typeof (PLUGINTYPE); } void IExpression.Configure(PluginGraph graph) @@ -70,7 +70,7 @@ builder.ValidatePluggability(_pluginType); _children.Add(builder); - _alterations.Add(delegate (PluginFamily family) + _alterations.Add(delegate(PluginFamily family) { InstanceMemento memento = builder.BuildMemento(family); family.Source.AddExternalMemento(memento); @@ -86,7 +86,8 @@ /// </summary> /// <typeparam name="CONCRETETYPE"></typeparam> /// <returns></returns> - public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIsConcreteType<CONCRETETYPE>() where CONCRETETYPE : PLUGINTYPE + public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIsConcreteType<CONCRETETYPE>() + where CONCRETETYPE : PLUGINTYPE { ExpressionValidator.ValidatePluggabilityOf(typeof (CONCRETETYPE)).IntoPluginType(_pluginType); @@ -130,20 +131,16 @@ public CreatePluginFamilyExpression<PLUGINTYPE> OnCreation(StartupHandler<PLUGINTYPE> handler) { - _alterations.Add(delegate (PluginFamily family) - { - family.InstanceInterceptor = new StartupInterceptor<PLUGINTYPE>(handler); - }); + _alterations.Add( + delegate(PluginFamily family) { family.InstanceInterceptor = new StartupInterceptor<PLUGINTYPE>(handler); }); return this; } public CreatePluginFamilyExpression<PLUGINTYPE> EnrichWith(EnrichmentHandler<PLUGINTYPE> handler) { - _alterations.Add(delegate(PluginFamily family) - { - family.InstanceInterceptor = new EnrichmentInterceptor<PLUGINTYPE>(handler); - }); + _alterations.Add( + delegate(PluginFamily family) { family.InstanceInterceptor = new EnrichmentInterceptor<PLUGINTYPE>(handler); }); return this; } Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -102,10 +102,10 @@ { Plugin plugin = Plugin.CreateImplicitPlugin(_pluggedType); string propertyName = plugin.FindFirstConstructorArgumentOfType<T>(); - + if (string.IsNullOrEmpty(propertyName)) { - throw new StructureMapException(305, TypePath.GetAssemblyQualifiedName(typeof(T))); + throw new StructureMapException(305, TypePath.GetAssemblyQualifiedName(typeof (T))); } return propertyName; @@ -173,7 +173,8 @@ { validateTypeIsArray<PLUGINTYPE>(); - ChildArrayExpression<PLUGINTYPE> expression = new ChildArrayExpression<PLUGINTYPE>(this, _memento, propertyName); + ChildArrayExpression<PLUGINTYPE> expression = + new ChildArrayExpression<PLUGINTYPE>(this, _memento, propertyName); addChildExpression(expression); return expression; @@ -181,12 +182,10 @@ private static void validateTypeIsArray<PLUGINTYPE>() { - if (!typeof(PLUGINTYPE).IsArray) + if (!typeof (PLUGINTYPE).IsArray) { throw new StructureMapException(307); } } - - } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -24,12 +24,10 @@ void IMementoBuilder.SetInstanceName(string instanceKey) { - } void IMementoBuilder.ValidatePluggability(Type pluginType) { - } Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -75,7 +75,7 @@ CreatePluginFamilyExpression<PLUGINTYPE> expression = new CreatePluginFamilyExpression<PLUGINTYPE>(); addExpression(expression); - return expression; + return expression; } public IInstanceManager BuildInstanceManager() @@ -97,7 +97,6 @@ return expression.TypeExpression(); } - /// <summary> /// Convenience method to start the definition of an instance of type T @@ -223,6 +222,5 @@ { return new ReferenceMementoBuilder(referencedKey); } - } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/FamilyParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/FamilyParser.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/FamilyParser.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -117,8 +117,5 @@ _builder.AddInterceptor(pluginTypePath, interceptorMemento); } } - - - } } \ No newline at end of file Modified: trunk/Source/StructureMap/ConstructorMemento.cs =================================================================== --- trunk/Source/StructureMap/ConstructorMemento.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/ConstructorMemento.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -22,7 +22,6 @@ public ConstructorMemento(BuildObjectDelegate<PLUGINTYPE> builder) : this(Guid.NewGuid().ToString(), builder) { - } protected override object buildInstance(IInstanceCreator creator) @@ -37,4 +36,4 @@ set { _builder = value; } } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/Delegates.cs =================================================================== --- trunk/Source/StructureMap/Delegates.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Delegates.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,6 +1,7 @@ namespace StructureMap { public delegate T EnrichmentHandler<T>(T target); + public delegate void StartupHandler<T>(T target); public interface InstanceInterceptor @@ -48,4 +49,4 @@ return _handler((T) target); } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs =================================================================== --- trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -65,7 +65,8 @@ _sourceConfigDocument = new XmlDocument(); _sourceConfigDocument.Load(configPath); - PluginGraphBuilder builder = new PluginGraphBuilder(new ConfigurationParser(_sourceConfigDocument.DocumentElement)); + PluginGraphBuilder builder = + new PluginGraphBuilder(new ConfigurationParser(_sourceConfigDocument.DocumentElement)); _report = createPluginGraphReport(builder); _defaultManager = builder.DefaultManager; Modified: trunk/Source/StructureMap/Graph/Plugin.cs =================================================================== --- trunk/Source/StructureMap/Graph/Plugin.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Graph/Plugin.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -16,7 +16,7 @@ public static Plugin CreateAutofilledPlugin(Type concreteType) { string pluginKey = Guid.NewGuid().ToString(); - Plugin plugin = Plugin.CreateExplicitPlugin(concreteType, pluginKey, string.Empty); + Plugin plugin = CreateExplicitPlugin(concreteType, pluginKey, string.Empty); if (!plugin.CanBeAutoFilled) { throw new StructureMapException(231); @@ -140,6 +140,25 @@ return new Plugin(pluggedType, concreteKey, DefinitionSource.Explicit); } + public static ConstructorInfo GetGreediestConstructor(Type pluggedType) + { + ConstructorInfo returnValue = null; + + foreach (ConstructorInfo constructor in pluggedType.GetConstructors()) + { + if (returnValue == null) + { + returnValue = constructor; + } + else if (constructor.GetParameters().Length > returnValue.GetParameters().Length) + { + returnValue = constructor; + } + } + + return returnValue; + } + #endregion private Type _pluggedType; @@ -231,17 +250,7 @@ // if no constructor is marked as the "ContainerConstructor", find the greediest constructor if (returnValue == null) { - foreach (ConstructorInfo constructor in _pluggedType.GetConstructors()) - { - if (returnValue == null) - { - returnValue = constructor; - } - else if (constructor.GetParameters().Length > returnValue.GetParameters().Length) - { - returnValue = constructor; - } - } + returnValue = GetGreediestConstructor(_pluggedType); } if (returnValue == null) @@ -252,6 +261,8 @@ return returnValue; } + + /// <summary> /// The ConcreteKey that identifies the Plugin within a PluginFamily /// </summary> Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,5 +1,4 @@ using System; -using System.Reflection; using StructureMap.Interceptors; using StructureMap.Source; @@ -160,17 +159,17 @@ } Type[] pluginArgs = _pluginType.GetGenericArguments(); Type[] pluggableArgs = interfaceType.GetGenericArguments(); - + if (templateTypes.Length != pluginArgs.Length && pluginArgs.Length != pluggableArgs.Length) { return false; } - + for (int i = 0; i < templateTypes.Length; i++) { isValid &= templateTypes[i] == pluggableArgs[i] || - pluginArgs[i].IsGenericParameter && + pluginArgs[i].IsGenericParameter && pluggableArgs[i].IsGenericParameter; } return isValid; Modified: trunk/Source/StructureMap/InstanceBuilder.cs =================================================================== --- trunk/Source/StructureMap/InstanceBuilder.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/InstanceBuilder.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,5 +1,4 @@ using System; -using StructureMap.Graph; namespace StructureMap { @@ -35,5 +34,10 @@ Type plugged = Type.GetType(PluggedType); return plugged.Equals(type); } + + //public Type GetPluggedType() + //{ + // return Type.GetType(PluggedType); + //} } } \ No newline at end of file Modified: trunk/Source/StructureMap/InstanceFactory.cs =================================================================== --- trunk/Source/StructureMap/InstanceFactory.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/InstanceFactory.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -21,6 +21,7 @@ private InstanceInterceptor _interceptor = new NulloInterceptor(); #region static constructors + public static InstanceFactory CreateFactoryWithDefault(Type pluginType, object defaultInstance) { PluginFamily family = new PluginFamily(pluginType); @@ -29,9 +30,9 @@ return factory; } + #endregion - #region constructor functions private InstanceFactory() @@ -363,7 +364,7 @@ } Plugin plugin = Plugin.CreateImplicitPlugin(typeof (T)); - processPlugins(new Plugin[]{plugin}); + processPlugins(new Plugin[] {plugin}); plugin.AddToSource(_source); return plugin.CreateImplicitMemento(); Modified: trunk/Source/StructureMap/InstanceManager.cs =================================================================== --- trunk/Source/StructureMap/InstanceManager.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/InstanceManager.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -422,7 +422,7 @@ public void AddInstance<PLUGINTYPE, CONCRETETYPE>() { - IInstanceFactory factory = getOrCreateFactory(typeof(PLUGINTYPE), createFactory); + IInstanceFactory factory = getOrCreateFactory(typeof (PLUGINTYPE), createFactory); InstanceMemento memento = factory.AddType<CONCRETETYPE>(); factory.AddInstance(memento); } Modified: trunk/Source/StructureMap/InstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/InstanceMemento.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/InstanceMemento.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -281,7 +281,8 @@ } catch (Exception e) { - throw new StructureMapException(308, e, InstanceKey, TypePath.GetAssemblyQualifiedName(instance.GetType())); + throw new StructureMapException(308, e, InstanceKey, + TypePath.GetAssemblyQualifiedName(instance.GetType())); } } Modified: trunk/Source/StructureMap/MemoryInstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/MemoryInstanceMemento.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/MemoryInstanceMemento.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -7,8 +7,9 @@ public class GenericMemento<T> : MemoryInstanceMemento { public GenericMemento(string instanceKey) - : base(Plugin.CreateImplicitPlugin(typeof(T)).ConcreteKey, instanceKey) - {} + : base(Plugin.CreateImplicitPlugin(typeof (T)).ConcreteKey, instanceKey) + { + } } /// <summary> Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -81,7 +81,7 @@ if (_pullConfigurationFromAppConfig) { IList<XmlNode> appConfigNodes = StructureMapConfigurationSection.GetStructureMapConfiguration(); - foreach(XmlNode appConfigNode in appConfigNodes) + foreach (XmlNode appConfigNode in appConfigNodes) { _collection.IncludeNode( delegate() { return appConfigNode; }); Modified: trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,12 +1,9 @@ using System; +using Rhino.Mocks; namespace StructureMap.AutoMocking { - public interface ServiceLocator - { - T Service<T>(); - object Service(Type serviceType); - } + public class AutoMockedInstanceManager : InstanceManager { Modified: trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,46 +1,61 @@ using System; using System.Collections.Generic; +using System.Reflection; using Rhino.Mocks; +using StructureMap.Graph; namespace StructureMap.AutoMocking { public delegate void GenericVoidMethod<TARGETCLASS>(TARGETCLASS target); public delegate void VoidMethod(); - public class RhinoAutoMocker : MockRepository, ServiceLocator + + + + public class RhinoAutoMocker<TARGETCLASS> : MockRepository where TARGETCLASS : class { - private Dictionary<Type, object> _services; private AutoMockedInstanceManager _manager; public RhinoAutoMocker() { - _services = new Dictionary<Type, object>(); - _manager = new AutoMockedInstanceManager(this); + + RhinoMocksServiceLocator locator = new RhinoMocksServiceLocator(this); + _manager = new AutoMockedInstanceManager(locator); + } - public TARGETCLASS Create<TARGETCLASS>() + public TARGETCLASS Create() { - throw new NotImplementedException(); + return _manager.FillDependencies<TARGETCLASS>(); } - public T Service<T>() + public TARGETCLASS CreatePartialMocked() { - throw new NotImplementedException(); + return PartialMock<TARGETCLASS>(getConstructorArgs()); } - public T UsePartialMock<T>() + private object[] getConstructorArgs() { - throw new NotImplementedException(); + ConstructorInfo ctor = Plugin.GetGreediestConstructor(typeof(TARGETCLASS)); + List<object> list = new List<object>(); + foreach (ParameterInfo parameterInfo in ctor.GetParameters()) + { + Type dependencyType = parameterInfo.ParameterType; + object dependency = _manager.CreateInstance(dependencyType); + list.Add(dependency); + } + + return list.ToArray(); } - public void Inject<T>(T stub) + public T Service<T>() { - throw new NotImplementedException(); + return _manager.CreateInstance<T>(); } - public object Service(Type serviceType) + public void InjectStub<T>(T stub) { - throw new NotImplementedException(); + _manager.InjectStub<T>(stub); } } } Added: trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs (rev 0) +++ trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -0,0 +1,30 @@ +using System; +using Rhino.Mocks; + +namespace StructureMap.AutoMocking +{ + public class RhinoMocksServiceLocator : ServiceLocator + { + private readonly MockRepository _mocks; + + public RhinoMocksServiceLocator(MockRepository mocks) + { + _mocks = mocks; + } + + + public RhinoMocksServiceLocator() : this(new MockRepository()) + { + } + + public T Service<T>() + { + return _mocks.CreateMock<T>(); + } + + public object Service(Type serviceType) + { + return _mocks.CreateMock(serviceType); + } + } +} \ No newline at end of file Added: trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs (rev 0) +++ trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -0,0 +1,10 @@ +using System; + +namespace StructureMap.AutoMocking +{ + public interface ServiceLocator + { + T Service<T>(); + object Service(Type serviceType); + } +} \ No newline at end of file Modified: trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj =================================================================== --- trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj 2007-12-30 16:31:10 UTC (rev 51) @@ -43,6 +43,8 @@ <Compile Include="AutoMockedInstanceManager.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="RhinoAutoMocker.cs" /> + <Compile Include="RhinoMocksServiceLocator.cs" /> + <Compile Include="ServiceLocator.cs" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\StructureMap\StructureMap.csproj"> Property changes on: trunk/Source/StructureMap.Testing ___________________________________________________________________ Name: svn:ignore - bin obj *.csproj.user + bin obj *.csproj.user [Bb]in [Dd]ebug [Rr]elease *.user *.aps *.eto Modified: trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,14 +1,215 @@ +using System; using NUnit.Framework; using Rhino.Mocks; +using Rhino.Mocks.Impl; +using Rhino.Mocks.Interfaces; +using StructureMap.AutoMocking; namespace StructureMap.Testing.AutoMocking { [TestFixture] public class RhinoAutoMockerTester { + private MockRepository _mocks; + private RhinoMocksServiceLocator _locator; + private AutoMockedInstanceManager _instanceManager; + [SetUp] public void SetUp() { + _mocks = new MockRepository(); + _locator = new RhinoMocksServiceLocator(_mocks); + _instanceManager = new AutoMockedInstanceManager(_locator); } + + [Test] + public void GetAFullMockForAServiceThatHasNotPreviouslyBeenRequested() + { + IMockedService service = _instanceManager.CreateInstance<IMockedService>(); + + + Assert.IsNotNull(service); + IMockedObject instance = (IMockedObject)service; + Assert.AreSame(_mocks, instance.Repository); + } + + [Test] + public void RequestTheServiceTwiceAndGetTheExactSameMockObject() + { + IMockedService service = _instanceManager.CreateInstance<IMockedService>(); + Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>()); + Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>()); + Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>()); + Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>()); + } + + [Test] + public void InjectAStubAndGetTheStubBack() + { + StubService stub = new StubService(); + _instanceManager.InjectStub<IMockedService>(stub); + + Assert.AreSame(stub, _instanceManager.CreateInstance<IMockedService>()); + Assert.AreSame(stub, _instanceManager.CreateInstance<IMockedService>()); + Assert.AreSame(stub, _instanceManager.CreateInstance<IMockedService>()); + } + + [Test] + public void AutoFillAConcreteClassWithMocks() + { + IMockedService service = _instanceManager.CreateInstance<IMockedService>(); + IMockedService2 service2 = _instanceManager.CreateInstance<IMockedService2>(); + IMockedService3 service3 = _instanceManager.CreateInstance<IMockedService3>(); + + ConcreteClass concreteClass = _instanceManager.FillDependencies<ConcreteClass>(); + Assert.AreSame(service, concreteClass.Service); + Assert.AreSame(service2, concreteClass.Service2); + Assert.AreSame(service3, concreteClass.Service3); + } + + [Test] + public void UseTheAutoMockerToStartUpTheConcreteClass() + { + RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); + + using (autoMocker.Record()) + { + Expect.Call(autoMocker.Service<IMockedService>().Name).Return("Jeremy"); + } + + Assert.AreEqual("Jeremy", autoMocker.Create().Name); + } + + [Test] + public void UseTheAutoMockerToStartUpTheConcreteClassAsAPartialMockAndSetTheNameMethodUp() + { + RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); + + ConcreteClass concreteClass = autoMocker.CreatePartialMocked(); + + using (autoMocker.Record()) + { + Expect.Call(concreteClass.Name).Return("Max"); + } + + Assert.AreEqual("Max", concreteClass.Name); + } + + [Test] + public void TheAutoMockerPushesInMocksForAllOfTheConstructorArgumentsForAPartialMock() + { + RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); + + IMockedService service = autoMocker.Service<IMockedService>(); + IMockedService2 service2 = autoMocker.Service<IMockedService2>(); + IMockedService3 service3 = autoMocker.Service<IMockedService3>(); + + ConcreteClass concreteClass = autoMocker.CreatePartialMocked(); + + Assert.AreSame(service, concreteClass.Service); + Assert.AreSame(service2, concreteClass.Service2); + Assert.AreSame(service3, concreteClass.Service3); + } + + + [Test] + public void TheAutoMockerPushesInMocksAndAPreBuiltStubForAllOfTheConstructorArguments() + { + RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); + StubService stub = new StubService(); + autoMocker.InjectStub<IMockedService>(stub); + + IMockedService2 service2 = autoMocker.Service<IMockedService2>(); + IMockedService3 service3 = autoMocker.Service<IMockedService3>(); + + ConcreteClass concreteClass = autoMocker.Create(); + + Assert.AreSame(stub, concreteClass.Service); + Assert.AreSame(service2, concreteClass.Service2); + Assert.AreSame(service3, concreteClass.Service3); + } + + + public class ConcreteClass + { + private readonly IMockedService _service; + private readonly IMockedService2 _service2; + private readonly IMockedService3 _service3; + + public ConcreteClass(IMockedService service, IMockedService2 service2, IMockedService3 service3) + { + _service = service; + _service2 = service2; + _service3 = service3; + } + + public virtual string Name + { + get + { + return _service.Name; + } + } + + public IMockedService Service + { + get { return _service; } + } + + public IMockedService2 Service2 + { + get { return _service2; } + } + + public IMockedService3 Service3 + { + get { return _service3; } + } + } + + public interface IMockedService + { + void Go(); + string Name { get;} + } + + public interface IMockedService2 + { + void Go(); + } + + public interface IMockedService3 + { + void Go(); + } + + + + public class StubService : IMockedService + { + private readonly string _name; + + public StubService() + { + } + + public StubService(string name) + { + _name = name; + } + + + public string Name + { + get { return _name; } + } + + public void Go() + { + throw new NotImplementedException(); + } + } } + + } Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-12-30 16:31:10 UTC (rev 51) @@ -99,6 +99,10 @@ <Reference Include="System.Xml"> <Name>System.XML</Name> </Reference> + <ProjectReference Include="..\StructureMap.AutoMocking\StructureMap.AutoMocking.csproj"> + <Project>{0ED1B206-A1C9-4A52-BA87-3BA416C8725C}</Project> + <Name>StructureMap.AutoMocking</Name> + </ProjectReference> <ProjectReference Include="..\StructureMap.Client\StructureMap.Client.csproj"> <Name>StructureMap.Client</Name> <Project>{887C4441-07A4-489D-B8D9-EFE9D28A47CA}</Project> Modified: trunk/bin/Rhino.Mocks.dll =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2007-12-22 17:45:22
|
Revision: 50 http://structuremap.svn.sourceforge.net/structuremap/?rev=50&view=rev Author: jeremydmiller Date: 2007-12-22 09:45:18 -0800 (Sat, 22 Dec 2007) Log Message: ----------- shortcuts for <AddInstance> to simplify Xml configuration, interceptors and enrichment at both the Instance and PluginType level. The very beginnings of an AutoMocking approach with RhinoMocks Modified Paths: -------------- trunk/AssembliesBuildOrder.xml trunk/AssembliesDependencies.xml trunk/AssembliesMetrics.xml trunk/ComponentDependenciesDiagram.png trunk/Source/CommonAssemblyInfo.cs trunk/Source/StructureMap/Configuration/ConfigurationParser.cs trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/LiteralMemento.cs trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs trunk/Source/StructureMap/Configuration/DSL/PrototypeMemento.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/Configuration/FamilyParser.cs trunk/Source/StructureMap/Configuration/UserControlMemento.cs trunk/Source/StructureMap/Configuration/XmlConstants.cs trunk/Source/StructureMap/ConstructorMemento.cs trunk/Source/StructureMap/Graph/PluginFamily.cs trunk/Source/StructureMap/IInstanceManager.cs trunk/Source/StructureMap/InstanceFactory.cs trunk/Source/StructureMap/InstanceManager.cs trunk/Source/StructureMap/InstanceMemento.cs trunk/Source/StructureMap/Source/XmlAttributeInstanceMemento.cs trunk/Source/StructureMap/StructureMap.csproj trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap/StructureMapException.resx trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs trunk/Source/StructureMap.Testing/Configuration/DefaultInstanceNodeTester.cs trunk/Source/StructureMap.Testing/Container/InstanceFactoryTester.cs trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj trunk/Source/StructureMap.Testing.Widget3/IService.cs trunk/Source/StructureMap.sln trunk/TypesDependencies.xml trunk/TypesMetrics.xml Added Paths: ----------- trunk/Source/StructureMap/Configuration/DSL/ChildArrayExpression.cs trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs trunk/Source/StructureMap/Delegates.cs trunk/Source/StructureMap.AutoMocking/ trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs trunk/Source/StructureMap.AutoMocking/Properties/ trunk/Source/StructureMap.AutoMocking/Properties/AssemblyInfo.cs trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj trunk/Source/StructureMap.Testing/AutoMocking/ trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.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/ReferenceMementoBuilderTester.cs trunk/Source/StructureMap.Testing/Configuration/ShortcuttedInstanceNodeTester.cs trunk/Source/StructureMap.Testing/InstanceMementoTester.cs trunk/Source/StructureMap.Testing/TestData/ShortInstance.xml Modified: trunk/AssembliesBuildOrder.xml =================================================================== --- trunk/AssembliesBuildOrder.xml 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/AssembliesBuildOrder.xml 2007-12-22 17:45:18 UTC (rev 50) @@ -1,6 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<AssemblySortForCompilOrObfusk> - <Assembly Name="StructureMap">1</Assembly> - <Assembly Name="StructureMap.DeploymentTasks">2</Assembly> - <Assembly Name="StructureMap.Client">3</Assembly> -</AssemblySortForCompilOrObfusk> \ No newline at end of file +<AssemblySortForCompilOrObfusk /> \ No newline at end of file Modified: trunk/AssembliesDependencies.xml =================================================================== --- trunk/AssembliesDependencies.xml 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/AssembliesDependencies.xml 2007-12-22 17:45:18 UTC (rev 50) @@ -1,24 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<AssemblyDependencies> - <Dependencies_For Assembly="StructureMap"> - <DependsOn> - <DependsOn_Name>nmock</DependsOn_Name> - </DependsOn> - <ReferencedBy> - <ReferencedBy_Name>StructureMap.DeploymentTasks</ReferencedBy_Name> - <ReferencedBy_Name>StructureMap.Client</ReferencedBy_Name> - </ReferencedBy> - </Dependencies_For> - <Dependencies_For Assembly="StructureMap.DeploymentTasks"> - <DependsOn> - <DependsOn_Name>nant.core</DependsOn_Name> - <DependsOn_Name>StructureMap</DependsOn_Name> - </DependsOn> - </Dependencies_For> - <Dependencies_For Assembly="StructureMap.Client"> - <DependsOn> - <DependsOn_Name>StructureMap</DependsOn_Name> - <DependsOn_Name>AxInterop.SHDocVw</DependsOn_Name> - </DependsOn> - </Dependencies_For> -</AssemblyDependencies> \ No newline at end of file +<AssemblyDependencies /> \ No newline at end of file Modified: trunk/AssembliesMetrics.xml =================================================================== --- trunk/AssembliesMetrics.xml 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/AssembliesMetrics.xml 2007-12-22 17:45:18 UTC (rev 50) @@ -1,6 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<AssembliesMetrics> - <Assembly Assembly="StructureMap" NTypes="147" NAbstractTypes="26" NILInstructionInAsm="18779" AfferentCoupling="60" EfferentCoupling="2" RelationalCohesion="4.69" Instability="0.03" Abstractness="0.18" DistFrMainSeq="0.56" NormDistFrMainSeq="0.79" /> - <Assembly Assembly="StructureMap.DeploymentTasks" NTypes="14" NAbstractTypes="1" NILInstructionInAsm="1661" AfferentCoupling="0" EfferentCoupling="18" RelationalCohesion="1" Instability="1" Abstractness="0.07" DistFrMainSeq="0.05" NormDistFrMainSeq="0.07" /> - <Assembly Assembly="StructureMap.Client" NTypes="30" NAbstractTypes="6" NILInstructionInAsm="2997" AfferentCoupling="0" EfferentCoupling="38" RelationalCohesion="1.93" Instability="1" Abstractness="0.2" DistFrMainSeq="0.14" NormDistFrMainSeq="0.2" /> -</AssembliesMetrics> \ No newline at end of file +<AssembliesMetrics /> \ No newline at end of file Modified: trunk/ComponentDependenciesDiagram.png =================================================================== (Binary files differ) Modified: trunk/Source/CommonAssemblyInfo.cs =================================================================== --- trunk/Source/CommonAssemblyInfo.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/CommonAssemblyInfo.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. -// Runtime Version:2.0.50727.832 +// Runtime Version:2.0.50727.1433 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. Modified: trunk/Source/StructureMap/Configuration/ConfigurationParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -179,6 +179,13 @@ { familyParser.ParseDefaultElement(element); } + + XmlNodeList instanceNodes = findNodes(XmlConstants.ADD_INSTANCE_NODE); + foreach (XmlElement element in instanceNodes) + { + familyParser.ParseInstanceElement(element); + } + } Added: trunk/Source/StructureMap/Configuration/DSL/ChildArrayExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ChildArrayExpression.cs (rev 0) +++ trunk/Source/StructureMap/Configuration/DSL/ChildArrayExpression.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -0,0 +1,50 @@ +using System; +using StructureMap.Graph; + +namespace StructureMap.Configuration.DSL +{ + public class ChildArrayExpression<PLUGINTYPE> : IExpression + { + private readonly InstanceExpression _parent; + private readonly MemoryInstanceMemento _memento; + private readonly string _propertyName; + private IMementoBuilder[] _builders; + private Type _pluginType = typeof (PLUGINTYPE); + + public ChildArrayExpression(InstanceExpression parent, MemoryInstanceMemento memento, string propertyName) + { + _parent = parent; + _memento = memento; + _propertyName = propertyName; + + _pluginType = typeof (PLUGINTYPE).GetElementType(); + } + + void IExpression.Configure(PluginGraph graph) + { + PluginFamily family = graph.LocateOrCreateFamilyForType(_pluginType); + InstanceMemento[] childMementos = new InstanceMemento[_builders.Length]; + for (int i = 0; i < _builders.Length; i++) + { + InstanceMemento memento = processMementoBuilder(_builders[i], family, graph); + childMementos[i] = memento; + } + + _memento.AddChildArray(_propertyName, childMementos); + } + + private InstanceMemento processMementoBuilder(IMementoBuilder builder, PluginFamily family, PluginGraph graph) + { + builder.ValidatePluggability(_pluginType); + builder.Configure(graph); + return builder.BuildMemento(family); + } + + public InstanceExpression Contains(params IMementoBuilder[] builders) + { + _builders = builders; + + return _parent; + } + } +} \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -11,16 +11,16 @@ /// <summary> /// Represents the parameters for creating instances of a given Type /// </summary> - public class CreatePluginFamilyExpression : IExpression + public class CreatePluginFamilyExpression<PLUGINTYPE> : IExpression { private Type _pluginType; private List<AlterPluginFamilyDelegate> _alterations = new List<AlterPluginFamilyDelegate>(); private InstanceScope _scope = InstanceScope.PerRequest; private List<IExpression> _children = new List<IExpression>(); - public CreatePluginFamilyExpression(Type pluginType) + public CreatePluginFamilyExpression() { - _pluginType = pluginType; + _pluginType = typeof(PLUGINTYPE); } void IExpression.Configure(PluginGraph graph) @@ -50,7 +50,7 @@ /// </summary> /// <param name="builder"></param> /// <returns></returns> - public CreatePluginFamilyExpression TheDefaultIs(IMementoBuilder builder) + public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIs(IMementoBuilder builder) { builder.ValidatePluggability(_pluginType); @@ -65,7 +65,7 @@ return this; } - public CreatePluginFamilyExpression AddInstance(IMementoBuilder builder) + public CreatePluginFamilyExpression<PLUGINTYPE> AddInstance(IMementoBuilder builder) { builder.ValidatePluggability(_pluginType); @@ -86,7 +86,7 @@ /// </summary> /// <typeparam name="CONCRETETYPE"></typeparam> /// <returns></returns> - public CreatePluginFamilyExpression TheDefaultIsConcreteType<CONCRETETYPE>() + public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIsConcreteType<CONCRETETYPE>() where CONCRETETYPE : PLUGINTYPE { ExpressionValidator.ValidatePluggabilityOf(typeof (CONCRETETYPE)).IntoPluginType(_pluginType); @@ -105,7 +105,7 @@ /// </summary> /// <param name="scope"></param> /// <returns></returns> - public CreatePluginFamilyExpression CacheBy(InstanceScope scope) + public CreatePluginFamilyExpression<PLUGINTYPE> CacheBy(InstanceScope scope) { _alterations.Add(delegate(PluginFamily family) { @@ -120,13 +120,32 @@ /// Convenience method to mark a PluginFamily as a Singleton /// </summary> /// <returns></returns> - public CreatePluginFamilyExpression AsSingletons() + public CreatePluginFamilyExpression<PLUGINTYPE> AsSingletons() { _alterations.Add( delegate(PluginFamily family) { family.InterceptionChain.AddInterceptor(new SingletonInterceptor()); }); return this; } - + + public CreatePluginFamilyExpression<PLUGINTYPE> OnCreation(StartupHandler<PLUGINTYPE> handler) + { + _alterations.Add(delegate (PluginFamily family) + { + family.InstanceInterceptor = new StartupInterceptor<PLUGINTYPE>(handler); + }); + + return this; + } + + public CreatePluginFamilyExpression<PLUGINTYPE> EnrichWith(EnrichmentHandler<PLUGINTYPE> handler) + { + _alterations.Add(delegate(PluginFamily family) + { + family.InstanceInterceptor = new EnrichmentInterceptor<PLUGINTYPE>(handler); + }); + + return this; + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -71,42 +71,44 @@ /// in the case of a constructor function that consumes more than one argument /// of type T /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="CONSTRUCTORARGUMENTTYPE"></typeparam> /// <param name="propertyName"></param> /// <returns></returns> - public ChildInstanceExpression Child<T>(string propertyName) + public ChildInstanceExpression Child<CONSTRUCTORARGUMENTTYPE>(string propertyName) { ChildInstanceExpression child = new ChildInstanceExpression(this, _memento, propertyName); addChildExpression(child); - child.ChildType = typeof (T); + child.ChildType = typeof (CONSTRUCTORARGUMENTTYPE); return child; } /// <summary> - /// Start the definition of a child instance for type T + /// Start the definition of a child instance for type CONSTRUCTORARGUMENTTYPE /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="CONSTRUCTORARGUMENTTYPE"></typeparam> /// <returns></returns> - public ChildInstanceExpression Child<T>() + public ChildInstanceExpression Child<CONSTRUCTORARGUMENTTYPE>() { - string propertyName = findPropertyName<T>(); + string propertyName = findPropertyName<CONSTRUCTORARGUMENTTYPE>(); - if (string.IsNullOrEmpty(propertyName)) - { - throw new StructureMapException(305, TypePath.GetAssemblyQualifiedName(typeof (T))); - } - ChildInstanceExpression child = new ChildInstanceExpression(this, _memento, propertyName); addChildExpression(child); - child.ChildType = typeof (T); + child.ChildType = typeof (CONSTRUCTORARGUMENTTYPE); return child; } private string findPropertyName<T>() { Plugin plugin = Plugin.CreateImplicitPlugin(_pluggedType); - return plugin.FindFirstConstructorArgumentOfType<T>(); + string propertyName = plugin.FindFirstConstructorArgumentOfType<T>(); + + if (string.IsNullOrEmpty(propertyName)) + { + throw new StructureMapException(305, TypePath.GetAssemblyQualifiedName(typeof(T))); + } + + return propertyName; } public override void ValidatePluggability(Type pluginType) @@ -158,5 +160,33 @@ return _parent; } } + + public ChildArrayExpression<PLUGINTYPE> ChildArray<PLUGINTYPE>() + { + validateTypeIsArray<PLUGINTYPE>(); + + string propertyName = findPropertyName<PLUGINTYPE>(); + return ChildArray<PLUGINTYPE>(propertyName); + } + + public ChildArrayExpression<PLUGINTYPE> ChildArray<PLUGINTYPE>(string propertyName) + { + validateTypeIsArray<PLUGINTYPE>(); + + ChildArrayExpression<PLUGINTYPE> expression = new ChildArrayExpression<PLUGINTYPE>(this, _memento, propertyName); + addChildExpression(expression); + + return expression; + } + + private static void validateTypeIsArray<PLUGINTYPE>() + { + if (!typeof(PLUGINTYPE).IsArray) + { + throw new StructureMapException(307); + } + } + + } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/LiteralMemento.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/LiteralMemento.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Configuration/DSL/LiteralMemento.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -59,7 +59,7 @@ get { throw new NotImplementedException(); } } - public override object Build(IInstanceCreator creator) + protected override object buildInstance(IInstanceCreator creator) { return _instance; } Modified: trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -51,6 +51,22 @@ return thisInstance; } + public T OnCreation<TYPE>(StartupHandler<TYPE> handler) + { + StartupInterceptor<TYPE> interceptor = new StartupInterceptor<TYPE>(handler); + memento.Interceptor = interceptor; + + return thisInstance; + } + + public T EnrichWith<TYPE>(EnrichmentHandler<TYPE> handler) + { + EnrichmentInterceptor<TYPE> interceptor = new EnrichmentInterceptor<TYPE>(handler); + memento.Interceptor = interceptor; + + return thisInstance; + } + public string InstanceKey { get { return memento.InstanceKey; } Modified: trunk/Source/StructureMap/Configuration/DSL/PrototypeMemento.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/PrototypeMemento.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Configuration/DSL/PrototypeMemento.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -20,7 +20,7 @@ set { _prototype = value; } } - public override object Build(IInstanceCreator creator) + protected override object buildInstance(IInstanceCreator creator) { return _prototype.Clone(); } Added: trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs (rev 0) +++ trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -0,0 +1,41 @@ +using System; +using StructureMap.Graph; + +namespace StructureMap.Configuration.DSL +{ + public class ReferenceMementoBuilder : IMementoBuilder + { + private InstanceMemento _memento; + + public ReferenceMementoBuilder(string referenceKey) + { + _memento = MemoryInstanceMemento.CreateReferencedInstanceMemento(referenceKey); + } + + InstanceMemento IMementoBuilder.BuildMemento(PluginFamily family) + { + return _memento; + } + + InstanceMemento IMementoBuilder.BuildMemento(PluginGraph graph) + { + return _memento; + } + + void IMementoBuilder.SetInstanceName(string instanceKey) + { + + } + + void IMementoBuilder.ValidatePluggability(Type pluginType) + { + + } + + + void IExpression.Configure(PluginGraph graph) + { + // no-op; + } + } +} \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -54,9 +54,9 @@ /// </summary> /// <typeparam name="PLUGINTYPE"></typeparam> /// <returns></returns> - public CreatePluginFamilyExpression BuildInstancesOf<PLUGINTYPE>() + public CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>() { - CreatePluginFamilyExpression expression = new CreatePluginFamilyExpression(typeof (PLUGINTYPE)); + CreatePluginFamilyExpression<PLUGINTYPE> expression = new CreatePluginFamilyExpression<PLUGINTYPE>(); addExpression(expression); return expression; @@ -70,9 +70,9 @@ /// </summary> /// <typeparam name="PLUGINTYPE"></typeparam> /// <returns></returns> - public CreatePluginFamilyExpression ForRequestedType<PLUGINTYPE>() + public CreatePluginFamilyExpression<PLUGINTYPE> ForRequestedType<PLUGINTYPE>() { - CreatePluginFamilyExpression expression = new CreatePluginFamilyExpression(typeof(PLUGINTYPE)); + CreatePluginFamilyExpression<PLUGINTYPE> expression = new CreatePluginFamilyExpression<PLUGINTYPE>(); addExpression(expression); return expression; @@ -218,5 +218,11 @@ { return new ConstructorExpression<PLUGINTYPE>(builder); } + + public static ReferenceMementoBuilder Instance(string referencedKey) + { + return new ReferenceMementoBuilder(referencedKey); + } + } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/FamilyParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/FamilyParser.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Configuration/FamilyParser.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -51,6 +51,17 @@ _builder.RegisterMemento(pluginTypePath, memento); } + public void ParseInstanceElement(XmlElement element) + { + TypePath pluginTypePath = TypePath.GetTypePath(element.GetAttribute(XmlConstants.PLUGIN_TYPE)); + InstanceScope scope = findScope(element); + + InstanceMemento memento = _mementoCreator.CreateMemento(element); + + _builder.AddPluginFamily(pluginTypePath, null, new string[0], scope); + _builder.RegisterMemento(pluginTypePath, memento); + } + private InstanceScope findScope(XmlElement familyElement) { InstanceScope returnValue = InstanceScope.PerRequest; @@ -108,5 +119,6 @@ } + } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/UserControlMemento.cs =================================================================== --- trunk/Source/StructureMap/Configuration/UserControlMemento.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Configuration/UserControlMemento.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -25,7 +25,7 @@ set { _url = value; } } - public override object Build(IInstanceCreator creator) + protected override object buildInstance(IInstanceCreator creator) { return new Page().LoadControl(_url); } Modified: trunk/Source/StructureMap/Configuration/XmlConstants.cs =================================================================== --- trunk/Source/StructureMap/Configuration/XmlConstants.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Configuration/XmlConstants.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -17,6 +17,7 @@ public const string CONCRETE_KEY_ATTRIBUTE = "ConcreteKey"; public const string INTERCEPTORS_NODE = "Interceptors"; public const string INSTANCE_NODE = "Instance"; + public const string ADD_INSTANCE_NODE = "AddInstance"; public const string INSTANCES_NODE = "Instances"; public const string TYPE_ATTRIBUTE = "Type"; public const string KEY_ATTRIBUTE = "Key"; Modified: trunk/Source/StructureMap/ConstructorMemento.cs =================================================================== --- trunk/Source/StructureMap/ConstructorMemento.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/ConstructorMemento.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -25,7 +25,7 @@ } - public override object Build(IInstanceCreator creator) + protected override object buildInstance(IInstanceCreator creator) { return _builder(); } Added: trunk/Source/StructureMap/Delegates.cs =================================================================== --- trunk/Source/StructureMap/Delegates.cs (rev 0) +++ trunk/Source/StructureMap/Delegates.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -0,0 +1,51 @@ +namespace StructureMap +{ + public delegate T EnrichmentHandler<T>(T target); + public delegate void StartupHandler<T>(T target); + + public interface InstanceInterceptor + { + object Process(object target); + } + + public class NulloInterceptor : InstanceInterceptor + { + public object Process(object target) + { + return target; + } + } + + public class StartupInterceptor<T> : InstanceInterceptor + { + private readonly StartupHandler<T> _handler; + + public StartupInterceptor(StartupHandler<T> handler) + { + _handler = handler; + } + + + public object Process(object target) + { + _handler((T) target); + return target; + } + } + + public class EnrichmentInterceptor<T> : InstanceInterceptor + { + private readonly EnrichmentHandler<T> _handler; + + + public EnrichmentInterceptor(EnrichmentHandler<T> handler) + { + _handler = handler; + } + + public object Process(object target) + { + return _handler((T) target); + } + } +} Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -36,6 +36,7 @@ private string _pluginTypeName; private InterceptionChain _interceptionChain; private PluginCollection _plugins; + private InstanceInterceptor _instanceInterceptor = new NulloInterceptor(); public const string CONCRETE_KEY = "CONCRETE"; @@ -109,6 +110,12 @@ #endregion + public InstanceInterceptor InstanceInterceptor + { + get { return _instanceInterceptor; } + set { _instanceInterceptor = value; } + } + public PluginFamily CreateTemplatedClone(params Type[] templateTypes) { Type templatedType = _pluginType.MakeGenericType(templateTypes); Modified: trunk/Source/StructureMap/IInstanceManager.cs =================================================================== --- trunk/Source/StructureMap/IInstanceManager.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/IInstanceManager.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -13,5 +13,6 @@ void SetDefaultsToProfile(string profile); InstanceDefaultManager DefaultManager { get; } + T CreateInstance<T>(InstanceMemento memento); } } \ No newline at end of file Modified: trunk/Source/StructureMap/InstanceFactory.cs =================================================================== --- trunk/Source/StructureMap/InstanceFactory.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/InstanceFactory.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -1,9 +1,9 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Collections.Specialized; using System.Data; using System.Reflection; +using StructureMap.Configuration.DSL; using StructureMap.Emitting; using StructureMap.Graph; using StructureMap.Source; @@ -18,7 +18,20 @@ private Type _pluginType; private Dictionary<string, InstanceBuilder> _instanceBuilders; private MementoSource _source; + private InstanceInterceptor _interceptor = new NulloInterceptor(); + #region static constructors + public static InstanceFactory CreateFactoryWithDefault(Type pluginType, object defaultInstance) + { + PluginFamily family = new PluginFamily(pluginType); + InstanceFactory factory = new InstanceFactory(family, true); + factory.SetDefault(new LiteralMemento(defaultInstance)); + + return factory; + } + #endregion + + #region constructor functions private InstanceFactory() @@ -41,6 +54,7 @@ try { + _interceptor = family.InstanceInterceptor; determineMementoSource(family); _pluginType = family.PluginType; processPlugins(family.Plugins.All); @@ -162,10 +176,8 @@ private InstanceMemento findMemento(string instanceKey) { - InstanceMemento memento = null; + InstanceMemento memento = _source.GetMemento(instanceKey); - memento = _source.GetMemento(instanceKey); - if (memento == null) { throw new StructureMapException(200, instanceKey, _pluginType.FullName); @@ -198,11 +210,12 @@ InstanceMemento resolvedMemento = _source.ResolveMemento(memento); - return resolvedMemento.Build(this); + object instance = resolvedMemento.Build(this); + return _interceptor.Process(instance); } - public object BuildInstance(InstanceMemento memento) + object IInstanceCreator.BuildInstance(InstanceMemento memento) { if (!_instanceBuilders.ContainsKey(memento.ConcreteKey)) { @@ -210,7 +223,7 @@ 201, memento.ConcreteKey, memento.InstanceKey, PluginType.FullName); } - InstanceBuilder builder = (InstanceBuilder) _instanceBuilders[memento.ConcreteKey]; + InstanceBuilder builder = _instanceBuilders[memento.ConcreteKey]; try { Modified: trunk/Source/StructureMap/InstanceManager.cs =================================================================== --- trunk/Source/StructureMap/InstanceManager.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/InstanceManager.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -4,7 +4,6 @@ using StructureMap.Configuration.DSL; using StructureMap.Exceptions; using StructureMap.Graph; -using StructureMap.Interceptors; namespace StructureMap { @@ -158,6 +157,11 @@ return (T) CreateInstance(typeof (T), instanceKey); } + public T CreateInstance<T>(InstanceMemento memento) + { + return (T) CreateInstance(typeof (T), memento); + } + /// <summary> /// Creates a new object instance of the requested type /// </summary> @@ -263,7 +267,7 @@ instanceFactory.SetDefault(instanceKey); } - public IInstanceFactory this[Type pluginType] + public virtual IInstanceFactory this[Type pluginType] { get { @@ -337,9 +341,9 @@ return (T) FillDependencies(typeof (T)); } - private delegate InstanceFactory CreateFactoryDelegate(Type type); + protected delegate InstanceFactory CreateFactoryDelegate(Type type); - private IInstanceFactory getOrCreateFactory(Type type, CreateFactoryDelegate createFactory) + protected IInstanceFactory getOrCreateFactory(Type type, CreateFactoryDelegate createFactory) { if (!_factories.ContainsKey(type)) { Modified: trunk/Source/StructureMap/InstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/InstanceMemento.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/InstanceMemento.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -17,6 +17,7 @@ private DefinitionSource _definitionSource = DefinitionSource.Explicit; private string _concreteKey; private string _instanceKey; + private InstanceInterceptor _interceptor = new NulloInterceptor(); /// <summary> /// The named type of the object instance represented by the InstanceMemento. Translates to a concrete @@ -268,12 +269,32 @@ protected virtual string getPluggedType() { - return this.getPropertyValue(XmlConstants.PLUGGED_TYPE); + return getPropertyValue(XmlConstants.PLUGGED_TYPE); } - public virtual object Build(IInstanceCreator creator) + public object Build(IInstanceCreator creator) { + object instance = buildInstance(creator); + try + { + return _interceptor.Process(instance); + } + catch (Exception e) + { + throw new StructureMapException(308, e, InstanceKey, TypePath.GetAssemblyQualifiedName(instance.GetType())); + } + } + + protected virtual object buildInstance(IInstanceCreator creator) + { return creator.BuildInstance(this); } + + + public InstanceInterceptor Interceptor + { + get { return _interceptor; } + set { _interceptor = value; } + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Source/XmlAttributeInstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/Source/XmlAttributeInstanceMemento.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/Source/XmlAttributeInstanceMemento.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Xml; +using StructureMap.Configuration; using StructureMap.Configuration.Tokens; namespace StructureMap.Source @@ -20,17 +21,17 @@ protected override string innerConcreteKey { - get { return _element.GetAttribute("Type"); } + get { return _element.GetAttribute(XmlConstants.TYPE_ATTRIBUTE); } } public void SetConcreteKey(string concreteKey) { - _element.SetAttribute("Type", concreteKey); + _element.SetAttribute(XmlConstants.TYPE_ATTRIBUTE, concreteKey); } protected override string innerInstanceKey { - get { return _element.GetAttribute("Key"); } + get { return _element.GetAttribute(XmlConstants.KEY_ATTRIBUTE); } } public XmlElement InnerElement Modified: trunk/Source/StructureMap/StructureMap.csproj =================================================================== --- trunk/Source/StructureMap/StructureMap.csproj 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/StructureMap.csproj 2007-12-22 17:45:18 UTC (rev 50) @@ -209,6 +209,7 @@ <Compile Include="Configuration\DiagnosticGraphBuilder.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="Configuration\DSL\ChildArrayExpression.cs" /> <Compile Include="Configuration\DSL\ChildInstanceExpression.cs" /> <Compile Include="Configuration\DSL\ConstructorExpression.cs" /> <Compile Include="Configuration\DSL\CreatePluginFamilyExpression.cs" /> @@ -224,6 +225,7 @@ <Compile Include="Configuration\DSL\PropertyExpression.cs" /> <Compile Include="Configuration\DSL\PrototypeExpression.cs" /> <Compile Include="Configuration\DSL\PrototypeMemento.cs" /> + <Compile Include="Configuration\DSL\ReferenceMementoBuilder.cs" /> <Compile Include="Configuration\DSL\Registry.cs" /> <Compile Include="Configuration\DSL\ScanAssembliesExpression.cs" /> <Compile Include="Configuration\DSL\UserControlExpression.cs" /> @@ -333,6 +335,7 @@ <SubType>Code</SubType> </Compile> <Compile Include="ConstructorMemento.cs" /> + <Compile Include="Delegates.cs" /> <Compile Include="DeploymentTasks\DeploymentConfiguration.cs"> <SubType>Code</SubType> </Compile> Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -164,11 +164,11 @@ /// <summary> /// Direct StructureMap to create instances of Type T /// </summary> - /// <typeparam name="T">The Type to build</typeparam> + /// <typeparam name="PLUGINTYPE">The Type to build</typeparam> /// <returns></returns> - public static CreatePluginFamilyExpression BuildInstancesOf<T>() + public static CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>() { - return _registry.BuildInstancesOf<T>(); + return _registry.BuildInstancesOf<PLUGINTYPE>(); } /// <summary> Modified: trunk/Source/StructureMap/StructureMapException.resx =================================================================== --- trunk/Source/StructureMap/StructureMapException.resx 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap/StructureMapException.resx 2007-12-22 17:45:18 UTC (rev 50) @@ -252,4 +252,10 @@ <data name="306" xml:space="preserve"> <value>The configured BuilderDelegate of type {0} does not match the PluginFamily type {1}</value> </data> + <data name="307" xml:space="preserve"> + <value>In the call to ChildArray<T>(), the type T must be an array</value> + </data> + <data name="308" xml:space="preserve"> + <value>A configured instance interceptor has failed for Instance '{0}' and concrete type '{1}'</value> + </data> </root> \ No newline at end of file Added: trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs (rev 0) +++ trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -0,0 +1,39 @@ +using System; + +namespace StructureMap.AutoMocking +{ + public interface ServiceLocator + { + T Service<T>(); + object Service(Type serviceType); + } + + public class AutoMockedInstanceManager : InstanceManager + { + private readonly ServiceLocator _locator; + + public AutoMockedInstanceManager(ServiceLocator locator) + { + _locator = locator; + } + + public override IInstanceFactory this[Type pluginType] + { + get + { + return getOrCreateFactory(pluginType, + delegate + { + object service = _locator.Service(pluginType); + InstanceFactory factory + = InstanceFactory.CreateFactoryWithDefault(pluginType, service); + + return factory; + }); + + + } + set { base[pluginType] = value; } + } + } +} Added: trunk/Source/StructureMap.AutoMocking/Properties/AssemblyInfo.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/Properties/AssemblyInfo.cs (rev 0) +++ trunk/Source/StructureMap.AutoMocking/Properties/AssemblyInfo.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -0,0 +1,9 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("StructureMap.AutoMocking")] +[assembly: AssemblyDescription("")] Added: trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs (rev 0) +++ trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using Rhino.Mocks; + +namespace StructureMap.AutoMocking +{ + public delegate void GenericVoidMethod<TARGETCLASS>(TARGETCLASS target); + public delegate void VoidMethod(); + + public class RhinoAutoMocker : MockRepository, ServiceLocator + { + private Dictionary<Type, object> _services; + private AutoMockedInstanceManager _manager; + + public RhinoAutoMocker() + { + _services = new Dictionary<Type, object>(); + _manager = new AutoMockedInstanceManager(this); + } + + public TARGETCLASS Create<TARGETCLASS>() + { + throw new NotImplementedException(); + } + + public T Service<T>() + { + throw new NotImplementedException(); + } + + public T UsePartialMock<T>() + { + throw new NotImplementedException(); + } + + public void Inject<T>(T stub) + { + throw new NotImplementedException(); + } + + public object Service(Type serviceType) + { + throw new NotImplementedException(); + } + } +} Added: trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj =================================================================== --- trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj (rev 0) +++ trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj 2007-12-22 17:45:18 UTC (rev 50) @@ -0,0 +1,61 @@ +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>8.0.50727</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{0ED1B206-A1C9-4A52-BA87-3BA416C8725C}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>StructureMap.AutoMocking</RootNamespace> + <AssemblyName>StructureMap.AutoMocking</AssemblyName> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="Rhino.Mocks, Version=2.9.1.10183, Culture=neutral, PublicKeyToken=0b3305902db7183f, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\bin\Rhino.Mocks.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Data" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="..\CommonAssemblyInfo.cs"> + <Link>CommonAssemblyInfo.cs</Link> + </Compile> + <Compile Include="AutoMockedInstanceManager.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="RhinoAutoMocker.cs" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\StructureMap\StructureMap.csproj"> + <Project>{3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}</Project> + <Name>StructureMap</Name> + </ProjectReference> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file Added: trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -0,0 +1,14 @@ +using NUnit.Framework; +using Rhino.Mocks; + +namespace StructureMap.Testing.AutoMocking +{ + [TestFixture] + public class RhinoAutoMockerTester + { + [SetUp] + public void SetUp() + { + } + } +} Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -1,12 +1,11 @@ using NUnit.Framework; -using Rhino.Mocks; using StructureMap.Configuration.DSL; -using StructureMap.Testing.Container; +using StructureMap.Testing.Graph; namespace StructureMap.Testing.Configuration.DSL { [TestFixture] - public class ConstructorExpressionTester + public class ConstructorExpressionTester : Registry { [SetUp] public void SetUp() @@ -15,9 +14,13 @@ ObjectFactory.Reset(); } - public interface Abstraction { } + public interface Abstraction + { + } - public class Concretion : Abstraction { } + public class Concretion : Abstraction + { + } [Test] public void ConstructSomething() @@ -26,7 +29,7 @@ Registry registry = new Registry(); registry.ForRequestedType<Abstraction>().TheDefaultIs( - Registry.ConstructedBy<Abstraction>(delegate { return concretion; }) + ConstructedBy<Abstraction>(delegate { return concretion; }) ); IInstanceManager manager = registry.BuildInstanceManager(); @@ -40,15 +43,14 @@ Registry registry = new Registry(); registry.ForRequestedType<Abstraction>().AddInstance( - Registry.ConstructedBy<Abstraction>(delegate { return concretion; }) + ConstructedBy<Abstraction>(delegate { return concretion; }) ); - + IInstanceManager manager = registry.BuildInstanceManager(); Abstraction actual = manager.GetAllInstances<Abstraction>()[0]; Assert.AreSame(concretion, actual); - } [Test] @@ -59,18 +61,17 @@ Registry registry = new Registry(); registry.ForRequestedType<Abstraction>().AddInstance( - Registry.ConstructedBy<Abstraction>(delegate { return concretion1; }).WithName("One") + ConstructedBy<Abstraction>(delegate { return concretion1; }).WithName("One") ); registry.ForRequestedType<Abstraction>().AddInstance( - Registry.ConstructedBy<Abstraction>(delegate { return concretion2; }).WithName("Two") + ConstructedBy<Abstraction>(delegate { return concretion2; }).WithName("Two") ); IInstanceManager manager = registry.BuildInstanceManager(); Assert.AreSame(concretion1, manager.CreateInstance<Abstraction>("One")); Assert.AreSame(concretion2, manager.CreateInstance<Abstraction>("Two")); - } [Test] @@ -82,19 +83,16 @@ Registry registry = new Registry(); registry.ForRequestedType<Abstraction>() .AddInstance( - Registry.ConstructedBy<Abstraction>(delegate { return concretion1; }).WithName("One") + ConstructedBy<Abstraction>(delegate { return concretion1; }).WithName("One") ) .AddInstance( - Registry.ConstructedBy<Abstraction>(delegate { return concretion2; }).WithName("Two") + ConstructedBy<Abstraction>(delegate { return concretion2; }).WithName("Two") ); IInstanceManager manager = registry.BuildInstanceManager(); Assert.AreSame(concretion1, manager.CreateInstance<Abstraction>("One")); Assert.AreSame(concretion2, manager.CreateInstance<Abstraction>("Two")); - - } + } } - - -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2007-12-14 11:16:38 UTC (rev 49) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -16,13 +16,6 @@ { } - [Test, ExpectedException(typeof (StructureMapException))] - public void TheConceteTypeDoesNotCase() - { - Registry registry = new Registry(); - registry.BuildInstancesOf<Rule>().TheDefaultIsConcreteType<IWidget>(); - } - [Test] public void TheDefaultInstanceIsConcreteType() { @@ -104,7 +97,7 @@ PluginGraph pluginGraph = new PluginGraph(); using (Registry registry = new Registry(pluginGraph)) { - CreatePluginFamilyExpression expression = + CreatePluginFamilyExpression<IGateway> expression = registry.BuildInstancesOf<IGateway>(); Assert.IsNotNull(expression); } @@ -119,7 +112,7 @@ PluginGraph pluginGraph = new PluginGraph(); using (Registry registry = new Registry(pluginGraph)) { - CreatePluginFamilyExpression expression = + CreatePluginFamilyExpression<IGateway> expression = registry.BuildInstancesOf<IGateway>().CacheBy(InstanceScope.ThreadLocal); Assert.IsNotNull(expression); } @@ -134,7 +127,7 @@ PluginGraph pluginGraph = new PluginGraph(); using (Registry registry = new Registry(pluginGraph)) { - CreatePluginFamilyExpression expression = + CreatePluginFamilyExpression<IGateway> expression = registry.BuildInstancesOf<IGateway>().AsSingletons(); Assert.IsNotNull(expression); } Added: trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs 2007-12-22 17:45:18 UTC (rev 50) @@ -0,0 +1,216 @@ +using NUnit.Framework; +using StructureMap.Configuration.DSL; + +namespace StructureMap.Testing.Configuration.DSL +{ + [TestFixture] + public class InjectArrayTester + { + [SetUp] + public void SetUp() + { + } + + [Test] + public void ProgrammaticallyInjectArrayAllInline() + { + Registry registry = new Registry(); + + registry.ForRequestedType<Processor>() + .TheDefaultIs( + Registry.Instance<Processor>().UsingConcreteType<Processor>() + .ChildArray<IHandler[]>().Contains( + Registry.Instance<IHandler>().UsingConcreteType<Handler1>(), + Registry.Instance<IHandler>().UsingConcreteType<Handler2>(), + Registry.Instance<IHandler>().UsingConcreteType<Handler3>() + ) + .WithProperty("name").EqualTo("Jeremy") + ); + + IInstanceManager manager = registry.BuildInstanceManager(); + Processor processor = manager.CreateInstance<Processor>(); + + Assert.IsInstanceOfType(typeof (Handler1), processor.Handlers[0]); + Assert.IsInstanceOfType(typeof (Handler2), processor.Handlers[1]); + Assert.IsInstanceOfType(typeof (Handler3), processor.Handlers[2]); + } + + [Test] + public void CanStillAddOtherPropertiesAfterTheCallToChildArray() + { + Registry registry = new Registry(); + + registry.ForRequestedType<Processor>() + .TheDefaultIs( + Registry.Instance<Processor>().UsingConcreteType<Processor>() + .ChildArray<IHandler[]>().Contains( + Registry.Instance<IHandler>().UsingConcreteType<Handler1>(), + Registry.Instance<IHandler>().UsingConcreteType<Handler2>(), + Registry.Instance<IHandler>().UsingConcreteType<Handler3>() + ) + .WithProperty("name").EqualTo("Jeremy") + ); + + IInstanceManager manager = registry.BuildInstanceManager(); + Processor processor = manager.CreateInstance<Processor>(); + + Assert.AreEqual("Jeremy", processor.Name); + } + + [Test, + ExpectedException(typeof (StructureMapException), + ExpectedMessage = + "StructureMap Exception Code: 307\nIn the call to ChildArray<T>(), the type T must be an array")] + public void TryToInjectByTheElementTypeInsteadOfTheArrayType() + { + Registry registry = new Registry(); + + registry.ForRequestedType<Processor>() + .TheDefaultIs( + Registry.Instance<Processor>().UsingConcreteType<Processor>() + .WithProperty("name").EqualTo("Jeremy") + .ChildArray<IHandler>().Contains( + Registry.Instance<IHandler>().UsingConcreteType<Handler1>()) + ); + } + + + [Test, + ExpectedException(typeof (StructureMapException), + ExpectedMessage = + "StructureMap Exception Code: 307\nIn the call to ChildArray<T>(), the type T must be an array")] + public void InjectPropertiesByNameButUseTheElementType() + { + Registry registry = new Registry(); + + registry.ForRequestedType<Processor2>() + .TheDefaultIs( + Registry.Instance<Processor2>().UsingConcreteType<Processor2>() + .ChildArray<IHandler>("first").Contains( + Registry.Instance<IHandler>().UsingConcreteType<Handler1>(), + Registry.Instance<IHandler>().UsingConcreteType<Handler2>() + ) + .ChildArray<IHandler[]>("second").Contains( + Registry.Instance<IHandler>().UsingConcreteType<Handler2>(), + Registry.Instance<IHandler>().UsingConcreteType<Handler3>() + ) + ); + } + + [Test] + public void InjectPropertiesByName() + { + Registry registry = new Registry(); + + registry.ForRequestedType<Processor2>() + .TheDefaultIs( + Registry.Instance<Processor2>().UsingConcreteType<Processor2>() + .ChildArray<IHandler[]>("first").Contains( + Registry.Instance<IHandler>().UsingConcreteType<Handler1>(), + Registry.Instance<IHandler>().UsingConcreteType<Handler2>() + ) + .ChildArray<IHandler[]>("second").Contains( + Registry.Instance<IHandler>().UsingConcreteType<Handler2>(), + Registry.Instance<IHandler>().UsingConcreteType<Handler3>() + ) + ); + + IInstanceManager manager = registry.BuildInstanceManager(); + Processor2 processor = manager.CreateInstance<Processor2>(); + + Assert.IsInstanceOfType(typeof (Handler1), processor.First[0]); + Assert.IsInstanceOfType(typeof (Handler2), processor.First[1]); + Assert.IsInstanceOfType(typeof (Handler2), processor.Second[0]); + Assert.IsInstanceOfType(typeof (Handler3), processor.Second[1]); + } + + [Test] + public void PlaceMemberInArrayByReference() + { + Registry registry = new Registry(); + registry.AddInstanceOf<IHandler>().UsingConcreteType<Handler1>().WithName("One"); + registry.AddInstanceOf<IHandler>().UsingConcreteType<Handler2>().WithName("Two"); + + registry.ForRequestedType<Processor>() + .TheDefaultIs( + Registry.Instance<Processor>().UsingConcreteType<Processor>() + .WithProperty("name").EqualTo("Jeremy") + .ChildArray<IHandler[]>().Contains( + Registry.Instance("Two"), + Registry.Instance("One") + ) + ); + + IInstanceManager manager = registry.BuildInstanceManager(); + Processor processor = manager.CreateInstance<Processor>(); + + Assert.IsInstanceOfType(typeof(Handler2), processor.Handlers[0]); + Assert.IsInstanceOfType(typeof(Handler1), pr... [truncated message content] |
From: <jer...@us...> - 2007-12-14 11:16:42
|
Revision: 49 http://structuremap.svn.sourceforge.net/structuremap/?rev=49&view=rev Author: jeremydmiller Date: 2007-12-14 03:16:38 -0800 (Fri, 14 Dec 2007) Log Message: ----------- Configuration changes for the dynamic injection Modified Paths: -------------- trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs trunk/Source/StructureMap/Configuration/DSL/LiteralMemento.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/Graph/Plugin.cs trunk/Source/StructureMap/Graph/PluginCollection.cs trunk/Source/StructureMap/Graph/PluginFamily.cs trunk/Source/StructureMap/IInstanceFactory.cs trunk/Source/StructureMap/IInstanceManager.cs trunk/Source/StructureMap/InstanceBuilder.cs trunk/Source/StructureMap/InstanceFactory.cs trunk/Source/StructureMap/InstanceManager.cs trunk/Source/StructureMap/Interceptors/InstanceFactoryInterceptor.cs trunk/Source/StructureMap/MemoryInstanceMemento.cs trunk/Source/StructureMap/ObjectFactory.cs trunk/Source/StructureMap/StructureMap.csproj trunk/Source/StructureMap/StructureMapException.resx trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs trunk/Source/StructureMap.Testing/Container/FillDependenciesTester.cs trunk/Source/StructureMap.Testing/Container/FullStackFacadeTester.cs trunk/Source/StructureMap.Testing/Container/InstanceFactoryTester.cs trunk/Source/StructureMap.Testing/Container/MockingTester.cs trunk/Source/StructureMap.Testing/ObjectMother.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj trunk/Source/StructureMap.sln Added Paths: ----------- trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs trunk/Source/StructureMap/ConstructorMemento.cs trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs trunk/Source/StructureMap.Testing/ConstructorMementoTester.cs trunk/Source/StructureMap.Testing/Container/DynamicInjectionTester.cs Removed Paths: ------------- trunk/Source/StructureMap/MockInstanceFactory.cs trunk/Source/StructureMap/StubbedInstanceFactory.cs trunk/Source/StructureMap.Testing/Container/StubbedInstanceFactoryTester.cs Added: trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs (rev 0) +++ trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -0,0 +1,49 @@ +using System; +using StructureMap.Graph; + +namespace StructureMap.Configuration.DSL +{ + public class ConstructorExpression<PLUGINTYPE> : MementoBuilder<ConstructorExpression<PLUGINTYPE>> + { + private ConstructorMemento<PLUGINTYPE> _memento; + + public ConstructorExpression(BuildObjectDelegate<PLUGINTYPE> builder) + : base(typeof (PLUGINTYPE)) + { + _memento.Builder = builder; + } + + + protected override InstanceMemento memento + { + get { return _memento; } + } + + protected override ConstructorExpression<PLUGINTYPE> thisInstance + { + get { return this; } + } + + protected override void configureMemento(PluginFamily family) + { + } + + protected override void validate() + { + } + + protected override void buildMemento() + { + _memento = new ConstructorMemento<PLUGINTYPE>(); + } + + public override void ValidatePluggability(Type pluginType) + { + if (!pluginType.Equals(typeof(PLUGINTYPE))) + { + throw new StructureMapException(306, + typeof (PLUGINTYPE).FullName, pluginType.FullName); + } + } + } +} \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -65,20 +65,34 @@ return this; } + public CreatePluginFamilyExpression AddInstance(IMementoBuilder builder) + { + builder.ValidatePluggability(_pluginType); + + _children.Add(builder); + _alterations.Add(delegate (PluginFamily family) + { + InstanceMemento memento = builder.BuildMemento(family); + family.Source.AddExternalMemento(memento); + }); + + return this; + } + /// <summary> /// Convenience method that sets the default concrete type of the PluginType. Type T /// can only accept types that do not have any primitive constructor arguments. /// StructureMap has to know how to construct all of the constructor argument types. /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="CONCRETETYPE"></typeparam> /// <returns></returns> - public CreatePluginFamilyExpression TheDefaultIsConcreteType<T>() + public CreatePluginFamilyExpression TheDefaultIsConcreteType<CONCRETETYPE>() { - ExpressionValidator.ValidatePluggabilityOf(typeof (T)).IntoPluginType(_pluginType); + ExpressionValidator.ValidatePluggabilityOf(typeof (CONCRETETYPE)).IntoPluginType(_pluginType); _alterations.Add(delegate(PluginFamily family) { - Plugin plugin = family.Plugins.FindOrCreate(typeof (T)); + Plugin plugin = family.Plugins.FindOrCreate(typeof (CONCRETETYPE)); family.DefaultInstanceKey = plugin.ConcreteKey; }); @@ -112,5 +126,7 @@ delegate(PluginFamily family) { family.InterceptionChain.AddInterceptor(new SingletonInterceptor()); }); return this; } + + } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/LiteralMemento.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/LiteralMemento.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/Configuration/DSL/LiteralMemento.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -9,8 +9,14 @@ public LiteralMemento(object instance) { _instance = instance; + InstanceKey = Guid.NewGuid().ToString(); } + public LiteralMemento Named(string name) + { + InstanceKey = name; + return this; + } public object Instance { Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -52,16 +52,32 @@ /// Direct StructureMap to build instances of type T, and look for concrete classes /// marked with the [Pluggable] attribute that implement type T /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="PLUGINTYPE"></typeparam> /// <returns></returns> - public CreatePluginFamilyExpression BuildInstancesOf<T>() + public CreatePluginFamilyExpression BuildInstancesOf<PLUGINTYPE>() { - CreatePluginFamilyExpression expression = new CreatePluginFamilyExpression(typeof (T)); + CreatePluginFamilyExpression expression = new CreatePluginFamilyExpression(typeof (PLUGINTYPE)); addExpression(expression); return expression; } + /// <summary> + /// Direct StructureMap to build instances of type T, and look for concrete classes + /// marked with the [Pluggable] attribute that implement type T. + /// + /// This is the equivalent of calling BuildInstancesOf<T>() + /// </summary> + /// <typeparam name="PLUGINTYPE"></typeparam> + /// <returns></returns> + public CreatePluginFamilyExpression ForRequestedType<PLUGINTYPE>() + { + CreatePluginFamilyExpression expression = new CreatePluginFamilyExpression(typeof(PLUGINTYPE)); + addExpression(expression); + + return expression; + } + public IInstanceManager BuildInstanceManager() { ConfigurePluginGraph(_graph); @@ -72,57 +88,59 @@ /// <summary> /// Starts an instance definition of type T /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="PLUGINTYPE"></typeparam> /// <returns></returns> - public InstanceExpression.InstanceTypeExpression AddInstanceOf<T>() + public InstanceExpression.InstanceTypeExpression AddInstanceOf<PLUGINTYPE>() { - InstanceExpression expression = new InstanceExpression(typeof (T)); + InstanceExpression expression = new InstanceExpression(typeof (PLUGINTYPE)); addExpression(expression); return expression.TypeExpression(); } + + /// <summary> /// Convenience method to start the definition of an instance of type T /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="PLUGINTYPE"></typeparam> /// <returns></returns> - public static InstanceExpression.InstanceTypeExpression Instance<T>() + public static InstanceExpression.InstanceTypeExpression Instance<PLUGINTYPE>() { - InstanceExpression expression = new InstanceExpression(typeof (T)); + InstanceExpression expression = new InstanceExpression(typeof (PLUGINTYPE)); return expression.TypeExpression(); } /// <summary> /// Convenience method to register a prototype instance /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="PLUGINTYPE"></typeparam> /// <param name="prototype"></param> /// <returns></returns> - public static PrototypeExpression<T> Prototype<T>(T prototype) + public static PrototypeExpression<PLUGINTYPE> Prototype<PLUGINTYPE>(PLUGINTYPE prototype) { - return new PrototypeExpression<T>(prototype); + return new PrototypeExpression<PLUGINTYPE>(prototype); } /// <summary> /// Convenience method to register a preconfigured instance of type T /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="PLUGINTYPE"></typeparam> /// <param name="instance"></param> /// <returns></returns> - public static LiteralExpression<T> Object<T>(T instance) + public static LiteralExpression<PLUGINTYPE> Object<PLUGINTYPE>(PLUGINTYPE instance) { - return new LiteralExpression<T>(instance); + return new LiteralExpression<PLUGINTYPE>(instance); } /// <summary> /// Registers a preconfigured instance /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="PLUGINTYPE"></typeparam> /// <param name="target"></param> /// <returns></returns> - public LiteralExpression<T> AddInstanceOf<T>(T target) + public LiteralExpression<PLUGINTYPE> AddInstanceOf<PLUGINTYPE>(PLUGINTYPE target) { - LiteralExpression<T> literal = new LiteralExpression<T>(target); + LiteralExpression<PLUGINTYPE> literal = new LiteralExpression<PLUGINTYPE>(target); addExpression(literal); return literal; @@ -131,12 +149,12 @@ /// <summary> /// Add a preconfigured instance as a Prototype /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="PLUGINTYPE"></typeparam> /// <param name="prototype"></param> /// <returns></returns> - public PrototypeExpression<T> AddPrototypeInstanceOf<T>(T prototype) + public PrototypeExpression<PLUGINTYPE> AddPrototypeInstanceOf<PLUGINTYPE>(PLUGINTYPE prototype) { - PrototypeExpression<T> expression = new PrototypeExpression<T>(prototype); + PrototypeExpression<PLUGINTYPE> expression = new PrototypeExpression<PLUGINTYPE>(prototype); addExpression(expression); return expression; @@ -145,12 +163,12 @@ /// <summary> /// convenience method for a UserControl /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="PLUGINTYPE"></typeparam> /// <param name="url"></param> /// <returns></returns> - public static UserControlExpression LoadUserControlFrom<T>(string url) + public static UserControlExpression LoadUserControlFrom<PLUGINTYPE>(string url) { - return new UserControlExpression(typeof (T), url); + return new UserControlExpression(typeof (PLUGINTYPE), url); } /// <summary> @@ -184,15 +202,21 @@ /// <summary> /// Registers a UserControl as an instance /// </summary> - /// <typeparam name="T"></typeparam> + /// <typeparam name="PLUGINTYPE"></typeparam> /// <param name="url"></param> /// <returns></returns> - public UserControlExpression LoadControlFromUrl<T>(string url) + public UserControlExpression LoadControlFromUrl<PLUGINTYPE>(string url) { - UserControlExpression expression = new UserControlExpression(typeof (T), url); + UserControlExpression expression = new UserControlExpression(typeof (PLUGINTYPE), url); addExpression(expression); return expression; } + + public static ConstructorExpression<PLUGINTYPE> ConstructedBy<PLUGINTYPE> + (BuildObjectDelegate<PLUGINTYPE> builder) + { + return new ConstructorExpression<PLUGINTYPE>(builder); + } } } \ No newline at end of file Added: trunk/Source/StructureMap/ConstructorMemento.cs =================================================================== --- trunk/Source/StructureMap/ConstructorMemento.cs (rev 0) +++ trunk/Source/StructureMap/ConstructorMemento.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -0,0 +1,40 @@ +using System; + +namespace StructureMap +{ + public delegate PLUGINTYPE BuildObjectDelegate<PLUGINTYPE>(); + + public class ConstructorMemento<PLUGINTYPE> : MemoryInstanceMemento + { + private BuildObjectDelegate<PLUGINTYPE> _builder; + + + public ConstructorMemento() + { + } + + public ConstructorMemento(string instanceKey, BuildObjectDelegate<PLUGINTYPE> builder) + : base(instanceKey, instanceKey) + { + _builder = builder; + } + + public ConstructorMemento(BuildObjectDelegate<PLUGINTYPE> builder) + : this(Guid.NewGuid().ToString(), builder) + { + + } + + public override object Build(IInstanceCreator creator) + { + return _builder(); + } + + + public BuildObjectDelegate<PLUGINTYPE> Builder + { + get { return _builder; } + set { _builder = value; } + } + } +} Modified: trunk/Source/StructureMap/Graph/Plugin.cs =================================================================== --- trunk/Source/StructureMap/Graph/Plugin.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/Graph/Plugin.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -13,6 +13,18 @@ { #region static + public static Plugin CreateAutofilledPlugin(Type concreteType) + { + string pluginKey = Guid.NewGuid().ToString(); + Plugin plugin = Plugin.CreateExplicitPlugin(concreteType, pluginKey, string.Empty); + if (!plugin.CanBeAutoFilled) + { + throw new StructureMapException(231); + } + + return plugin; + } + /// <summary> /// Finds an array of Plugin objects for a given PluginType in an Assembly object /// by searching for all exported types marked with [Pluggable] that can be cast @@ -428,5 +440,14 @@ throw new StructureMapException(302, typeof (T).FullName, _pluggedType.FullName); } + + public void AddToSource(MementoSource source) + { + InstanceMemento memento = CreateImplicitMemento(); + if (memento != null) + { + source.AddExternalMemento(memento); + } + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Graph/PluginCollection.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginCollection.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/Graph/PluginCollection.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -22,6 +22,17 @@ get { return _plugins.Values; } } + public Plugin[] All + { + get + { + Plugin[] returnValue = new Plugin[_plugins.Count]; + _plugins.Values.CopyTo(returnValue, 0); + + return returnValue; + } + } + public void Add(TypePath path, string concreteKey) { Plugin plugin = new Plugin(path, concreteKey); @@ -61,12 +72,9 @@ throw new StructureMapException(114, plugin.PluggedType.FullName, _family.PluginTypeName); } - InstanceMemento memento = plugin.CreateImplicitMemento(); - if (memento != null) - { - _family.Source.AddExternalMemento(memento); - } + plugin.AddToSource(_family.Source); + _plugins.Add(plugin.ConcreteKey, plugin); } Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -16,19 +16,14 @@ public static PluginFamily CreateAutoFilledPluginFamily(Type pluginType) { - Plugin plugin = Plugin.CreateExplicitPlugin(pluginType, CONCRETE_KEY, string.Empty); - if (!plugin.CanBeAutoFilled) - { - throw new StructureMapException(231); - } + Plugin plugin = Plugin.CreateAutofilledPlugin(pluginType); PluginFamily family = new PluginFamily(pluginType); family.DefinitionSource = DefinitionSource.Implicit; family.Plugins.Add(plugin); + family.DefaultInstanceKey = plugin.ConcreteKey; - family.DefaultInstanceKey = CONCRETE_KEY; - return family; } Modified: trunk/Source/StructureMap/IInstanceFactory.cs =================================================================== --- trunk/Source/StructureMap/IInstanceFactory.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/IInstanceFactory.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -69,5 +69,8 @@ /// </summary> /// <returns></returns> IList GetAllInstances(); + + void AddInstance(InstanceMemento memento); + InstanceMemento AddType<T>(); } } \ No newline at end of file Modified: trunk/Source/StructureMap/IInstanceManager.cs =================================================================== --- trunk/Source/StructureMap/IInstanceManager.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/IInstanceManager.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -8,7 +8,7 @@ T CreateInstance<T>(string instanceKey); T CreateInstance<T>(); T FillDependencies<T>(); - void Inject<T>(T instance); + void InjectStub<T>(T instance); IList<T> GetAllInstances<T>(); void SetDefaultsToProfile(string profile); Modified: trunk/Source/StructureMap/InstanceBuilder.cs =================================================================== --- trunk/Source/StructureMap/InstanceBuilder.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/InstanceBuilder.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -1,3 +1,6 @@ +using System; +using StructureMap.Graph; + namespace StructureMap { /// <summary> @@ -26,5 +29,11 @@ { get { return _manager; } } + + public bool IsType(Type type) + { + Type plugged = Type.GetType(PluggedType); + return plugged.Equals(type); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/InstanceFactory.cs =================================================================== --- trunk/Source/StructureMap/InstanceFactory.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/InstanceFactory.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Collections.Specialized; using System.Data; using System.Reflection; @@ -15,15 +16,14 @@ public class InstanceFactory : IInstanceFactory, IInstanceCreator { private Type _pluginType; - private string _assemblyName; - private HybridDictionary _instanceBuilders; + private Dictionary<string, InstanceBuilder> _instanceBuilders; private MementoSource _source; #region constructor functions private InstanceFactory() { - _instanceBuilders = new HybridDictionary(); + _instanceBuilders = new Dictionary<string, InstanceBuilder>(); _source = new MemoryMementoSource(); } @@ -42,8 +42,8 @@ try { determineMementoSource(family); - setPluginType(family.PluginType); - processPlugins(family.Plugins); + _pluginType = family.PluginType; + processPlugins(family.Plugins.All); determineDefaultKey(family, failOnException); } catch (Exception e) @@ -52,6 +52,7 @@ } } + private void determineMementoSource(PluginFamily family) { if (family.Source == null) @@ -102,13 +103,6 @@ } } - - private void setPluginType(Type PluginType) - { - _pluginType = PluginType; - _assemblyName = Guid.NewGuid().ToString().Replace(".", "") + "InstanceBuilderAssembly"; - } - #endregion /// <summary> @@ -125,21 +119,19 @@ #region create instance builders - private void processPlugins(PluginCollection plugins) + private void processPlugins(Plugin[] plugins) { - _instanceBuilders.Clear(); - Assembly assembly = createInstanceBuilderAssembly(plugins); - foreach (Plugin plugin in plugins) { addPlugin(assembly, plugin); } } - private Assembly createInstanceBuilderAssembly(PluginCollection plugins) + private Assembly createInstanceBuilderAssembly(Plugin[] plugins) { - InstanceBuilderAssembly builderAssembly = new InstanceBuilderAssembly(_assemblyName, PluginType); + string assemblyName = Guid.NewGuid().ToString().Replace(".", "") + "InstanceBuilderAssembly"; + InstanceBuilderAssembly builderAssembly = new InstanceBuilderAssembly(assemblyName, PluginType); foreach (Plugin plugin in plugins) { @@ -212,7 +204,7 @@ public object BuildInstance(InstanceMemento memento) { - if (!_instanceBuilders.Contains(memento.ConcreteKey)) + if (!_instanceBuilders.ContainsKey(memento.ConcreteKey)) { throw new StructureMapException( 201, memento.ConcreteKey, memento.InstanceKey, PluginType.FullName); @@ -338,5 +330,30 @@ return list; } + + public void AddInstance(InstanceMemento memento) + { + _source.AddExternalMemento(memento); + } + + + public InstanceMemento AddType<T>() + { + Type pluggedType = typeof (T); + foreach (KeyValuePair<string, InstanceBuilder> pair in _instanceBuilders) + { + InstanceBuilder builder = pair.Value; + if (builder.IsType(pluggedType)) + { + return new MemoryInstanceMemento(builder.ConcreteTypeKey, builder.ConcreteTypeKey); + } + } + + Plugin plugin = Plugin.CreateImplicitPlugin(typeof (T)); + processPlugins(new Plugin[]{plugin}); + plugin.AddToSource(_source); + + return plugin.CreateImplicitMemento(); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/InstanceManager.cs =================================================================== --- trunk/Source/StructureMap/InstanceManager.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/InstanceManager.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -1,7 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; -using NMock; +using StructureMap.Configuration.DSL; using StructureMap.Exceptions; using StructureMap.Graph; using StructureMap.Interceptors; @@ -14,7 +14,6 @@ public class InstanceManager : IInstanceManager, IEnumerable { private Dictionary<Type, IInstanceFactory> _factories; - private Dictionary<Type, InstanceFactory> _filledTypeFactories; private bool _failOnException = true; private GenericsPluginGraph _genericsGraph; private InstanceDefaultManager _defaultManager; @@ -25,7 +24,6 @@ public InstanceManager() { _factories = new Dictionary<Type, IInstanceFactory>(); - _filledTypeFactories = new Dictionary<Type, InstanceFactory>(); _genericsGraph = new GenericsPluginGraph(); } @@ -325,7 +323,12 @@ throw new StructureMapException(230); } - InstanceFactory factory = getFilledTypeFactory(type); + IInstanceFactory factory = getOrCreateFactory(type, delegate(Type t) + { + PluginFamily family = + PluginFamily.CreateAutoFilledPluginFamily(t); + return new InstanceFactory(family, true); + }); return factory.GetInstance(); } @@ -334,118 +337,27 @@ return (T) FillDependencies(typeof (T)); } - private InstanceFactory getFilledTypeFactory(Type type) + private delegate InstanceFactory CreateFactoryDelegate(Type type); + + private IInstanceFactory getOrCreateFactory(Type type, CreateFactoryDelegate createFactory) { - if (!_filledTypeFactories.ContainsKey(type)) + if (!_factories.ContainsKey(type)) { lock (this) { - if (!_filledTypeFactories.ContainsKey(type)) + if (!_factories.ContainsKey(type)) { - PluginFamily family = PluginFamily.CreateAutoFilledPluginFamily(type); - InstanceFactory factory = new InstanceFactory(family, true); + InstanceFactory factory = createFactory(type); factory.SetInstanceManager(this); - _filledTypeFactories.Add(type, factory); + _factories.Add(type, factory); } } } - return _filledTypeFactories[type]; + return _factories[type]; } - #region mocking - /// <summary> - /// When called, returns an NMock.IMock instance for the TargetType. Until UnMocked, calling - /// GetInstance(Type TargetType) will return the MockInstance member of the IMock - /// </summary> - /// <param name="TargetType"></param> - /// <returns></returns> - public IMock Mock(Type TargetType) - { - if (IsMocked(TargetType)) - { - string msg = string.Format("The Type {0} is already mocked", TargetType.AssemblyQualifiedName); - throw new InvalidOperationException(msg); - } - - IInstanceFactory factory = this[TargetType]; - MockInstanceFactory mockFactory = new MockInstanceFactory(factory); - IMock returnValue = mockFactory.GetMock(); - - lock (this) - { - this[TargetType] = mockFactory; - } - - return returnValue; - } - - /// <summary> - /// Is the specified TargetType currently setup as an IMock - /// </summary> - /// <param name="TargetType"></param> - /// <returns></returns> - public bool IsMocked(Type TargetType) - { - return isInstanceFamilyMocked(this[TargetType]); - } - - private static bool isInstanceFamilyMocked(IInstanceFactory instanceFactory) - { - bool returnValue = false; - - InstanceFactoryInterceptor interceptor = instanceFactory as InstanceFactoryInterceptor; - if (interceptor != null) - { - returnValue = interceptor.IsMockedOrStubbed; - } - - return returnValue; - } - - /// <summary> - /// Release the NMock behavior of TargetType - /// </summary> - /// <param name="TargetType"></param> - public void UnMock(Type TargetType) - { - if (IsMocked(TargetType)) - { - InstanceFactoryInterceptor instanceFactory = (InstanceFactoryInterceptor) this[TargetType]; - IInstanceFactory innerFactory = instanceFactory.InnerInstanceFactory; - lock (this) - { - this[TargetType] = innerFactory; - } - } - } - - /// <summary> - /// Calls UnMock() on all IInstanceFactory's - /// </summary> - public void UnMockAll() - { - ArrayList typeList = new ArrayList(); - lock (this) - { - foreach (IInstanceFactory factory in _factories.Values) - { - if (isInstanceFamilyMocked(factory)) - { - typeList.Add(factory.PluginType); - } - } - - - foreach (Type type in typeList) - { - UnMock(type); - } - } - } - - /// <summary> /// Sets up the InstanceManager to return the object in the "stub" argument anytime /// any instance of the PluginType is requested /// </summary> @@ -459,21 +371,15 @@ stub.GetType().FullName); } - IInstanceFactory innerFactory = this[pluginType]; - StubbedInstanceFactory stubbedFactory = new StubbedInstanceFactory(innerFactory, stub); - lock (this) - { - this[pluginType] = stubbedFactory; - } + LiteralMemento memento = new LiteralMemento(stub); + this[pluginType].SetDefault(memento); } - public void Inject<T>(T instance) + public void InjectStub<T>(T instance) { InjectStub(typeof (T), instance); } - #endregion - public IEnumerator GetEnumerator() { return _factories.Values.GetEnumerator(); @@ -503,5 +409,31 @@ Profile defaultProfile = _defaultManager.CalculateDefaults(machineName, profile); SetDefaults(defaultProfile); } + + public void AddInstance<T>(InstanceMemento memento) + { + IInstanceFactory factory = getOrCreateFactory(typeof (T), createFactory); + factory.AddInstance(memento); + } + + public void AddInstance<PLUGINTYPE, CONCRETETYPE>() + { + IInstanceFactory factory = getOrCreateFactory(typeof(PLUGINTYPE), createFactory); + InstanceMemento memento = factory.AddType<CONCRETETYPE>(); + factory.AddInstance(memento); + } + + private InstanceFactory createFactory(Type pluggedType) + { + PluginFamily family = new PluginFamily(pluggedType); + return new InstanceFactory(family, true); + } + + public void AddDefaultInstance<PLUGINTYPE, CONCRETETYPE>() + { + IInstanceFactory factory = getOrCreateFactory(typeof (PLUGINTYPE), createFactory); + InstanceMemento memento = factory.AddType<CONCRETETYPE>(); + factory.SetDefault(memento); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Interceptors/InstanceFactoryInterceptor.cs =================================================================== --- trunk/Source/StructureMap/Interceptors/InstanceFactoryInterceptor.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/Interceptors/InstanceFactoryInterceptor.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -15,10 +15,6 @@ private IInstanceFactory _innerInstanceFactory; - public InstanceFactoryInterceptor() - { - } - public virtual IInstanceFactory InnerInstanceFactory { get { return _innerInstanceFactory; } @@ -112,6 +108,16 @@ return InnerInstanceFactory.GetAllInstances(); } + public void AddInstance(InstanceMemento memento) + { + InnerInstanceFactory.AddInstance(memento); + } + + public InstanceMemento AddType<T>() + { + return InnerInstanceFactory.AddType<T>(); + } + /// <summary> /// Declares whether or not the interceptor creates a stubbed or mocked version of the PluginType /// </summary> Modified: trunk/Source/StructureMap/MemoryInstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/MemoryInstanceMemento.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/MemoryInstanceMemento.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -1,8 +1,16 @@ using System.Collections; using System.Collections.Specialized; +using StructureMap.Graph; namespace StructureMap { + public class GenericMemento<T> : MemoryInstanceMemento + { + public GenericMemento(string instanceKey) + : base(Plugin.CreateImplicitPlugin(typeof(T)).ConcreteKey, instanceKey) + {} + } + /// <summary> /// An in-memory implementation of InstanceMemento. /// </summary> @@ -59,6 +67,7 @@ { } + /// <summary> /// Constructs a MemoryInstanceMemento with properties /// </summary> Deleted: trunk/Source/StructureMap/MockInstanceFactory.cs =================================================================== --- trunk/Source/StructureMap/MockInstanceFactory.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/MockInstanceFactory.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -1,72 +0,0 @@ -using NMock; -using StructureMap.Interceptors; - -namespace StructureMap -{ - /// <summary> - /// Implementation of IInstanceFactory that uses NMock internally to create instances of the - /// PluginType - /// </summary> - public class MockInstanceFactory : InstanceFactoryInterceptor - { - private IMock _mockType; - - /// <summary> - /// Creates a MockInstanceFactory that wraps and intercepts calls to the innerFactory - /// </summary> - /// <param name="innerFactory"></param> - public MockInstanceFactory(IInstanceFactory innerFactory) - { - InnerInstanceFactory = innerFactory; - _mockType = new DynamicMock(innerFactory.PluginType); - } - - /// <summary> - /// Returns "new DyanamicProxy(this.PluginType) as IMock" - /// </summary> - /// <returns></returns> - public IMock GetMock() - { - return _mockType; - } - - /// <summary> - /// See <cref>IInstanceFactory</cref> - /// </summary> - /// <param name="InstanceKey"></param> - /// <returns></returns> - public override object GetInstance(string InstanceKey) - { - return _mockType.MockInstance; - } - - /// <summary> - /// See <cref>IInstanceFactory</cref> - /// </summary> - /// <param name="Memento"></param> - /// <returns></returns> - public override object GetInstance(InstanceMemento Memento) - { - return _mockType.MockInstance; - } - - /// <summary> - /// See <cref>IInstanceFactory</cref> - /// </summary> - /// <returns></returns> - public override object GetInstance() - { - return _mockType.MockInstance; - } - - public override bool IsMockedOrStubbed - { - get { return true; } - } - - public override object Clone() - { - return MemberwiseClone(); - } - } -} \ No newline at end of file Modified: trunk/Source/StructureMap/ObjectFactory.cs =================================================================== --- trunk/Source/StructureMap/ObjectFactory.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/ObjectFactory.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Security.Permissions; using System.Text; -using NMock; +using StructureMap.Configuration.DSL; using StructureMap.Graph; namespace StructureMap @@ -109,14 +109,9 @@ { lock (_lockObject) { - manager.UnMockAll(); Profile = string.Empty; } } - catch (StructureMapException) - { - throw; - } catch (TypeInitializationException ex) { if (ex.InnerException is StructureMapException) @@ -286,62 +281,99 @@ return (T) _manager.FillDependencies(typeof (T)); } - #region Mocking - /// <summary> - /// When called, returns an NMock.IMock instance for the TargetType. Until UnMocked, calling - /// GetInstance(Type TargetType) will return the MockInstance member of the IMock + /// Sets up StructureMap to return the object in the "stub" argument anytime + /// any instance of the PluginType is requested /// </summary> - /// <param name="TargetType"></param> - /// <returns></returns> - public static IMock Mock(Type TargetType) + /// <param name="pluginType"></param> + /// <param name="stub"></param> + public static void InjectStub(Type pluginType, object stub) { - return manager.Mock(TargetType); + manager.InjectStub(pluginType, stub); } /// <summary> - /// Sets up the internal InstanceManager to return the object in the "stub" argument anytime + /// Sets up StructureMap to return the object in the "stub" argument anytime /// any instance of the PluginType is requested /// </summary> /// <param name="targetType"></param> /// <param name="stub"></param> - public static void InjectStub(Type targetType, object stub) + public static void InjectStub<PLUGINTYPE>(PLUGINTYPE stub) { - manager.InjectStub(targetType, stub); + manager.InjectStub(typeof (PLUGINTYPE), stub); } + + public static string WhatDoIHave() + { + StringBuilder sb = new StringBuilder(); + + foreach (IInstanceFactory factory in manager) + { + sb.AppendFormat("PluginType {0}, Default: {1}\r\n", factory.PluginType.AssemblyQualifiedName, + factory.DefaultInstanceKey); + } + + return sb.ToString(); + } + /// <summary> - /// Is the specified TargetType currently setup as an IMock + /// Sets the default instance of PLUGINTYPE to the object in the instance argument /// </summary> - /// <param name="TargetType"></param> - /// <returns></returns> - public static bool IsMocked(Type TargetType) + /// <typeparam name="PLUGINTYPE"></typeparam> + /// <param name="instance"></param> + public static void Inject<PLUGINTYPE>(PLUGINTYPE instance) { - return manager.IsMocked(TargetType); + LiteralMemento memento = new LiteralMemento(instance); + manager.AddInstance<PLUGINTYPE>(memento); + manager.SetDefault(typeof (PLUGINTYPE), memento); } /// <summary> - /// Release the NMock behavior of TargetType + /// Injects a new instance of PLUGINTYPE by name. /// </summary> - /// <param name="TargetType"></param> - public static void UnMock(Type TargetType) + /// <typeparam name="PLUGINTYPE"></typeparam> + /// <param name="instance"></param> + /// <param name="instanceKey"></param> + public static void InjectByName<PLUGINTYPE>(PLUGINTYPE instance, string instanceKey) { - manager.UnMock(TargetType); + LiteralMemento memento = new LiteralMemento(instance).Named(instanceKey); + manager.AddInstance<PLUGINTYPE>(memento); } - #endregion + /// <summary> + /// Injects a new instance of CONCRETETYPE to PLUGINTYPE by name. + /// </summary> + /// <typeparam name="PLUGINTYPE"></typeparam> + /// <param name="instance"></param> + /// <param name="instanceKey"></param> + public static void InjectByName<PLUGINTYPE, CONCRETETYPE>(string instanceKey) + { + manager.AddInstance<PLUGINTYPE, CONCRETETYPE>(); + GenericMemento<CONCRETETYPE> memento = new GenericMemento<CONCRETETYPE>(instanceKey); + manager.AddInstance<PLUGINTYPE>(memento); + } - public static string WhatDoIHave() + /// <summary> + /// StructureMap will return an instance of CONCRETETYPE whenever + /// a PLUGINTYPE is requested + /// </summary> + /// <typeparam name="PLUGINTYPE"></typeparam> + /// <typeparam name="CONCRETETYPE"></typeparam> + public static void InjectDefaultType<PLUGINTYPE, CONCRETETYPE>() where CONCRETETYPE : PLUGINTYPE { - StringBuilder sb = new StringBuilder(); + manager.AddDefaultInstance<PLUGINTYPE, CONCRETETYPE>(); + } - foreach (IInstanceFactory factory in manager) - { - sb.AppendFormat("PluginType {0}, Default: {1}\r\n", factory.PluginType.AssemblyQualifiedName, - factory.DefaultInstanceKey); - } - - return sb.ToString(); + /// <summary> + /// Adds a new CONCRETETYPE to StructureMap so that an instance of CONCRETETYPE + /// will be returned from a call to ObjectFactory.GetAllInstances<PLUGINTYPE>() + /// </summary> + /// <typeparam name="PLUGINTYPE"></typeparam> + /// <typeparam name="CONCRETETYPE"></typeparam> + public static void AddType<PLUGINTYPE, CONCRETETYPE>() where CONCRETETYPE : PLUGINTYPE + { + manager.AddInstance<PLUGINTYPE, CONCRETETYPE>(); } } } \ No newline at end of file Modified: trunk/Source/StructureMap/StructureMap.csproj =================================================================== --- trunk/Source/StructureMap/StructureMap.csproj 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/StructureMap.csproj 2007-12-14 11:16:38 UTC (rev 49) @@ -96,10 +96,6 @@ <ErrorReport>prompt</ErrorReport> </PropertyGroup> <ItemGroup> - <Reference Include="nmock"> - <Name>nmock</Name> - <HintPath>..\..\bin\nmock.dll</HintPath> - </Reference> <Reference Include="System"> <Name>System</Name> </Reference> @@ -214,6 +210,7 @@ <SubType>Code</SubType> </Compile> <Compile Include="Configuration\DSL\ChildInstanceExpression.cs" /> + <Compile Include="Configuration\DSL\ConstructorExpression.cs" /> <Compile Include="Configuration\DSL\CreatePluginFamilyExpression.cs" /> <Compile Include="Configuration\DSL\ExpressionValidator.cs" /> <Compile Include="Configuration\DSL\IExpression.cs" /> @@ -335,6 +332,7 @@ <Compile Include="Configuration\XmlConstants.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="ConstructorMemento.cs" /> <Compile Include="DeploymentTasks\DeploymentConfiguration.cs"> <SubType>Code</SubType> </Compile> @@ -498,9 +496,6 @@ <Compile Include="MemoryInstanceMemento.cs"> <SubType>Code</SubType> </Compile> - <Compile Include="MockInstanceFactory.cs"> - <SubType>Code</SubType> - </Compile> <Compile Include="ObjectFactory.cs"> <SubType>Code</SubType> </Compile> @@ -556,9 +551,6 @@ <SubType>Code</SubType> </Compile> <Compile Include="StructureMapConfiguration.cs" /> - <Compile Include="StubbedInstanceFactory.cs"> - <SubType>Code</SubType> - </Compile> <Compile Include="Verification\IStartUp.cs" /> <Compile Include="Verification\PluginGraphConsoleWriter.cs"> <SubType>Code</SubType> Modified: trunk/Source/StructureMap/StructureMapException.resx =================================================================== --- trunk/Source/StructureMap/StructureMapException.resx 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/StructureMapException.resx 2007-12-14 11:16:38 UTC (rev 49) @@ -249,4 +249,7 @@ <data name="105" xml:space="preserve"> <value>The <{0}> section could not be loaded from the application configuration file.</value> </data> + <data name="306" xml:space="preserve"> + <value>The configured BuilderDelegate of type {0} does not match the PluginFamily type {1}</value> + </data> </root> \ No newline at end of file Deleted: trunk/Source/StructureMap/StubbedInstanceFactory.cs =================================================================== --- trunk/Source/StructureMap/StubbedInstanceFactory.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap/StubbedInstanceFactory.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -1,59 +0,0 @@ -using StructureMap.Interceptors; - -namespace StructureMap -{ - /// <summary> - /// Decorator that intercepts a call to create a PluginType and returns a - /// static mock or stub. Used when ObjectFactory.InjectStub(Type, object) is called. - /// </summary> - public class StubbedInstanceFactory : InstanceFactoryInterceptor - { - private readonly object _stub; - - public StubbedInstanceFactory(IInstanceFactory innerFactory, object stub) : base() - { - InnerInstanceFactory = innerFactory; - _stub = stub; - } - - /// <summary> - /// Creates an object instance for the InstanceKey - /// </summary> - /// <param name="InstanceKey">The named instance</param> - /// <returns></returns> - public override object GetInstance(string InstanceKey) - { - return _stub; - } - - /// <summary> - /// Creates an object instance directly from the Memento - /// </summary> - /// <param name="Memento">A representation of an object instance</param> - /// <returns></returns> - public override object GetInstance(InstanceMemento Memento) - { - return _stub; - } - - /// <summary> - /// Creates a new object instance of the default instance memento - /// </summary> - /// <returns></returns> - public override object GetInstance() - { - return _stub; - } - - - public override bool IsMockedOrStubbed - { - get { return true; } - } - - public override object Clone() - { - return MemberwiseClone(); - } - } -} \ No newline at end of file Added: trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ConstructorExpressionTester.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -0,0 +1,100 @@ +using NUnit.Framework; +using Rhino.Mocks; +using StructureMap.Configuration.DSL; +using StructureMap.Testing.Container; + +namespace StructureMap.Testing.Configuration.DSL +{ + [TestFixture] + public class ConstructorExpressionTester + { + [SetUp] + public void SetUp() + { + StructureMapConfiguration.ResetAll(); + ObjectFactory.Reset(); + } + + public interface Abstraction { } + + public class Concretion : Abstraction { } + + [Test] + public void ConstructSomething() + { + Concretion concretion = new Concretion(); + + Registry registry = new Registry(); + registry.ForRequestedType<Abstraction>().TheDefaultIs( + Registry.ConstructedBy<Abstraction>(delegate { return concretion; }) + ); + + IInstanceManager manager = registry.BuildInstanceManager(); + Assert.AreSame(concretion, manager.CreateInstance<Abstraction>()); + } + + [Test] + public void ConstructSomethingNotByDefault() + { + Concretion concretion = new Concretion(); + + Registry registry = new Registry(); + registry.ForRequestedType<Abstraction>().AddInstance( + Registry.ConstructedBy<Abstraction>(delegate { return concretion; }) + ); + + + IInstanceManager manager = registry.BuildInstanceManager(); + + Abstraction actual = manager.GetAllInstances<Abstraction>()[0]; + Assert.AreSame(concretion, actual); + + } + + [Test] + public void ConstructSomethingByName() + { + Concretion concretion1 = new Concretion(); + Concretion concretion2 = new Concretion(); + + Registry registry = new Registry(); + registry.ForRequestedType<Abstraction>().AddInstance( + Registry.ConstructedBy<Abstraction>(delegate { return concretion1; }).WithName("One") + ); + + registry.ForRequestedType<Abstraction>().AddInstance( + Registry.ConstructedBy<Abstraction>(delegate { return concretion2; }).WithName("Two") + ); + + IInstanceManager manager = registry.BuildInstanceManager(); + + Assert.AreSame(concretion1, manager.CreateInstance<Abstraction>("One")); + Assert.AreSame(concretion2, manager.CreateInstance<Abstraction>("Two")); + + } + + [Test] + public void AddTwoConstructorsConsecutively() + { + Concretion concretion1 = new Concretion(); + Concretion concretion2 = new Concretion(); + + Registry registry = new Registry(); + registry.ForRequestedType<Abstraction>() + .AddInstance( + Registry.ConstructedBy<Abstraction>(delegate { return concretion1; }).WithName("One") + ) + .AddInstance( + Registry.ConstructedBy<Abstraction>(delegate { return concretion2; }).WithName("Two") + ); + + IInstanceManager manager = registry.BuildInstanceManager(); + + Assert.AreSame(concretion1, manager.CreateInstance<Abstraction>("One")); + Assert.AreSame(concretion2, manager.CreateInstance<Abstraction>("Two")); + + } + } + + +} Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs 2007-07-27 13:43:55 UTC (rev 48) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -82,5 +82,6 @@ Assert.Contains("Brown", colors); Assert.Contains("Black", colors); } + } } \ No newline at end of file Added: trunk/Source/StructureMap.Testing/ConstructorMementoTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/ConstructorMementoTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/ConstructorMementoTester.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -0,0 +1,23 @@ +using NUnit.Framework; +using Rhino.Mocks; + +namespace StructureMap.Testing +{ + [TestFixture] + public class ConstructorMementoTester + { + [SetUp] + public void SetUp() + { + } + + [Test] + public void Construct() + { + ConstructorMemento<string> memento = new ConstructorMemento<string>("A", delegate { return "Hello"; }); + Assert.AreEqual("A", memento.InstanceKey); + string actual = (string) memento.Build(null); + Assert.AreEqual("Hello", actual); + } + } +} Added: trunk/Source/StructureMap.Testing/Container/DynamicInjectionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Container/DynamicInjectionTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Container/DynamicInjectionTester.cs 2007-12-14 11:16:38 UTC (rev 49) @@ -0,0 +1,239 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework; +using Rhino.Mocks; +using StructureMap.Configuration.DSL; +using StructureMap.Graph; +using StructureMap.Interceptors; +using StructureMap.Testing.Widget3; + +namespace StructureMap.Testing.Container +{ + [TestFixture] + public class DynamicInjectionTester + { + private IService _red = new ColorService("Red"); + private IService _blue = new ColorService("Blue"); + private IService _orange = new ColorService("Orange"); + + [SetUp] + public void SetUp() + { + ObjectFactory.ReInitialize(); + StructureMapConfiguration.ResetAll(); + } + + [Test] + public void CanAddMementosDirectlyToAnInstanceFactory() + { + InstanceFactory factory = ObjectMother.Factory<IService>(); + + factory.AddInstance(new LiteralMemento(_red).Named("Red")); + factory.AddInstance(new LiteralMemento(_blue).Named("Blue")); + + Assert.AreSame(_red, factory.GetInstance("Red")); + Assert.AreSame(_blue, factory.GetInstance("Blue")); + } + + [Test] + public void NowOverwriteAPreviouslyAttachedMemento() + { + InstanceFactory factory = ObjectMother.Factory<IService>(); + + factory.AddInstance(new LiteralMemento(_red).Named("Red")); + factory.AddInstance(new LiteralMemento(_blue).Named("Blue")); + + // Replace Blue + factory.AddInstance(new LiteralMemento(_orange).Named("Blue")); + + Assert.AreSame(_orange, factory.GetInstance("Blue")); + } + + [Test] + public void AddInstanceWithInstanceFactoryInterceptor() + { + InstanceFactoryInterceptor interceptor = new FakeInstanceFactoryInterceptor(); + + InstanceFactory factory = ObjectMother.Factory<IService>(); + interceptor.InnerInstanceFactory = factory; + + interceptor.AddInstance(new LiteralMemento(_red).Named("Red")); + interceptor.AddInstance(new LiteralMemento(_blue).Named("Blue")); + + Assert.AreSame(_red, interceptor.GetInstance("Red")); + Assert.AreSame(_blue, interceptor.GetInstance("Blue")); + } + + [Test] + public void AddInstanceToInstanceManagerWhenTheInstanceFactoryDoesNotExist() + { + InstanceManager manager = new InstanceManager(); + manager.AddInstance<IService>(new LiteralMemento(_red).Named("Red")); + manager.AddInstance<IService>(new LiteralMemento(_blue).Named("Blue")); + + Assert.AreSame(_red, manager.CreateInstance(typeof(IService), "Red")); + Assert.AreSame(_blue, manager.CreateInstance(typeof(IService), "Blue")); + + } + + [Test] + public void AddInstanceFromObjectFactory() + { + SomethingOne one = new SomethingOne(); + ObjectFactory.Inject<ISomething>(one); + + Assert.AreSame(one, ObjectFactory.GetInstance<ISomething>()); + } + + [Test] + public void OverwriteInstanceFromObjectFactory() + { + SomethingOne one = new SomethingOne(); + SomethingOne two = new SomethingOne(); + ObjectFactory.Inject<ISomething>(one); + ObjectFactory.Inject<ISomething>(two); + + Assert.AreSame(two, ObjectFactory.GetInstance<ISomething>()); + } + + [Test] + public void AddNamedInstanceToobjectFactory() + { + SomethingOne one = new SomethingOne(); + SomethingOne two = new SomethingOne(); + + ObjectFactory.InjectByName<ISomething>(one, "One"); + ObjectFactory.InjectByName<ISomething>(two, "Two"); + + + Assert.AreSame(one, ObjectFactory.GetNamedInstance<ISomething>("One")); + Assert.AreSame(two, ObjectFactory.GetNamedInstance<ISomething>("Two")); + } + + [Test] + public void AddNamedInstanceByType() + { + ObjectFactory.InjectByName<ISomething, SomethingOne>("One"); + ObjectFactory.InjectByName<ISomething, SomethingTwo>("Two"); + + Assert.IsInstanceOfType(typeof(SomethingOne), ObjectFactory.GetNamedInstance<ISomething>("One")); + Assert.IsInstanceOfType(typeof(SomethingTwo), ObjectFactory.GetNamedInstance<ISomething>("Two")); + } + + [Test] + public void OverwriteInstanceAndDontBlowUp() + { + ObjectFactory.InjectByName<ISomething, SomethingOne>("One"); + ObjectFactory.InjectByName<ISomething, SomethingTwo>("One"); + + Assert.IsInstanceOfType(typeof(SomethingTwo), ObjectFactory.GetNamedInstance<ISomething>("One")); + } + + [Test] + public void JustAddATypeWithNoNameAndDefault() + { + ObjectFactory.InjectDefaultType<ISomething, SomethingOne>(); + Assert.IsInstanceOfType(typeof(SomethingOne), ObjectFactory.GetInstance<ISomething>()); + } + + [Test] +... [truncated message content] |
From: <der...@us...> - 2007-07-27 13:44:01
|
Revision: 48 http://structuremap.svn.sourceforge.net/structuremap/?rev=48&view=rev Author: derrickrapp Date: 2007-07-27 06:43:55 -0700 (Fri, 27 Jul 2007) Log Message: ----------- Added support for specific implementations of generic interfaces. Such as MyIntObject : MyInterface<int> Modified Paths: -------------- trunk/Source/CommonAssemblyInfo.cs trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs trunk/Source/StructureMap/Graph/Plugin.cs trunk/Source/StructureMap/Graph/PluginFamily.cs trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs trunk/Source/StructureMap.Testing.GenericWidgets/Widgets.cs Modified: trunk/Source/CommonAssemblyInfo.cs =================================================================== --- trunk/Source/CommonAssemblyInfo.cs 2007-05-02 01:32:00 UTC (rev 47) +++ trunk/Source/CommonAssemblyInfo.cs 2007-07-27 13:43:55 UTC (rev 48) @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. -// Runtime Version:2.0.50727.42 +// Runtime Version:2.0.50727.832 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. Modified: trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs =================================================================== --- trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2007-05-02 01:32:00 UTC (rev 47) +++ trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2007-07-27 13:43:55 UTC (rev 48) @@ -7,11 +7,11 @@ { public static bool CanBeCast(Type pluginType, Type pluggedType) { - bool isGenericComparison = pluginType.IsGenericType && pluggedType.IsGenericType; - if (!isGenericComparison) - { - return false; - } + //bool isGenericComparison = pluginType.IsGenericType && pluggedType.IsGenericType; + //if (!isGenericComparison) + //{ + // return false; + //} try { Modified: trunk/Source/StructureMap/Graph/Plugin.cs =================================================================== --- trunk/Source/StructureMap/Graph/Plugin.cs 2007-05-02 01:32:00 UTC (rev 47) +++ trunk/Source/StructureMap/Graph/Plugin.cs 2007-07-27 13:43:55 UTC (rev 48) @@ -190,7 +190,15 @@ public Plugin CreateTemplatedClone(params Type[] types) { - Type templatedType = _pluggedType.MakeGenericType(types); + Type templatedType; + if (_pluggedType.IsGenericType) + { + templatedType = _pluggedType.MakeGenericType(types); + } + else + { + templatedType = _pluggedType; + } Plugin templatedPlugin = new Plugin(templatedType, _concreteKey, _definitionSource); templatedPlugin._setters = _setters; Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-05-02 01:32:00 UTC (rev 47) +++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-07-27 13:43:55 UTC (rev 48) @@ -1,4 +1,5 @@ using System; +using System.Reflection; using StructureMap.Interceptors; using StructureMap.Source; @@ -118,7 +119,7 @@ Type templatedType = _pluginType.MakeGenericType(templateTypes); PluginFamily templatedFamily = new PluginFamily(templatedType); templatedFamily._defaultKey = _defaultKey; - templatedFamily._source = _source; + templatedFamily._source = new MemoryMementoSource(); templatedFamily._definitionSource = _definitionSource; foreach (InstanceFactoryInterceptor interceptor in _interceptionChain) @@ -129,13 +130,50 @@ foreach (Plugin plugin in _plugins) { - Plugin templatedPlugin = plugin.CreateTemplatedClone(templateTypes); - templatedFamily.Plugins.Add(templatedPlugin); + if (IsOfCorrectGenericType(plugin, templateTypes)) + { + Plugin templatedPlugin = plugin.CreateTemplatedClone(templateTypes); + templatedFamily.Plugins.Add(templatedPlugin); + foreach (InstanceMemento memento in _source.GetAllMementos()) + { + if (memento.ConcreteKey == plugin.ConcreteKey) + { + templatedFamily._source.AddExternalMemento(memento); + } + } + } } return templatedFamily; } + private bool IsOfCorrectGenericType(Plugin plugin, params Type[] templateTypes) + { + bool isValid = true; + + Type interfaceType = plugin.PluggedType.GetInterface(_pluginType.Name); + if (interfaceType == null) + { + interfaceType = plugin.PluggedType.BaseType; + } + Type[] pluginArgs = _pluginType.GetGenericArguments(); + Type[] pluggableArgs = interfaceType.GetGenericArguments(); + + if (templateTypes.Length != pluginArgs.Length && + pluginArgs.Length != pluggableArgs.Length) + { + return false; + } + + for (int i = 0; i < templateTypes.Length; i++) + { + isValid &= templateTypes[i] == pluggableArgs[i] || + pluginArgs[i].IsGenericParameter && + pluggableArgs[i].IsGenericParameter; + } + return isValid; + } + #region properties /// <summary> Modified: trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs 2007-05-02 01:32:00 UTC (rev 47) +++ trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs 2007-07-27 13:43:55 UTC (rev 48) @@ -1,3 +1,5 @@ +using System.Collections; +using System.Collections.Generic; using NUnit.Framework; using StructureMap.Graph; using StructureMap.Testing.GenericWidgets; @@ -86,5 +88,28 @@ Assert.AreNotSame(object1, object4); } + + [Test] + public void AllTypesWithSpecificImplementation() + { + IList objectConcepts = manager.GetAllInstances(typeof(IConcept<object>)); + + Assert.IsNotNull(objectConcepts); + Assert.AreEqual(2, objectConcepts.Count); + + IList stringConcepts = manager.GetAllInstances(typeof(IConcept<string>)); + + Assert.IsNotNull(stringConcepts); + Assert.AreEqual(1, stringConcepts.Count); + } + + [Test] + public void SpecificImplementation() + { + IConcept<object> concept = (IConcept<object>)manager.CreateInstance(typeof(IConcept<object>), "Specific"); + + Assert.IsNotNull(concept); + Assert.IsInstanceOfType(typeof(SpecificConcept), concept); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap.Testing.GenericWidgets/Widgets.cs =================================================================== --- trunk/Source/StructureMap.Testing.GenericWidgets/Widgets.cs 2007-05-02 01:32:00 UTC (rev 47) +++ trunk/Source/StructureMap.Testing.GenericWidgets/Widgets.cs 2007-07-27 13:43:55 UTC (rev 48) @@ -57,6 +57,21 @@ } } + [PluginFamily("Default")] + public interface IConcept<T> + { + } + + [Pluggable("Default")] + public class GenericConcept<T> : IConcept<T> + { + } + + [Pluggable("Specific")] + public class SpecificConcept : IConcept<object> + { + } + public interface IThing<T, U> { } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fli...@us...> - 2007-05-02 01:32:02
|
Revision: 47 http://structuremap.svn.sourceforge.net/structuremap/?rev=47&view=rev Author: flimflan Date: 2007-05-01 18:32:00 -0700 (Tue, 01 May 2007) Log Message: ----------- The configuration section handler no longer attempts to merge the configuration hiearchy when loading from app.config. It instead returns the configuration from all levels of the hierarchy, and leaves it up to the configuration parsers to do the merging. The full power of this will be realized when the configuration parsers allow you to override settings for plugins that have already been configured. Modified Paths: -------------- trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs Modified: trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs =================================================================== --- trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs 2007-05-01 02:31:55 UTC (rev 46) +++ trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs 2007-05-02 01:32:00 UTC (rev 47) @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Configuration; using System.Xml; @@ -7,25 +8,23 @@ { public object Create(object parent, object configContext, XmlNode section) { - XmlNode parentNode = parent as XmlNode; - if (parentNode == null) return section; - // Might need to make this more intelligent, to merge nodes that override eachother - foreach (XmlNode childNode in section.ChildNodes) + IList<XmlNode> allNodes = parent as IList<XmlNode>; + if (allNodes == null) { - XmlNode importedNode = parentNode.OwnerDocument.ImportNode(childNode, true); - parentNode.AppendChild(importedNode); + allNodes = new List<XmlNode>(); } - return parentNode; + allNodes.Add(section); + return allNodes; } - public static XmlNode GetStructureMapConfiguration() + public static IList<XmlNode> GetStructureMapConfiguration() { - XmlNode node = ConfigurationSettings.GetConfig(XmlConstants.STRUCTUREMAP) as XmlNode; - if (node == null) + IList<XmlNode> nodes = ConfigurationSettings.GetConfig(XmlConstants.STRUCTUREMAP) as IList<XmlNode>; + if (nodes == null) { throw new StructureMapException(105, XmlConstants.STRUCTUREMAP); } - return node; + return nodes; } } } \ No newline at end of file Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-05-01 02:31:55 UTC (rev 46) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-05-02 01:32:00 UTC (rev 47) @@ -80,8 +80,12 @@ { if (_pullConfigurationFromAppConfig) { - _collection.IncludeNode( - delegate() { return StructureMapConfigurationSection.GetStructureMapConfiguration(); }); + IList<XmlNode> appConfigNodes = StructureMapConfigurationSection.GetStructureMapConfiguration(); + foreach(XmlNode appConfigNode in appConfigNodes) + { + _collection.IncludeNode( + delegate() { return appConfigNode; }); + } } ConfigurationParser[] parsers = _collection.GetParsers(); Modified: trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-05-01 02:31:55 UTC (rev 46) +++ trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-05-02 01:32:00 UTC (rev 47) @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Xml; using NUnit.Framework; @@ -90,20 +91,22 @@ } [Test] - public void AppConfigShouldIncludeSettingsFromParentConfig() + public void SettingsFromAllParentConfigFilesShouldBeIncluded() { StructureMapConfigurationSection configurationSection = new StructureMapConfigurationSection(); XmlNode fromMachineConfig = createNodeFromText(@"<StructureMap><Assembly Name=""SomeAssembly""/></StructureMap>"); XmlNode fromWebConfig = createNodeFromText(@"<StructureMap><Assembly Name=""AnotherAssembly""/></StructureMap>"); - XmlNode effectiveConfig = configurationSection.Create(fromMachineConfig, null, fromWebConfig) as XmlNode; + IList<XmlNode> parentNodes = new List<XmlNode>(); + parentNodes.Add(fromMachineConfig); - Assert.IsNotNull(effectiveConfig, "A configuration node should have been returned."); - Assert.AreEqual(2, effectiveConfig.ChildNodes.Count, "Both Assembly entries should have been returned."); - Assert.IsTrue(hasAttributeValue("Name", "SomeAssembly", effectiveConfig.ChildNodes[0]), "The parent Assembly entry should have been returned first."); - Assert.IsTrue(hasAttributeValue("Name", "AnotherAssembly", effectiveConfig.ChildNodes[1]), "The child Assembly entry should have been returned second."); + IList<XmlNode> effectiveConfig = configurationSection.Create(parentNodes, null, fromWebConfig) as IList<XmlNode>; + Assert.IsNotNull(effectiveConfig, "A list of configuration nodes should have been returned."); + Assert.AreEqual(2, effectiveConfig.Count, "Both configurations should have been returned."); + Assert.AreEqual(fromMachineConfig, effectiveConfig[0]); + Assert.AreEqual(fromWebConfig, effectiveConfig[1]); } private static XmlNode createNodeFromText(string outerXml) @@ -112,13 +115,6 @@ document.LoadXml(outerXml); return document.DocumentElement; } - - private static bool hasAttributeValue(string attributeName, string attributeValue, XmlNode node) - { - XmlAttribute namedAttribute = node.Attributes[attributeName]; - if (namedAttribute == null) return false; - return namedAttribute.Value == attributeValue; - } } public interface ISomething This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fli...@us...> - 2007-05-01 02:31:57
|
Revision: 46 http://structuremap.svn.sourceforge.net/structuremap/?rev=46&view=rev Author: flimflan Date: 2007-04-30 19:31:55 -0700 (Mon, 30 Apr 2007) Log Message: ----------- Tagging 1.1 release Added Paths: ----------- tags/Release_1.1/ Copied: tags/Release_1.1 (from rev 2, trunk) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fli...@us...> - 2007-05-01 02:29:18
|
Revision: 45 http://structuremap.svn.sourceforge.net/structuremap/?rev=45&view=rev Author: flimflan Date: 2007-04-30 19:29:17 -0700 (Mon, 30 Apr 2007) Log Message: ----------- Tagging 2.0 release Added Paths: ----------- tags/Release_2.0/ Copied: tags/Release_2.0 (from rev 42, trunk) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fli...@us...> - 2007-05-01 02:17:26
|
Revision: 44 http://structuremap.svn.sourceforge.net/structuremap/?rev=44&view=rev Author: flimflan Date: 2007-04-30 19:17:17 -0700 (Mon, 30 Apr 2007) Log Message: ----------- Implemented PullConfigurationFromAppConfig. Created ObjectFactory.ReInitialize() to allow more isolated unit tests. Modified Paths: -------------- trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs trunk/Source/StructureMap/ObjectFactory.cs trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap/StructureMapException.resx trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs trunk/cruise.build Property Changed: ---------------- trunk/Source/ trunk/Source/StructureMap.DataAccess/ trunk/Source/StructureMap.Testing.GenericWidgets/ Property changes on: trunk/Source ___________________________________________________________________ Name: svn:ignore - *.suo + *.suo _ReSharper.StructureMap PrecompiledWeb *.resharper *.user Modified: trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs =================================================================== --- trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs 2007-04-27 21:54:32 UTC (rev 43) +++ trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs 2007-05-01 02:17:17 UTC (rev 44) @@ -5,28 +5,27 @@ { public class StructureMapConfigurationSection : IConfigurationSectionHandler { - private XmlNode _node; - public object Create(object parent, object configContext, XmlNode section) { - return _node; + XmlNode parentNode = parent as XmlNode; + if (parentNode == null) return section; + // Might need to make this more intelligent, to merge nodes that override eachother + foreach (XmlNode childNode in section.ChildNodes) + { + XmlNode importedNode = parentNode.OwnerDocument.ImportNode(childNode, true); + parentNode.AppendChild(importedNode); + } + return parentNode; } public static XmlNode GetStructureMapConfiguration() { - object config = ConfigurationManager.GetSection(XmlConstants.STRUCTUREMAP); - - - return null; - /* - object o = ConfigurationSettings.GetConfig(XmlConstants.STRUCTUREMAP); - XmlNode node = o as XmlNode; + XmlNode node = ConfigurationSettings.GetConfig(XmlConstants.STRUCTUREMAP) as XmlNode; if (node == null) { - throw new ApplicationException("No <StructureMap> section was found in the application config file"); + throw new StructureMapException(105, XmlConstants.STRUCTUREMAP); } return node; - */ } } } \ No newline at end of file Modified: trunk/Source/StructureMap/ObjectFactory.cs =================================================================== --- trunk/Source/StructureMap/ObjectFactory.cs 2007-04-27 21:54:32 UTC (rev 43) +++ trunk/Source/StructureMap/ObjectFactory.cs 2007-05-01 02:17:17 UTC (rev 44) @@ -27,6 +27,16 @@ ObjectFactoryCacheCallback callback = new ObjectFactoryCacheCallback(); } + /// <summary> + /// Used for testing only (kills singletons). In non-test scenarios, use Reset() instead. + /// </summary> + public static void ReInitialize() + { + _profile = string.Empty; + _notify = null; + _manager = null; + } + #region InstanceManager and setting defaults private static InstanceManager manager Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-04-27 21:54:32 UTC (rev 43) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-05-01 02:17:17 UTC (rev 44) @@ -12,9 +12,9 @@ public static class StructureMapConfiguration { private const string CONFIG_FILE_NAME = "StructureMap.config"; - private static ConfigurationParserCollection _collection = new ConfigurationParserCollection(); - private static Registry _registry = new Registry(); - private static List<Registry> _registries = new List<Registry>(); + private static ConfigurationParserCollection _collection; + private static Registry _registry; + private static List<Registry> _registries; private static StartUp _startUp; private static bool _pullConfigurationFromAppConfig; @@ -58,6 +58,7 @@ _registries = new List<Registry>(); _registries.Add(_registry); _startUp = null; + _pullConfigurationFromAppConfig = false; } /// <summary> @@ -138,15 +139,10 @@ set { _collection.UseDefaultFile = value; } } - [Obsolete("Not ready yet")] public static bool PullConfigurationFromAppConfig { get { return _pullConfigurationFromAppConfig; } - set - { - throw new NotImplementedException("This feature has not been completed"); - _pullConfigurationFromAppConfig = value; - } + set { _pullConfigurationFromAppConfig = value; } } /// <summary> Modified: trunk/Source/StructureMap/StructureMapException.resx =================================================================== --- trunk/Source/StructureMap/StructureMapException.resx 2007-04-27 21:54:32 UTC (rev 43) +++ trunk/Source/StructureMap/StructureMapException.resx 2007-05-01 02:17:17 UTC (rev 44) @@ -246,4 +246,7 @@ <data name="305" xml:space="preserve"> <value>There is no constructor property found of type {0}</value> </data> + <data name="105" xml:space="preserve"> + <value>The <{0}> section could not be loaded from the application configuration file.</value> + </data> </root> \ No newline at end of file Property changes on: trunk/Source/StructureMap.DataAccess ___________________________________________________________________ Name: svn:ignore + bin obj Modified: trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs 2007-04-27 21:54:32 UTC (rev 43) +++ trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs 2007-05-01 02:17:17 UTC (rev 44) @@ -12,6 +12,7 @@ [SetUp] public void SetUp() { + ObjectFactory.ReInitialize(); StructureMapConfiguration.ResetAll(); DataMother.WriteDocument("Config1.xml"); DataMother.WriteDocument("Config2.xml"); Modified: trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-04-27 21:54:32 UTC (rev 43) +++ trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-05-01 02:17:17 UTC (rev 44) @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Xml; using NUnit.Framework; using StructureMap.Configuration; using StructureMap.Graph; @@ -13,6 +14,7 @@ [SetUp] public void SetUp() { + ObjectFactory.ReInitialize(); StructureMapConfiguration.ResetAll(); } @@ -31,8 +33,7 @@ } [Test, - ExpectedException(typeof (ApplicationException), - "StructureMap detected configuration or environmental problems. Check the StructureMap error file")] + ExpectedException(typeof(ApplicationException), ExpectedMessage = "StructureMap detected configuration or environmental problems. Check the StructureMap error file")] public void OnStartUpFail() { StructureMapConfiguration.OnStartUp().FailOnException(); @@ -77,7 +78,7 @@ } - [Test, Ignore("Not complete")] + [Test] public void PullConfigurationFromTheAppConfig() { StructureMapConfiguration.UseDefaultStructureMapConfigFile = false; @@ -87,6 +88,37 @@ (ColorThing<string, bool>) ObjectFactory.GetInstance<IThing<string, bool>>(); Assert.AreEqual("Cornflower", thing.Color, "Cornflower is the color from the App.config file"); } + + [Test] + public void AppConfigShouldIncludeSettingsFromParentConfig() + { + StructureMapConfigurationSection configurationSection = new StructureMapConfigurationSection(); + + XmlNode fromMachineConfig = createNodeFromText(@"<StructureMap><Assembly Name=""SomeAssembly""/></StructureMap>"); + XmlNode fromWebConfig = createNodeFromText(@"<StructureMap><Assembly Name=""AnotherAssembly""/></StructureMap>"); + + XmlNode effectiveConfig = configurationSection.Create(fromMachineConfig, null, fromWebConfig) as XmlNode; + + Assert.IsNotNull(effectiveConfig, "A configuration node should have been returned."); + Assert.AreEqual(2, effectiveConfig.ChildNodes.Count, "Both Assembly entries should have been returned."); + Assert.IsTrue(hasAttributeValue("Name", "SomeAssembly", effectiveConfig.ChildNodes[0]), "The parent Assembly entry should have been returned first."); + Assert.IsTrue(hasAttributeValue("Name", "AnotherAssembly", effectiveConfig.ChildNodes[1]), "The child Assembly entry should have been returned second."); + + } + + private static XmlNode createNodeFromText(string outerXml) + { + XmlDocument document = new XmlDocument(); + document.LoadXml(outerXml); + return document.DocumentElement; + } + + private static bool hasAttributeValue(string attributeName, string attributeValue, XmlNode node) + { + XmlAttribute namedAttribute = node.Attributes[attributeName]; + if (namedAttribute == null) return false; + return namedAttribute.Value == attributeValue; + } } public interface ISomething @@ -100,4 +132,6 @@ throw new ApplicationException("You can't make me!"); } } + + } \ No newline at end of file Property changes on: trunk/Source/StructureMap.Testing.GenericWidgets ___________________________________________________________________ Name: svn:ignore + obj Modified: trunk/cruise.build =================================================================== --- trunk/cruise.build 2007-04-27 21:54:32 UTC (rev 43) +++ trunk/cruise.build 2007-05-01 02:17:17 UTC (rev 44) @@ -71,7 +71,7 @@ <include name="**\bin\${project.config}\*.exe" /> <include name="**\bin\${project.config}\*.xml" /> <include name="**\bin\${project.config}\*.xml.actual" /> - <include name="StructureMap.Testing\StructureMap.config" /> + <include name="StructureMap.Testing\*.config" /> </fileset> </copy> <copy todir="${build.dir}\..\" flatten="true" overwrite="true"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fli...@us...> - 2007-04-27 21:54:34
|
Revision: 43 http://structuremap.svn.sourceforge.net/structuremap/?rev=43&view=rev Author: flimflan Date: 2007-04-27 14:54:32 -0700 (Fri, 27 Apr 2007) Log Message: ----------- Adding missing NUnit binary which was causing the build to fail. Added Paths: ----------- trunk/bin/NUnit/nunit.core.interfaces.dll Added: trunk/bin/NUnit/nunit.core.interfaces.dll =================================================================== (Binary files differ) Property changes on: trunk/bin/NUnit/nunit.core.interfaces.dll ___________________________________________________________________ Name: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2007-04-02 00:26:54
|
Revision: 42 http://structuremap.svn.sourceforge.net/structuremap/?rev=42&view=rev Author: jeremydmiller Date: 2007-04-01 17:26:27 -0700 (Sun, 01 Apr 2007) Log Message: ----------- tweaking post build steps Modified Paths: -------------- trunk/Source/StructureMap.Testing.DeploymentTasks/StructureMap.Testing.DeploymentTasks.csproj Modified: trunk/Source/StructureMap.Testing.DeploymentTasks/StructureMap.Testing.DeploymentTasks.csproj =================================================================== --- trunk/Source/StructureMap.Testing.DeploymentTasks/StructureMap.Testing.DeploymentTasks.csproj 2007-04-02 00:22:51 UTC (rev 41) +++ trunk/Source/StructureMap.Testing.DeploymentTasks/StructureMap.Testing.DeploymentTasks.csproj 2007-04-02 00:26:27 UTC (rev 42) @@ -196,6 +196,6 @@ <PropertyGroup> <PreBuildEvent> </PreBuildEvent> - <PostBuildEvent>copy $(ProjectDir)*.xml $(TargetDir)</PostBuildEvent> + <PostBuildEvent>copy "$(ProjectDir)*.xml" "$(TargetDir)"</PostBuildEvent> </PropertyGroup> </Project> \ 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...> - 2007-04-02 00:22:54
|
Revision: 41 http://structuremap.svn.sourceforge.net/structuremap/?rev=41&view=rev Author: jeremydmiller Date: 2007-04-01 17:22:51 -0700 (Sun, 01 Apr 2007) Log Message: ----------- changing the post build steps Modified Paths: -------------- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-04-02 00:18:01 UTC (rev 40) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-04-02 00:22:51 UTC (rev 41) @@ -432,7 +432,9 @@ <Compile Include="XmlWriting\ElementChecker.cs"> <SubType>Code</SubType> </Compile> - <None Include="StructureMap.config" /> + <None Include="StructureMap.config"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </None> <None Include="StructureMap.Testing.dll.config"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> @@ -497,7 +499,7 @@ <PropertyGroup> <PreBuildEvent> </PreBuildEvent> - <PostBuildEvent>copy $(ProjectDir)\*.config $(TargetDir) -</PostBuildEvent> + <PostBuildEvent> + </PostBuildEvent> </PropertyGroup> </Project> \ 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...> - 2007-04-02 00:18:03
|
Revision: 40 http://structuremap.svn.sourceforge.net/structuremap/?rev=40&view=rev Author: jeremydmiller Date: 2007-04-01 17:18:01 -0700 (Sun, 01 Apr 2007) Log Message: ----------- removing the post build step Modified Paths: -------------- trunk/Source/StructureMap.Diagnostics/StructureMap.Diagnostics.csproj Modified: trunk/Source/StructureMap.Diagnostics/StructureMap.Diagnostics.csproj =================================================================== --- trunk/Source/StructureMap.Diagnostics/StructureMap.Diagnostics.csproj 2007-04-01 23:43:38 UTC (rev 39) +++ trunk/Source/StructureMap.Diagnostics/StructureMap.Diagnostics.csproj 2007-04-02 00:18:01 UTC (rev 40) @@ -102,7 +102,7 @@ <PropertyGroup> <PreBuildEvent> </PreBuildEvent> - <PostBuildEvent>copy $(SolutionDir)StructureMap.Testing\TestData\ObjectMother.config $(TargetDir) -</PostBuildEvent> + <PostBuildEvent> + </PostBuildEvent> </PropertyGroup> </Project> \ 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...> - 2007-04-01 23:43:40
|
Revision: 39 http://structuremap.svn.sourceforge.net/structuremap/?rev=39&view=rev Author: jeremydmiller Date: 2007-04-01 16:43:38 -0700 (Sun, 01 Apr 2007) Log Message: ----------- eliminating an old, old build event Modified Paths: -------------- trunk/Source/StructureMap.Diagnostics/StructureMap.Diagnostics.csproj Modified: trunk/Source/StructureMap.Diagnostics/StructureMap.Diagnostics.csproj =================================================================== --- trunk/Source/StructureMap.Diagnostics/StructureMap.Diagnostics.csproj 2007-04-01 23:14:43 UTC (rev 38) +++ trunk/Source/StructureMap.Diagnostics/StructureMap.Diagnostics.csproj 2007-04-01 23:43:38 UTC (rev 39) @@ -103,6 +103,6 @@ <PreBuildEvent> </PreBuildEvent> <PostBuildEvent>copy $(SolutionDir)StructureMap.Testing\TestData\ObjectMother.config $(TargetDir) -rem copy $(TargetDir)StructureMap.* C:\work\ShareDoc\build\net-1.1.win32\DeSade-2.1.0-debug\bin</PostBuildEvent> +</PostBuildEvent> </PropertyGroup> </Project> \ 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...> - 2007-04-01 23:14:44
|
Revision: 38 http://structuremap.svn.sourceforge.net/structuremap/?rev=38&view=rev Author: jeremydmiller Date: 2007-04-01 16:14:43 -0700 (Sun, 01 Apr 2007) Log Message: ----------- testing the UserControl option, uploading binaries Modified Paths: -------------- trunk/Source/StructureMap.sln trunk/StructureMap.config trunk/bin/NUnit/NUnitTests.config trunk/bin/NUnit/NUnitTests.nunit trunk/bin/NUnit/TestResult.xml trunk/bin/NUnit/mock-assembly.dll trunk/bin/NUnit/nonamespace-assembly.dll trunk/bin/NUnit/notestfixtures-assembly.dll trunk/bin/NUnit/nunit-console-runner.dll trunk/bin/NUnit/nunit-console.exe trunk/bin/NUnit/nunit-console.exe.config trunk/bin/NUnit/nunit-console.tests.dll trunk/bin/NUnit/nunit-gui-runner.dll trunk/bin/NUnit/nunit-gui.exe trunk/bin/NUnit/nunit-gui.tests.dll trunk/bin/NUnit/nunit.core.dll trunk/bin/NUnit/nunit.core.extensions.dll trunk/bin/NUnit/nunit.extensions.tests.dll trunk/bin/NUnit/nunit.framework.dll trunk/bin/NUnit/nunit.framework.tests.dll trunk/bin/NUnit/nunit.framework.xml trunk/bin/NUnit/nunit.mocks.dll trunk/bin/NUnit/nunit.mocks.tests.dll trunk/bin/NUnit/nunit.uikit.dll trunk/bin/NUnit/nunit.uikit.tests.dll trunk/bin/NUnit/nunit.util.dll trunk/bin/NUnit/nunit.util.tests.dll trunk/bin/NUnit/test-utilities.dll trunk/bin/NUnit/timing-tests.dll Modified: trunk/Source/StructureMap.sln =================================================================== --- trunk/Source/StructureMap.sln 2007-04-01 22:59:15 UTC (rev 37) +++ trunk/Source/StructureMap.sln 2007-04-01 23:14:43 UTC (rev 38) @@ -54,108 +54,276 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GUI", "GUI", "{4F638ECF-2A69-4D6A-9B68-05CC40951217}" EndProject +Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "D:\StructureMap\StructureMapTest\", "..\StructureMapTest\", "{6C0DF673-322F-4AB9-A020-924661EF0CAB}" + ProjectSection(WebsiteProperties) = preProject + ProjectReferences = "{3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}|StructureMap.dll;" + Debug.AspNetCompiler.VirtualPath = "/StructureMapTest" + Debug.AspNetCompiler.PhysicalPath = "..\StructureMapTest\" + Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\StructureMapTest\" + Debug.AspNetCompiler.Updateable = "true" + Debug.AspNetCompiler.ForceOverwrite = "true" + Debug.AspNetCompiler.FixedNames = "false" + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.VirtualPath = "/StructureMapTest" + Release.AspNetCompiler.PhysicalPath = "..\StructureMapTest\" + Release.AspNetCompiler.TargetPath = "PrecompiledWeb\StructureMapTest\" + Release.AspNetCompiler.Updateable = "true" + Release.AspNetCompiler.ForceOverwrite = "true" + Release.AspNetCompiler.FixedNames = "false" + Release.AspNetCompiler.Debug = "False" + VWDPort = "4438" + DefaultWebSiteLanguage = "Visual C#" + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Build|.NET = Build|.NET Build|Any CPU = Build|Any CPU + Build|Mixed Platforms = Build|Mixed Platforms + Debug|.NET = Debug|.NET Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Release|.NET = Release|.NET Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Build|.NET.ActiveCfg = Build|Any CPU {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Build|Any CPU.ActiveCfg = Build|Any CPU {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Build|Any CPU.Build.0 = Build|Any CPU + {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Build|Mixed Platforms.ActiveCfg = Build|Any CPU + {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Build|Mixed Platforms.Build.0 = Build|Any CPU + {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Debug|.NET.ActiveCfg = Debug|Any CPU {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Release|.NET.ActiveCfg = Release|Any CPU {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Release|Any CPU.Build.0 = Release|Any CPU + {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3F36EA80-2F9A-4DAD-BA27-5AC6163A2EE3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Build|.NET.ActiveCfg = Release|Any CPU {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Build|Any CPU.ActiveCfg = Release|Any CPU {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Build|Any CPU.Build.0 = Release|Any CPU + {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Debug|.NET.ActiveCfg = Debug|Any CPU {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Release|.NET.ActiveCfg = Release|Any CPU {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Release|Any CPU.ActiveCfg = Release|Any CPU {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Release|Any CPU.Build.0 = Release|Any CPU + {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {52CDE969-625F-4FB6-8EC5-CD297FD809CA}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {63C2742D-B6E2-484F-AFDB-346873075C5E}.Build|.NET.ActiveCfg = Release|Any CPU {63C2742D-B6E2-484F-AFDB-346873075C5E}.Build|Any CPU.ActiveCfg = Release|Any CPU {63C2742D-B6E2-484F-AFDB-346873075C5E}.Build|Any CPU.Build.0 = Release|Any CPU + {63C2742D-B6E2-484F-AFDB-346873075C5E}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {63C2742D-B6E2-484F-AFDB-346873075C5E}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {63C2742D-B6E2-484F-AFDB-346873075C5E}.Debug|.NET.ActiveCfg = Debug|Any CPU {63C2742D-B6E2-484F-AFDB-346873075C5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {63C2742D-B6E2-484F-AFDB-346873075C5E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63C2742D-B6E2-484F-AFDB-346873075C5E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {63C2742D-B6E2-484F-AFDB-346873075C5E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {63C2742D-B6E2-484F-AFDB-346873075C5E}.Release|.NET.ActiveCfg = Release|Any CPU {63C2742D-B6E2-484F-AFDB-346873075C5E}.Release|Any CPU.ActiveCfg = Release|Any CPU {63C2742D-B6E2-484F-AFDB-346873075C5E}.Release|Any CPU.Build.0 = Release|Any CPU + {63C2742D-B6E2-484F-AFDB-346873075C5E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {63C2742D-B6E2-484F-AFDB-346873075C5E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Build|.NET.ActiveCfg = Release|Any CPU {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Build|Any CPU.ActiveCfg = Release|Any CPU {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Build|Any CPU.Build.0 = Release|Any CPU + {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Debug|.NET.ActiveCfg = Debug|Any CPU {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Release|.NET.ActiveCfg = Release|Any CPU {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Release|Any CPU.ActiveCfg = Release|Any CPU {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Release|Any CPU.Build.0 = Release|Any CPU + {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E21E1651-3E32-47B7-A290-F461E63FEAD2}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Build|.NET.ActiveCfg = Release|Any CPU {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Build|Any CPU.ActiveCfg = Release|Any CPU {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Build|Any CPU.Build.0 = Release|Any CPU + {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Debug|.NET.ActiveCfg = Debug|Any CPU {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Release|.NET.ActiveCfg = Release|Any CPU {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Release|Any CPU.ActiveCfg = Release|Any CPU {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Release|Any CPU.Build.0 = Release|Any CPU + {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {027E996C-75E8-40F8-9073-0E3B77A6BE1F}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {C8878328-281F-4F4F-8D6E-88C60F304B89}.Build|.NET.ActiveCfg = Release|Any CPU {C8878328-281F-4F4F-8D6E-88C60F304B89}.Build|Any CPU.ActiveCfg = Release|Any CPU {C8878328-281F-4F4F-8D6E-88C60F304B89}.Build|Any CPU.Build.0 = Release|Any CPU + {C8878328-281F-4F4F-8D6E-88C60F304B89}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {C8878328-281F-4F4F-8D6E-88C60F304B89}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {C8878328-281F-4F4F-8D6E-88C60F304B89}.Debug|.NET.ActiveCfg = Debug|Any CPU {C8878328-281F-4F4F-8D6E-88C60F304B89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C8878328-281F-4F4F-8D6E-88C60F304B89}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8878328-281F-4F4F-8D6E-88C60F304B89}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C8878328-281F-4F4F-8D6E-88C60F304B89}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C8878328-281F-4F4F-8D6E-88C60F304B89}.Release|.NET.ActiveCfg = Release|Any CPU {C8878328-281F-4F4F-8D6E-88C60F304B89}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8878328-281F-4F4F-8D6E-88C60F304B89}.Release|Any CPU.Build.0 = Release|Any CPU + {C8878328-281F-4F4F-8D6E-88C60F304B89}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C8878328-281F-4F4F-8D6E-88C60F304B89}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Build|.NET.ActiveCfg = Release|Any CPU {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Build|Any CPU.ActiveCfg = Release|Any CPU {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Build|Any CPU.Build.0 = Release|Any CPU + {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Debug|.NET.ActiveCfg = Debug|Any CPU {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Release|.NET.ActiveCfg = Release|Any CPU {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Release|Any CPU.ActiveCfg = Release|Any CPU {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Release|Any CPU.Build.0 = Release|Any CPU + {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {901D15CB-EF37-4F84-864B-E70F4B5F1DFF}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Build|.NET.ActiveCfg = Release|Any CPU {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Build|Any CPU.ActiveCfg = Release|Any CPU {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Build|Any CPU.Build.0 = Release|Any CPU + {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Debug|.NET.ActiveCfg = Debug|Any CPU {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Release|.NET.ActiveCfg = Release|Any CPU {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Release|Any CPU.ActiveCfg = Release|Any CPU {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Release|Any CPU.Build.0 = Release|Any CPU + {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CAB97F7F-FB75-410C-898A-88DCAAC036BE}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Build|.NET.ActiveCfg = Release|Any CPU {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Build|Any CPU.ActiveCfg = Release|Any CPU {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Build|Any CPU.Build.0 = Release|Any CPU + {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Debug|.NET.ActiveCfg = Debug|Any CPU {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Release|.NET.ActiveCfg = Release|Any CPU {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Release|Any CPU.ActiveCfg = Release|Any CPU {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Release|Any CPU.Build.0 = Release|Any CPU + {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {DB6A0B91-873E-4E04-866A-7483E136A8D4}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {195EB3B0-96D2-4047-B091-E858690C741C}.Build|.NET.ActiveCfg = Release|Any CPU {195EB3B0-96D2-4047-B091-E858690C741C}.Build|Any CPU.ActiveCfg = Release|Any CPU {195EB3B0-96D2-4047-B091-E858690C741C}.Build|Any CPU.Build.0 = Release|Any CPU + {195EB3B0-96D2-4047-B091-E858690C741C}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {195EB3B0-96D2-4047-B091-E858690C741C}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {195EB3B0-96D2-4047-B091-E858690C741C}.Debug|.NET.ActiveCfg = Debug|Any CPU {195EB3B0-96D2-4047-B091-E858690C741C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {195EB3B0-96D2-4047-B091-E858690C741C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {195EB3B0-96D2-4047-B091-E858690C741C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {195EB3B0-96D2-4047-B091-E858690C741C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {195EB3B0-96D2-4047-B091-E858690C741C}.Release|.NET.ActiveCfg = Release|Any CPU {195EB3B0-96D2-4047-B091-E858690C741C}.Release|Any CPU.ActiveCfg = Release|Any CPU {195EB3B0-96D2-4047-B091-E858690C741C}.Release|Any CPU.Build.0 = Release|Any CPU + {195EB3B0-96D2-4047-B091-E858690C741C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {195EB3B0-96D2-4047-B091-E858690C741C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Build|.NET.ActiveCfg = Release|Any CPU {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Build|Any CPU.ActiveCfg = Release|Any CPU {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Build|Any CPU.Build.0 = Release|Any CPU + {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Debug|.NET.ActiveCfg = Debug|Any CPU {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Release|.NET.ActiveCfg = Release|Any CPU {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Release|Any CPU.ActiveCfg = Release|Any CPU {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Release|Any CPU.Build.0 = Release|Any CPU + {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {887C4441-07A4-489D-B8D9-EFE9D28A47CA}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {51039D04-6DB6-44BD-B827-39C86482D9F0}.Build|.NET.ActiveCfg = Release|Any CPU {51039D04-6DB6-44BD-B827-39C86482D9F0}.Build|Any CPU.ActiveCfg = Release|Any CPU {51039D04-6DB6-44BD-B827-39C86482D9F0}.Build|Any CPU.Build.0 = Release|Any CPU + {51039D04-6DB6-44BD-B827-39C86482D9F0}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {51039D04-6DB6-44BD-B827-39C86482D9F0}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {51039D04-6DB6-44BD-B827-39C86482D9F0}.Debug|.NET.ActiveCfg = Debug|Any CPU {51039D04-6DB6-44BD-B827-39C86482D9F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {51039D04-6DB6-44BD-B827-39C86482D9F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {51039D04-6DB6-44BD-B827-39C86482D9F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {51039D04-6DB6-44BD-B827-39C86482D9F0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {51039D04-6DB6-44BD-B827-39C86482D9F0}.Release|.NET.ActiveCfg = Release|Any CPU {51039D04-6DB6-44BD-B827-39C86482D9F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {51039D04-6DB6-44BD-B827-39C86482D9F0}.Release|Any CPU.Build.0 = Release|Any CPU + {51039D04-6DB6-44BD-B827-39C86482D9F0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {51039D04-6DB6-44BD-B827-39C86482D9F0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Build|.NET.ActiveCfg = Release|Any CPU {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Build|Any CPU.ActiveCfg = Release|Any CPU {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Build|Any CPU.Build.0 = Release|Any CPU + {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Debug|.NET.ActiveCfg = Debug|Any CPU {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Release|.NET.ActiveCfg = Release|Any CPU {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Release|Any CPU.ActiveCfg = Release|Any CPU {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Release|Any CPU.Build.0 = Release|Any CPU + {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C205EA4C-4CD0-4221-A3CB-AFD835F0B263}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Build|.NET.ActiveCfg = Release|Any CPU {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Build|Any CPU.ActiveCfg = Release|Any CPU {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Build|Any CPU.Build.0 = Release|Any CPU + {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Build|Mixed Platforms.ActiveCfg = Release|Any CPU + {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Build|Mixed Platforms.Build.0 = Release|Any CPU + {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Debug|.NET.ActiveCfg = Debug|Any CPU {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Release|.NET.ActiveCfg = Release|Any CPU {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Release|Any CPU.ActiveCfg = Release|Any CPU {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Release|Any CPU.Build.0 = Release|Any CPU + {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {DB798C07-0C82-4298-8BAA-D702CF96C28E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Build|.NET.ActiveCfg = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Build|.NET.Build.0 = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Build|Any CPU.ActiveCfg = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Build|Mixed Platforms.ActiveCfg = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Build|Mixed Platforms.Build.0 = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Debug|.NET.ActiveCfg = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Debug|.NET.Build.0 = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Debug|Any CPU.ActiveCfg = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Debug|Mixed Platforms.ActiveCfg = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Debug|Mixed Platforms.Build.0 = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Release|.NET.ActiveCfg = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Release|.NET.Build.0 = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Release|Any CPU.ActiveCfg = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Release|Mixed Platforms.ActiveCfg = Debug|.NET + {6C0DF673-322F-4AB9-A020-924661EF0CAB}.Release|Mixed Platforms.Build.0 = Debug|.NET EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {C205EA4C-4CD0-4221-A3CB-AFD835F0B263} = {E1C10209-160D-4054-ACB7-478A9FDCF84C} - {E21E1651-3E32-47B7-A290-F461E63FEAD2} = {E1C10209-160D-4054-ACB7-478A9FDCF84C} {027E996C-75E8-40F8-9073-0E3B77A6BE1F} = {E1C10209-160D-4054-ACB7-478A9FDCF84C} {C8878328-281F-4F4F-8D6E-88C60F304B89} = {E1C10209-160D-4054-ACB7-478A9FDCF84C} {901D15CB-EF37-4F84-864B-E70F4B5F1DFF} = {E1C10209-160D-4054-ACB7-478A9FDCF84C} {CAB97F7F-FB75-410C-898A-88DCAAC036BE} = {E1C10209-160D-4054-ACB7-478A9FDCF84C} + {C205EA4C-4CD0-4221-A3CB-AFD835F0B263} = {E1C10209-160D-4054-ACB7-478A9FDCF84C} + {E21E1651-3E32-47B7-A290-F461E63FEAD2} = {E1C10209-160D-4054-ACB7-478A9FDCF84C} {51039D04-6DB6-44BD-B827-39C86482D9F0} = {4F638ECF-2A69-4D6A-9B68-05CC40951217} {887C4441-07A4-489D-B8D9-EFE9D28A47CA} = {4F638ECF-2A69-4D6A-9B68-05CC40951217} EndGlobalSection Modified: trunk/StructureMap.config =================================================================== --- trunk/StructureMap.config 2007-04-01 22:59:15 UTC (rev 37) +++ trunk/StructureMap.config 2007-04-01 23:14:43 UTC (rev 38) @@ -1,10 +1,10 @@ <!--<?xml version="1.0" encoding="utf-8" ?>--> -<StructureMap DefaultProfile="TheDefaultProfile"> +<StructureMap DefaultProfile="TheDefaultProfile" Id="Main"> <Assembly Name="StructureMap.Testing.Widget" Deploy="Client, Test, Server"/> <Assembly Name="StructureMap.Testing.Widget2" Deploy="Remote"/> <Assembly Name="StructureMap.Testing.Widget3"/> - <!--<Assembly Name="FieldAgent.UI" />--> + <Profile Name="TheDefaultProfile"> <Override Type="StructureMap.Testing.Widget.GrandChild" DefaultKey="Todd"/> </Profile> Modified: trunk/bin/NUnit/NUnitTests.config =================================================================== --- trunk/bin/NUnit/NUnitTests.config 2007-04-01 22:59:15 UTC (rev 37) +++ trunk/bin/NUnit/NUnitTests.config 2007-04-01 23:14:43 UTC (rev 38) @@ -27,10 +27,14 @@ <appSettings> <!-- User application and configured property settings go here.--> <!-- Example: <add key="settingName" value="settingValue"/> --> + + <!-- The following is used by the NUnit tests. TODO: REMOVE --> <add key="test.setting" value="54321" /> </appSettings> - <NUnit> + <!-- The following settings for NUnit are not actually needed, but are --> + <!-- provided for documentation purposes. The values are all defaults. --> + <NUnit> <TestCaseBuilder> <add key="OldStyleTestCases" value="false" /> </TestCaseBuilder> Modified: trunk/bin/NUnit/NUnitTests.nunit =================================================================== --- trunk/bin/NUnit/NUnitTests.nunit 2007-04-01 22:59:15 UTC (rev 37) +++ trunk/bin/NUnit/NUnitTests.nunit 2007-04-01 23:14:43 UTC (rev 38) @@ -1,11 +1,13 @@ <NUnitProject> <Config name="Default" binpathtype="Auto"> <assembly path="nunit.framework.tests.dll" /> + <assembly path="nunit.core.tests.dll" /> <assembly path="nunit.util.tests.dll" /> <assembly path="nunit.mocks.tests.dll" /> + <assembly path="nunit.extensions.tests.dll" /> + <assembly path="nunit-console.tests.dll" /> <assembly path="nunit.uikit.tests.dll" /> - <assembly path="nunit-console.tests.dll" /> <assembly path="nunit-gui.tests.dll" /> - <assembly path="nunit.extensions.tests.dll" /> + <assembly path="nunit.fixtures.tests.dll" /> </Config> </NUnitProject> Modified: trunk/bin/NUnit/TestResult.xml =================================================================== --- trunk/bin/NUnit/TestResult.xml 2007-04-01 22:59:15 UTC (rev 37) +++ trunk/bin/NUnit/TestResult.xml 2007-04-01 23:14:43 UTC (rev 38) @@ -1,1269 +1,600 @@ <?xml version="1.0" encoding="utf-8" standalone="no"?> <!--This file represents the results of running a test suite--> -<test-results name="D:\Dev\NUnit\nunit20-release-branch\src\build\net\1.1\release\NUnitTests.nunit" total="753" failures="0" not-run="0" date="2006-01-22" time="12:24:00"> - <environment nunit-version="2.2.6.0" clr-version="1.1.4322.573" os-version="Microsoft Windows NT 5.0.2195.0" platform="Win32NT" cwd="D:\Dev\NUnit\nunit20-release-branch\src\build\net\1.1\release" machine-name="BIRCH" user="Charlie" user-domain="BIRCH" /> +<test-results name="..\..\1.1\release\nunit.framework.tests.dll" total="388" failures="0" not-run="0" date="2007-03-02" time="21:26:07"> + <environment nunit-version="2.4.0.0" clr-version="2.0.50727.42" os-version="Microsoft Windows NT 5.1.2600 Service Pack 2" platform="Win32NT" cwd="D:\Dev\NUnit\nunit-2.4\build\net\2.0\release" machine-name="FERRARI" user="Charlie" user-domain="FERRARI" /> <culture-info current-culture="en-US" current-uiculture="en-US" /> - <test-suite name="D:\Dev\NUnit\nunit20-release-branch\src\build\net\1.1\release\NUnitTests.nunit" success="True" time="78.873" asserts="0"> + <test-suite name="..\..\1.1\release\nunit.framework.tests.dll" success="True" time="1.078" asserts="0"> <results> - <test-suite name="D:\Dev\NUnit\nunit20-release-branch\src\build\net\1.1\release\nunit.framework.tests.dll" success="True" time="10.575" asserts="0"> + <test-suite name="NUnit" success="True" time="1.078" asserts="0"> <results> - <test-suite name="NUnit" success="True" time="10.455" asserts="0"> + <test-suite name="Framework" success="True" time="1.078" asserts="0"> <results> - <test-suite name="Framework" success="True" time="1.853" asserts="0"> + <test-suite name="Constraints" success="True" time="0.125" asserts="0"> <results> - <test-suite name="Tests" success="True" time="1.853" asserts="0"> + <test-suite name="Tests" success="True" time="0.125" asserts="0"> <results> - <test-suite name="ArrayEqualsFixture" success="True" time="0.371" asserts="0"> + <test-suite name="AllItemsTests" success="True" time="0.031" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.SameArraysAreEqual" executed="True" success="True" time="0.020" asserts="2" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.DifferentArraysAreEqual" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.DifferentLengthArrays" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.SameLengthDifferentContent" executed="True" success="True" time="0.010" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.DifferentArrayTypesButEqual" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.MixedTypesAreEqual" executed="True" success="True" time="0.010" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.DifferentArrayTypesNotEqual" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysOfInt" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysOfDouble" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysOfDecimal" executed="True" success="True" time="0.010" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArrayOfIntVersusArrayOfDouble" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.RanksOfArraysMustMatch" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.MultiDimensionedArraysNotSupported" executed="True" success="True" time="0.020" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysPassedAsObjects" executed="True" success="True" time="0.000" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.AllItemsTests.AllItemsAreInRange" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.AllItemsTests.AllItemsAreInRangeFailureMessage" executed="True" success="True" time="0.016" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.AllItemsTests.AllItemsAreInstancesOfType" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.AllItemsTests.AllItemsAreInstancesOfTypeFailureMessage" executed="True" success="True" time="0.000" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.AllItemsTests.AllItemsAreNotNull" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.AllItemsTests.AllItemsAreNotNullFails" executed="True" success="True" time="0.000" asserts="2" /> </results> </test-suite> - <test-suite name="AssertExtensionTests" success="True" time="0.030" asserts="0"> + <test-suite name="AndTest" success="True" time="0.016" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.AssertExtensionTests.FormattedMessageTests" executed="True" success="True" time="0.020" asserts="6" /> - <test-case name="NUnit.Framework.Tests.AssertExtensionTests.OddNumber" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.AssertExtensionTests.OddNumberFails" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.AndTest.CanCombineTestsWithAndOperator" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.AndTest.FailsOnBadValues" executed="True" success="True" time="0.000" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.AndTest.ProvidesProperDescription" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.AndTest.ProvidesProperFailureMessage" executed="True" success="True" time="0.016" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.AndTest.SucceedsOnGoodValues" executed="True" success="True" time="0.000" asserts="1" /> </results> </test-suite> - <test-suite name="ConditionAssertTests" success="True" time="0.020" asserts="0"> + <test-suite name="AssignableFromTest" success="True" time="0.000" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsTrue" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsTrueFails" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsFalse" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsFalseFails" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNull" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNullFails" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotNull" executed="True" success="True" time="0.010" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotNullFails" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNaN" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNaNFails" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsEmpty" executed="True" success="True" time="0.000" asserts="4" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsEmptyFailsOnString" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsEmptyFailsOnNullString" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsEmptyFailsOnNonEmptyArray" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotEmpty" executed="True" success="True" time="0.010" asserts="4" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotEmptyFailsOnEmptyString" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotEmptyFailsOnEmptyArray" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotEmptyFailsOnEmptyArrayList" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotEmptyFailsOnEmptyHashTable" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.AssignableFromTest.FailsOnBadValues" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.AssignableFromTest.ProvidesProperDescription" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.AssignableFromTest.ProvidesProperFailureMessage" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.AssignableFromTest.SucceedsOnGoodValues" executed="True" success="True" time="0.000" asserts="2" /> </results> </test-suite> - <test-suite name="EqualsFixture" success="True" time="0.250" asserts="0"> + <test-suite name="CollectionContainsTests" success="True" time="0.000" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.EqualsFixture.Equals" executed="True" success="True" time="0.010" asserts="2" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.EqualsNull" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.Bug575936Int32Int64Comparison" executed="True" success="True" time="0.010" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.IntegerLongComparison" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.IntergerEquals" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.EqualsFail" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.EqualsNaNFails" executed="True" success="True" time="0.010" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.NanEqualsFails" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.NanEqualsNaNSucceeds" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.NegInfinityEqualsInfinity" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.PosInfinityEqualsInfinity" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.PosInfinityNotEquals" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.PosInfinityNotEqualsNegInfinity" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.SinglePosInfinityNotEqualsNegInfinity" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.EqualsThrowsException" executed="True" success="True" time="0.000" asserts="0" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.ReferenceEqualsThrowsException" executed="True" success="True" time="0.000" asserts="0" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.Float" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.Byte" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.String" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.Short" executed="True" success="True" time="0.030" asserts="2" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.Int" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.Decimal" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.EqualsSameTypes" executed="True" success="True" time="0.000" asserts="21" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.EnumsEqual" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.EnumsNotEqual" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.DateTimeEqual" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.EqualsFixture.DateTimeNotEqual" executed="True" success="True" time="0.030" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.CollectionContainsTests.CanTestContentsOfArray" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.CollectionContainsTests.CanTestContentsOfArrayList" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.CollectionContainsTests.CanTestContentsOfSortedList" executed="True" success="True" time="0.000" asserts="2" /> </results> </test-suite> - <test-suite name="MyAssertionFailureMessage+FailureMessageFixture" success="True" time="0.210" asserts="0"> + <test-suite name="EmptyTest" success="True" time="0.000" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestInputsAreStrings" executed="True" success="True" time="0.010" asserts="8" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestCreateStringBuilder" executed="True" success="True" time="0.000" asserts="5" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestClipAroundPosition" executed="True" success="True" time="0.000" asserts="26" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestClipAroundPosition2" executed="True" success="True" time="0.000" asserts="80" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestConvertWhitespace" executed="True" success="True" time="0.000" asserts="13" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestFormatMessageForFailNotEquals" executed="True" success="True" time="0.030" asserts="13" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestFormatMessageForFailNotEqualsIgnoringCase" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestFormatMessageForFailNotEqualsNewlines" executed="True" success="True" time="0.000" asserts="3" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestStringLengthsDiffer" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestStringLengthsDiffer2" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestStringLengthsDiffer3" executed="True" success="True" time="0.140" asserts="995" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.DisplayListElements" executed="True" success="True" time="0.010" asserts="6" /> - <test-case name="NUnit.Framework.Tests.MyAssertionFailureMessage+FailureMessageFixture.TestFormatMessageForArraysNotEqual" executed="True" success="True" time="0.000" asserts="4" /> + <test-case name="NUnit.Framework.Constraints.Tests.EmptyTest.FailsOnBadValues" executed="True" success="True" time="0.000" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.EmptyTest.ProvidesProperDescription" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.EmptyTest.ProvidesProperFailureMessage" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.EmptyTest.SucceedsOnGoodValues" executed="True" success="True" time="0.000" asserts="3" /> </results> </test-suite> - <test-suite name="GreaterFixture" success="True" time="0.611" asserts="0"> + <test-suite name="EndsWithTest" success="True" time="0.000" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.GreaterFixture.Greater" executed="True" success="True" time="0.000" asserts="4" /> - <test-case name="NUnit.Framework.Tests.GreaterFixture.NotGreaterWhenEqual" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.GreaterFixture.NotGreater" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.GreaterFixture.NotGreaterIComparable" executed="True" success="True" time="0.020" asserts="1" /> - <test-case name="NUnit.Framework.Tests.GreaterFixture.FailureMessage" executed="True" success="True" time="0.010" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.EndsWithTest.FailsOnBadValues" executed="True" success="True" time="0.000" asserts="6" /> + <test-case name="NUnit.Framework.Constraints.Tests.EndsWithTest.ProvidesProperDescription" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.EndsWithTest.ProvidesProperFailureMessage" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.EndsWithTest.SucceedsOnGoodValues" executed="True" success="True" time="0.000" asserts="2" /> </results> </test-suite> - <test-suite name="LessFixture" success="True" time="0.030" asserts="0"> + <test-suite name="EndsWithTestIgnoringCase" success="True" time="0.000" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.LessFixture.Less" executed="True" success="True" time="0.000" asserts="12" /> - <test-case name="NUnit.Framework.Tests.LessFixture.NotLessWhenEqual" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.LessFixture.NotLess" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.LessFixture.NotLessIComparable" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.LessFixture.FailureMessage" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.EndsWithTestIgnoringCase.FailsOnBadValues" executed="True" success="True" time="0.000" asserts="6" /> + <test-case name="NUnit.Framework.Constraints.Tests.EndsWithTestIgnoringCase.ProvidesProperDescription" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.EndsWithTestIgnoringCase.ProvidesProperFailureMessage" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.EndsWithTestIgnoringCase.SucceedsOnGoodValues" executed="True" success="True" time="0.000" asserts="2" /> </results> </test-suite> - <test-suite name="ListContentsTests" success="True" time="0.010" asserts="0"> + <test-suite name="EqualIgnoringCaseTest" success="True" time="0.000" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.ListContentsTests.ArraySucceeds" executed="True" success="True" time="0.000" asserts="3" /> - <test-case name="NUnit.Framework.Tests.ListContentsTests.ArrayFails" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.ListContentsTests.EmptyArrayFails" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.ListContentsTests.NullArrayFails" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.ListContentsTests.ArrayListSucceeds" executed="True" success="True" time="0.000" asserts="3" /> - <test-case name="NUnit.Framework.Tests.ListContentsTests.ArrayListFails" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.ListContentsTests.DifferentTypesFail" executed="True" success="True" time="0.000" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualIgnoringCaseTest.FailsOnBadValues" executed="True" success="True" time="0.000" asserts="4" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualIgnoringCaseTest.ProvidesProperDescription" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualIgnoringCaseTest.ProvidesProperFailureMessage" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualIgnoringCaseTest.SucceedsOnGoodValues" executed="True" success="True" time="0.000" asserts="3" /> </results> </test-suite> - <test-suite name="NotEqualFixture" success="True" time="0.010" asserts="0"> + <test-suite name="EqualTest" success="True" time="0.047" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.NotEqualFixture.NotEqual" executed="True" success="True" time="0.010" asserts="1" /> - <test-case name="NUnit.Framework.Tests.NotEqualFixture.NotEqualFails" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.NotEqualFixture.NullNotEqualToNonNull" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.NotEqualFixture.NullEqualsNull" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.NotEqualFixture.ArraysNotEqual" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.NotEqualFixture.ArraysNotEqualFails" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualTest.FailedStringMatchShowsFailurePosition" executed="True" success="True" time="0.000" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualTest.FailsOnBadValues" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualTest.LongStringsAreTruncated" executed="True" success="True" time="0.031" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualTest.LongStringsAreTruncatedAtBothEndsIfNecessary" executed="True" success="True" time="0.000" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualTest.LongStringsAreTruncatedAtFrontEndIfNecessary" executed="True" success="True" time="0.000" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualTest.NANsCompareAsEqual" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualTest.ProvidesProperDescription" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualTest.ProvidesProperFailureMessage" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.EqualTest.SucceedsOnGoodValues" executed="True" success="True" time="0.000" asserts="4" /> </results> </test-suite> - <test-suite name="NotSameFixture" success="True" time="0.100" asserts="0"> + <test-suite name="ExactTypeTest" success="True" time="0.000" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.NotSameFixture.NotSame" executed="True" success="True" time="0.020" asserts="1" /> - <test-case name="NUnit.Framework.Tests.NotSameFixture.NotSameFails" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.ExactTypeTest.FailsOnBadValues" executed="True" success="True" time="0.000" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.ExactTypeTest.ProvidesProperDescription" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.ExactTypeTest.ProvidesProperFailureMessage" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.ExactTypeTest.SucceedsOnGoodValues" executed="True" success="True" time="0.000" asserts="1" /> </results> </test-suite> - <test-suite name="SameFixture" success="True" time="0.010" asserts="0"> + <test-suite name="GreaterThanOrEqualTest" success="True" time="0.000" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.SameFixture.Same" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.SameFixture.SameFails" executed="True" success="True" time="0.000" asserts="1" /> - <test-case name="NUnit.Framework.Tests.SameFixture.SameValueTypes" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.GreaterThanOrEqualTest.FailsOnBadValues" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.GreaterThanOrEqualTest.ProvidesProperDescription" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.GreaterThanOrEqualTest.ProvidesProperFailureMessage" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.GreaterThanOrEqualTest.SucceedsOnGoodValues" executed="True" success="True" time="0.000" asserts="2" /> </results> </test-suite> - <test-suite name="StringAssertTests" success="True" time="0.050" asserts="0"> + <test-suite name="GreaterThanTest" success="True" time="0.000" asserts="0"> <results> - <test-case name="NUnit.Framework.Tests.StringAssertTests.Contains" executed="True" success="True" time="0.000" asserts="3" /> - <test-case name="NUnit.Framework.Tests.StringAssertTests.ContainsFails" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.StringAssertTests.StartsWith" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.StringAssertTests.StartsWithFails" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.StringAssertTests.EndsWith" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.StringAssertTests.EndsWithFails" executed="True" success="True" time="0.000" asserts="2" /> - <test-case name="NUnit.Framework.Tests.StringAssertTests.CaseInsensitiveCompare" executed="True" success="True" time="0.030" asserts="1" /> - <test-case name="NUnit.Framework.Tests.StringAssertTests.CaseInsensitiveCompareFails" executed="True" success="True" time="0.010" asserts="2" /> + <test-case name="NUnit.Framework.Constraints.Tests.GreaterThanTest.FailsOnBadValues" executed="True" success="True" time="0.000" asserts="4" /> + <test-case name="NUnit.Framework.Constraints.Tests.GreaterThanTest.ProvidesProperDescription" executed="True" success="True" time="0.000" asserts="1" /> + <test-case name="NUnit.Framework.Constraints.Tests.GreaterThanTest.ProvidesProperFailureMessage" executed="True" success="True" time="0.000" asserts="3" /> + <test-case name="NUnit.Framework.Constraints.Tests.GreaterThanTest.SucceedsOnGoodValues" executed="True" success="True" time="0.000" asserts="1" /> </results> </test-suite> - <test-suite name="TypeAssertTests" success="True" time="0.140" asserts="0"> + <test-suite name="InstanceOfTypeTest" success="True" ... [truncated message content] |
From: <jer...@us...> - 2007-04-01 22:59:16
|
Revision: 37 http://structuremap.svn.sourceforge.net/structuremap/?rev=37&view=rev Author: jeremydmiller Date: 2007-04-01 15:59:15 -0700 (Sun, 01 Apr 2007) Log Message: ----------- fixing a build problem with the NAnt targets Modified Paths: -------------- trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs trunk/cruise.build Modified: trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs =================================================================== --- trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs 2007-04-01 22:21:15 UTC (rev 36) +++ trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs 2007-04-01 22:59:15 UTC (rev 37) @@ -65,7 +65,7 @@ _sourceConfigDocument = new XmlDocument(); _sourceConfigDocument.Load(configPath); - PluginGraphBuilder builder = new PluginGraphBuilder(new ConfigurationParser(_sourceConfigDocument)); + PluginGraphBuilder builder = new PluginGraphBuilder(new ConfigurationParser(_sourceConfigDocument.DocumentElement)); _report = createPluginGraphReport(builder); _defaultManager = builder.DefaultManager; Modified: trunk/cruise.build =================================================================== --- trunk/cruise.build 2007-04-01 22:21:15 UTC (rev 36) +++ trunk/cruise.build 2007-04-01 22:59:15 UTC (rev 37) @@ -123,11 +123,11 @@ <exec program="${nunit-console.exe}" workingdir="${build.dir}"> <arg value="StructureMap.Testing.dll" /> </exec> -<!-- + <exec program="${nunit-console.exe}" workingdir="${build.dir}"> <arg value="StructureMap.Testing.DeploymentTasks.dll" /> </exec> ---> + </target> <target name="runDoctor"> @@ -148,13 +148,14 @@ <target name="post-clean"> <call target="cleanJunk" /> - + <delete> <fileset basedir="${build.dir}"> <include name="*.xml" /> <include name="*.config" /> </fileset> </delete> + </target> <target name="archive"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2007-04-01 22:21:18
|
Revision: 36 http://structuremap.svn.sourceforge.net/structuremap/?rev=36&view=rev Author: jeremydmiller Date: 2007-04-01 15:21:15 -0700 (Sun, 01 Apr 2007) Log Message: ----------- Added the <DefaultInstance> node capability, documentation, set the default profile from code Modified Paths: -------------- trunk/Docs/Configuration.htm trunk/Docs/Default.htm trunk/Source/StructureMap/Configuration/ConfigurationParser.cs trunk/Source/StructureMap/Configuration/FamilyParser.cs trunk/Source/StructureMap/Configuration/GraphObject.cs trunk/Source/StructureMap/Configuration/PluginGraphReport.cs trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs trunk/Source/StructureMap/Configuration/UserControlMemento.cs trunk/Source/StructureMap/Configuration/XmlConstants.cs trunk/Source/StructureMap/Graph/PluginGraph.cs trunk/Source/StructureMap/InstanceMemento.cs trunk/Source/StructureMap/Source/XmlNodeInstanceMemento.cs trunk/Source/StructureMap/Verification/StartUp.cs trunk/Source/StructureMap.Testing/Configuration/DSL/UserControlExpressionTester.cs trunk/Source/StructureMap.Testing/Configuration/FamilyParserTester.cs trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs trunk/Source/StructureMap.Testing/ObjectMother.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs trunk/Source/StructureMap.Testing/TestData/DataMother.cs trunk/Source/StructureMap.Testing.Widget/IWidget.cs trunk/Source/StructureMap.Testing.Widget/Rule.cs Added Paths: ----------- trunk/Source/StructureMap.Testing/Configuration/DefaultInstanceNodeTester.cs trunk/Source/StructureMap.Testing/TestData/DefaultInstance.xml Modified: trunk/Docs/Configuration.htm =================================================================== --- trunk/Docs/Configuration.htm 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Docs/Configuration.htm 2007-04-01 22:21:15 UTC (rev 36) @@ -54,6 +54,7 @@ <A href="#log4net">log4net</A><BR> <A href="#Machine">Machine</A><BR> <A href="#PluginFamily">PluginFamily</A><BR> + <A href="#DefaultInstance">DefaultInstance</A><BR> <A href="#Profile">Profile</A><BR> <A href="#Instance">Instance</A><BR> <A href="#Interceptors">Interceptors</A><BR> @@ -63,6 +64,7 @@ <A href="#Setter">Setter</A><BR> <A href="#Source">Source</A><BR> <A href="#Property">Property</A></P> + <HR width="100%" SIZE="1"> <!--StructureMap node--> <A name="StructureMap"></A> @@ -81,6 +83,10 @@ <TD>Directs StructureMap to use the named Profile as the default profile at runtime</TD> </TR> + <tr> + <td>MementoStyle</td> + <td>Specifies the type of Instance Memento definition between "Node" normalized and "Attribute" normalized. For backwards compatibility, the default value is "Node"</td> + </tr> </TABLE> </DIV> <p><A href="#TopOfPage">Back to Top</A><BR> @@ -175,11 +181,19 @@ <HR> <A name="Machine"></A> <H3><Machine> Element</H3> - <P>Machine level overrides for default instances of one or more PluginFamily\x92s</P> + <P>Machine level overrides for default instances of one or more PluginFamily\x92s. New in version 2.0 is the ability to define the instance for the type specified by the Type attribute inline in an embedded <Instance> node</P> <H4>Sample</H4> - <pre class="xml-sample"><Machine Name="SERVER" Profile="Local"> + <pre class="xml-sample"> +<Machine Name="SERVER" Profile="Local"> <Override Type="StructureMap.Testing.Widget.IWidget" DefaultKey="Orange"/> -</Machine></pre> +</Machine> + + <Override Type="StructureMap.Testing.Widget.Rule"> + <Instance Type="Color" Color="Green"/> + </Override> + + +</pre> <H4>Required Attributes</H4> <DIV class="schema-table"><TABLE width="100%" border="1" cellPadding="1" cellSpacing="1" ID="Table3"> <TR> @@ -253,6 +267,62 @@ <A href="#TopOfPage">Back to Top</A><BR> <BR> <HR> + + + + + <A name="DefaultInstance"></A> + <H3><DefaultInstance> Element</H3> + <P>Shorthand way to explicitly define the default instance of a PluginType in one element. Explicitly directs and + configures StructureMap to create instances of the CLR Type specified by the "PluginType" attribute. The DefaultInstance node also represents an Instance node, and the arguments to the constructor function and setter properties follow the same rules as an Instance node.</P> + <H4>Sample</H4> + <pre class="xml-sample"><DefaultInstance PluginType="StructureMap.Testing.Widget.Rule,StructureMap.Testing" PluggedType="StructureMap.Testing.Widget.ColorRule,StructureMap.Testing" Scope="Singleton"> Color="Red" + <BR> </DefaultInstance></pre> + <H4>Required Attributes</H4> + <DIV class="schema-table"><TABLE width="100%" border="1" cellPadding="1" cellSpacing="1" ID="Table19"> + <TR> + <TH width="25%"> + Attribute</TH><TH width="75%">Description</TH></TR> + <TR> + <TD>PluginType</TD> + <TD>Assembly qualified name of the PluginType, as in PluginType instance = ObjectFactory.GetInstance<PluginType>()</TD> + </TR> + <TR> + <TD>PluggedType</TD> + <TD>The assembly qualified name of the concrete type</TD> + </TR> + </TABLE> + </DIV> + <H4>Optional Attributes</H4> + <DIV class="schema-table"><TABLE width="100%" border="1" cellPadding="1" cellSpacing="1" ID="Table20"> + <TR> + <TH width="25%"> + Attribute</TH><TH width="75%">Description</TH></TR> + <TR> + <TD>Name</TD> + <TD>The InstanceKey of the default instance. If unspecified, StructureMap will create a default name. This is mostly for diagnostics.</TD> + </TR> + <TR> + <TD>Scope</TD> + <TD>Controls the "scope" of the requested + instance. The default value is + PerRequest. Valid values are + PerRequest, Singleton, ThreadLocal, + HttpContext, and Hybrid (uses HttpContext if + available, otherwise ThreadLocal)</TD> + </TR> + </TABLE> + </DIV> + <BR> + <A href="#TopOfPage">Back to Top</A><BR> + <BR> + <HR> + + + + + + <A name="Profile"></A> <H3><Profile> Element</H3> <P>Models a named set of overrides for default instances of one or more @@ -261,7 +331,14 @@ <pre class="xml-sample"><Profile Name="Blue"> <Override Type="StructureMap.Testing.Widget.Rule" DefaultKey="Blue"/> <Override Type="StructureMap.Testing.Widget.IWidget" DefaultKey="Blue"/> -</Profile></pre> +</Profile> + +<Override Type="StructureMap.Testing.Widget.Rule"> + <Instance Type="Color" Color="Green"/> +</Override> + + +</pre> <H4>Required Attributes</H4> <DIV class="schema-table"><TABLE width="100%" border="1" cellPadding="1" cellSpacing="1" ID="Table7"> <TR> @@ -285,7 +362,16 @@ <Property Name="Attribute" Value="MyDad" /> <Property Name="Value" Value="10" /> </Instance><BR> -</PluginFamily></pre> +</PluginFamily> + +* OR * + +<PluginFamily><BR> <Instance Key="Bigger" PluggedType="Assembly Qualified Name"> + <Property Name="Attribute" Value="MyDad" /> + <Property Name="Value" Value="10" /> + </Instance><BR> +</PluginFamily> +</pre> <H4>Required Attributes</H4> <DIV class="schema-table"><TABLE width="100%" border="1" cellPadding="1" cellSpacing="1" ID="Table8"> <TR> @@ -308,6 +394,10 @@ <TR> <TH width="25%"> Attribute</TH><TH width="75%">Description</TH></TR> + <tr> + <td>PluggedType</td> + <td>An alternative to the Type attribute. Allows you to specify the assembly qualified type of the concrete class directly</td> + </tr> <TR> <TD>Template</TD> <TD>When using the Modified: trunk/Docs/Default.htm =================================================================== --- trunk/Docs/Default.htm 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Docs/Default.htm 2007-04-01 22:21:15 UTC (rev 36) @@ -15,7 +15,7 @@ border="0" alt="SourceForge.net Logo"></A> </p> <P style="LINE-HEIGHT: 25px"> - <A href="default.htm">Home</A><BR> + <A href="Default.htm">Home</A><BR> <a href="http://sourceforge.net/projects/structuremap">StructureMap on SourceForge</a><br> <A href="Basic Architecture.htm">Basic Architecture</A><BR> <A href="Concepts.htm">Concepts</A><BR> @@ -53,10 +53,26 @@ generic flexibility mechanisms. Used judiciously, StructureMap can greatly enhance the opportunities for code reuse by minimizing direct coupling between classes and configuration mechanisms.</p> + <p> + StructureMap is released under the permissive Apache 2 OSS license. You are + free to download, modify, or redistribute StructureMap in any way you see fit.</p> <p> - New in version 1.0 is the ability to create - self-diagnostic deployment configurations</p> - <p>Consider using StructureMap if you\x85</p> + New for version 2.0</p> + <ul> + <li>Full support for pluggable generic types. IService<T> and Service<T>. + Auto wiring support for generic arguments</li> + <li>Simpler, more terse Xml configuration. Fewer steps and less Xml.</li> + <li>Define Profile instances inline for less Xml</li> + <li>New Fluent Interface API for programmatic configuration. If so desired, all configuration can now be done in code at application startup</li> + <li>The default StructureMap.config file is now optional</li> + <li>Use multiple configuration files additively for easier configuration of composite + applications</li> + <li>Pluggable ASP.Net UserControl's</li> + <li>Inject prototype instances</li> + <li>Inject prebuilt singleton instances </li> + </ul> + <p> + Consider using StructureMap if you\x85</p> <ul> <li> Require significant extensibility @@ -72,44 +88,14 @@ <p>Do not use StructureMap if an application or process requires little flexibility. The abstraction and indirection afforded by StructureMap is unnecessary and even harmful in simpler systems or processes. </p> - <p>New for version 1.0</p> - <ul> - <li>New terser <a href="AttributeNormalized.htm"> - Attribute Normalized Xml</a> configuration style</li> - <li>The ability to <a href="Configuration.htm#Include"> - include secondary configuration files</a></li> - <li>Set a default profile at the top level of - configuration</li> - <li><a href="StructureMapDoctor.htm"> - StructureMapExplorer</a>, a WinForms tool to explore and - debug StructureMap configurations</li> - <li>New <a href="NAnt%20Tasks.htm">ancillary NAnt tasks</a>, - including functionality to create a file "manifest" to - verify the contents of an application deployment</li> - <li>New <a href="MementoSources.htm">configuration - storage choices</a></li> - <li>New Instance <a href="Scoping.htm">lifecycle scoping - </a>options</li> - <li>The "<a href="MementoSources.htm">TemplatedMementoSource</a>" - option for large instance graphs</li> - <li>Streamlined codebase with less coupling and greater - test coverage. Greatly improved diagnostics.</li> - <li>New methods on ObjectFactory<ul> - <li>GetAllInstances() - returns all instances of a - certain type</li> - <li>WhatDoIHave() - for runtime troubleshooting</li> - <li>GetInstance(Type, InstanceMemento)</li> - </ul> - </li> - </ul> <h3>Status</h3> - <p>StructureMap has been in multiple production systems + <p>StructureMap is the oldest IoC/DI tool for .Net development and has been used in multiple production systems since - June 2004. The current version 1.0 was released in - May 2006. StructureMap is maintained and developed by + June 2004. The current version 2.0 was released in April 2007. StructureMap is maintained and developed by <a href="mailto:jer...@ya...?subject=StructureMap">Jeremy D. Miller</a>, <a href="http://codebetter.com/blogs/jeremy.miller">The - Shade Tree Developer</a></p> + Shade Tree Developer</a>. + </p> <p>Recent Articles</p> <ul> <li> @@ -123,9 +109,9 @@ </ul> <h3>Feature List</h3> <UL> - <LI> + <li> Creates objects using the <a href="http://picocontainer.codehaus.org/Constructor+Injection"> - Constructor Injection pattern</a> + Constructor Injection pattern</a> </li> <LI> Optionally, attach dependencies and other properties through Setter Injection (v0.90) Modified: trunk/Source/StructureMap/Configuration/ConfigurationParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -133,10 +133,6 @@ parseAssemblies(builder); } - public void ParseFamilies(IGraphBuilder builder) - { - parseFamilies(builder); - } public void ParseInstances(IGraphBuilder builder) { @@ -168,14 +164,21 @@ } - private void parseFamilies(IGraphBuilder builder) + public void ParseFamilies(IGraphBuilder builder) { - FamilyParser familyParser = new FamilyParser(builder); + FamilyParser familyParser = new FamilyParser(builder, _mementoCreator); + XmlNodeList familyNodes = findNodes(XmlConstants.PLUGIN_FAMILY_NODE); foreach (XmlElement familyElement in familyNodes) { familyParser.ParseFamily(familyElement); } + + XmlNodeList defaultNodes = findNodes(XmlConstants.DEFAULT_INSTANCE); + foreach (XmlElement element in defaultNodes) + { + familyParser.ParseDefaultElement(element); + } } Modified: trunk/Source/StructureMap/Configuration/FamilyParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/FamilyParser.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/Configuration/FamilyParser.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -10,10 +10,12 @@ public class FamilyParser { private readonly IGraphBuilder _builder; + private readonly XmlMementoCreator _mementoCreator; - public FamilyParser(IGraphBuilder builder) + public FamilyParser(IGraphBuilder builder, XmlMementoCreator mementoCreator) { _builder = builder; + _mementoCreator = mementoCreator; } public void ParseFamily(XmlElement familyElement) @@ -32,6 +34,23 @@ attachInterceptors(typePath, familyElement); } + public void ParseDefaultElement(XmlElement element) + { + TypePath pluginTypePath = TypePath.GetTypePath(element.GetAttribute(XmlConstants.PLUGIN_TYPE)); + InstanceScope scope = findScope(element); + string name = element.GetAttribute(XmlConstants.NAME); + if (string.IsNullOrEmpty(name)) + { + name = "DefaultInstanceOf" + pluginTypePath.AssemblyQualifiedName; + } + + InstanceMemento memento = _mementoCreator.CreateMemento(element); + memento.InstanceKey = name; + + _builder.AddPluginFamily(pluginTypePath, name, new string[0], scope); + _builder.RegisterMemento(pluginTypePath, memento); + } + private InstanceScope findScope(XmlElement familyElement) { InstanceScope returnValue = InstanceScope.PerRequest; @@ -87,5 +106,7 @@ _builder.AddInterceptor(pluginTypePath, interceptorMemento); } } + + } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/GraphObject.cs =================================================================== --- trunk/Source/StructureMap/Configuration/GraphObject.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/Configuration/GraphObject.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -1,5 +1,4 @@ using System; -using System.Collections; using System.Collections.Generic; namespace StructureMap.Configuration Modified: trunk/Source/StructureMap/Configuration/PluginGraphReport.cs =================================================================== --- trunk/Source/StructureMap/Configuration/PluginGraphReport.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/Configuration/PluginGraphReport.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -89,7 +89,6 @@ FamilyToken[] returnValue = new FamilyToken[_families.Count]; _families.Values.CopyTo(returnValue, 0); - return returnValue; } Modified: trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs =================================================================== --- trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -1,7 +1,4 @@ - - using System.Configuration; -using System.Diagnostics; using System.Xml; namespace StructureMap.Configuration @@ -18,8 +15,8 @@ public static XmlNode GetStructureMapConfiguration() { object config = ConfigurationManager.GetSection(XmlConstants.STRUCTUREMAP); - + return null; /* object o = ConfigurationSettings.GetConfig(XmlConstants.STRUCTUREMAP); @@ -32,4 +29,4 @@ */ } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/UserControlMemento.cs =================================================================== --- trunk/Source/StructureMap/Configuration/UserControlMemento.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/Configuration/UserControlMemento.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -65,4 +65,4 @@ get { throw new NotImplementedException(); } } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/XmlConstants.cs =================================================================== --- trunk/Source/StructureMap/Configuration/XmlConstants.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/Configuration/XmlConstants.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -30,6 +30,8 @@ public const string NODE_STYLE = "Node"; public const string ATTRIBUTE_STYLE = "Attribute"; public const string PLUGGED_TYPE = "PluggedType"; + public const string PLUGIN_TYPE = "PluginType"; + public const string DEFAULT_INSTANCE = "DefaultInstance"; private XmlConstants() Modified: trunk/Source/StructureMap/Graph/PluginGraph.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginGraph.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/Graph/PluginGraph.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Reflection; -using StructureMap.Configuration; using StructureMap.Configuration.DSL; namespace StructureMap.Graph Modified: trunk/Source/StructureMap/InstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/InstanceMemento.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/InstanceMemento.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -254,7 +254,7 @@ public Plugin CreateInferredPlugin() { - string pluggedTypeName = getPropertyValue(XmlConstants.PLUGGED_TYPE); + string pluggedTypeName = getPluggedType(); if (string.IsNullOrEmpty(pluggedTypeName)) { return null; @@ -266,6 +266,11 @@ } } + protected virtual string getPluggedType() + { + return this.getPropertyValue(XmlConstants.PLUGGED_TYPE); + } + public virtual object Build(IInstanceCreator creator) { return creator.BuildInstance(this); Modified: trunk/Source/StructureMap/Source/XmlNodeInstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/Source/XmlNodeInstanceMemento.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/Source/XmlNodeInstanceMemento.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -1,4 +1,5 @@ using System.Xml; +using StructureMap.Configuration; using StructureMap.Configuration.Tokens; namespace StructureMap.Source @@ -33,6 +34,11 @@ } + protected override string getPluggedType() + { + return getAttribute(XmlConstants.PLUGGED_TYPE); + } + private XmlNode getChildNode(string Key) { string xpath = string.Format("Property[@Name='{0}']", Key); Modified: trunk/Source/StructureMap/Verification/StartUp.cs =================================================================== --- trunk/Source/StructureMap/Verification/StartUp.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap/Verification/StartUp.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -61,7 +61,7 @@ PluginGraphConsoleWriter consoleWriter = new PluginGraphConsoleWriter(report); consoleWriter.WriteAll = true; consoleWriter.WriteProblems = true; - + using (TextWriter writer = new StreamWriter(_allFile)) { consoleWriter.Write(writer); Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/UserControlExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/UserControlExpressionTester.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/UserControlExpressionTester.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -1,5 +1,4 @@ using NUnit.Framework; -using Rhino.Mocks; using StructureMap.Configuration; using StructureMap.Configuration.DSL; using StructureMap.Graph; @@ -19,9 +18,10 @@ { string theUrl = "alskdjf"; - UserControlExpression expression = new UserControlExpression(typeof(IControl), theUrl); + UserControlExpression expression = new UserControlExpression(typeof (IControl), theUrl); - UserControlMemento memento = (UserControlMemento) ((IMementoBuilder) expression).BuildMemento(new PluginGraph()); + UserControlMemento memento = + (UserControlMemento) ((IMementoBuilder) expression).BuildMemento(new PluginGraph()); Assert.IsNotNull(memento); Assert.AreEqual(theUrl, memento.Url); @@ -35,10 +35,11 @@ string theUrl = "alskdjf"; string theName = "the name"; - UserControlExpression expression = new UserControlExpression(typeof(IControl), theUrl); + UserControlExpression expression = new UserControlExpression(typeof (IControl), theUrl); expression.WithName(theName); - UserControlMemento memento = (UserControlMemento)((IMementoBuilder)expression).BuildMemento(new PluginGraph()); + UserControlMemento memento = + (UserControlMemento) ((IMementoBuilder) expression).BuildMemento(new PluginGraph()); Assert.IsNotNull(memento); Assert.AreEqual(theUrl, memento.Url); @@ -48,6 +49,5 @@ public interface IControl { - } -} +} \ No newline at end of file Added: trunk/Source/StructureMap.Testing/Configuration/DefaultInstanceNodeTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DefaultInstanceNodeTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Configuration/DefaultInstanceNodeTester.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -0,0 +1,59 @@ +using NUnit.Framework; +using Rhino.Mocks; +using StructureMap.Attributes; +using StructureMap.Graph; +using StructureMap.Testing.TestData; +using StructureMap.Testing.Widget; + +namespace StructureMap.Testing.Configuration +{ + [TestFixture] + public class DefaultInstanceNodeTester + { + private InstanceManager _manager; + private PluginGraph _graph; + + [SetUp] + public void SetUp() + { + _graph = DataMother.GetPluginGraph("DefaultInstance.xml"); + _manager = new InstanceManager(_graph); + } + + [Test] + public void CreateTheInferredPluginCorrectly() + { + // Who needs the Law of Demeter? + InstanceMemento memento = _graph.PluginFamilies[typeof (IWidget)].Source.GetAllMementos()[0]; + Assert.IsNotEmpty(memento.ConcreteKey); + Assert.IsNotNull(memento.ConcreteKey); + } + + [Test] + public void DefaultNameOfRule() + { + PluginFamily family = _graph.PluginFamilies[typeof (Rule)]; + Assert.AreEqual("TheBlueOne", family.DefaultInstanceKey); + } + + [Test] + public void GetTheWidget() + { + ColorWidget widget = (ColorWidget) _manager.CreateInstance<IWidget>(); + Assert.AreEqual("Red", widget.Color); + + ColorWidget widget2 = (ColorWidget)_manager.CreateInstance<IWidget>(); + Assert.AreNotSame(widget, widget2); + } + + [Test] + public void GetTheRule() + { + ColorRule rule = (ColorRule) _manager.CreateInstance<Rule>(); + Assert.AreEqual("Blue", rule.Color); + + ColorRule rule2 = (ColorRule)_manager.CreateInstance<Rule>(); + Assert.AreSame(rule, rule2); + } + } +} Modified: trunk/Source/StructureMap.Testing/Configuration/FamilyParserTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/FamilyParserTester.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap.Testing/Configuration/FamilyParserTester.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -6,6 +6,7 @@ using StructureMap.Configuration; using StructureMap.Graph; using StructureMap.Graph.Configuration; +using StructureMap.Source; using StructureMap.Testing.Widget3; namespace StructureMap.Testing.Configuration @@ -23,7 +24,7 @@ public void SetUp() { _builderMock = new DynamicMock(typeof (IGraphBuilder)); - _parser = new FamilyParser((IGraphBuilder) _builderMock.MockInstance); + _parser = new FamilyParser((IGraphBuilder) _builderMock.MockInstance, new XmlMementoCreator(XmlMementoStyle.NodeNormalized, XmlConstants.TYPE_ATTRIBUTE, XmlConstants.ATTRIBUTE_STYLE)); _document = new XmlDocument(); _document.LoadXml("<PluginFamily />"); Modified: trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -3,7 +3,6 @@ using System.Reflection; using NUnit.Framework; using StructureMap.Configuration; -using StructureMap.Configuration.DSL; using StructureMap.Configuration.Tokens; using StructureMap.Graph; using StructureMap.Testing.GenericWidgets; @@ -184,7 +183,7 @@ [Test] public void TryDiagnosticsWithGenerics() { - Debug.WriteLine(typeof(ISimpleThing<>).AssemblyQualifiedName); + Debug.WriteLine(typeof (ISimpleThing<>).AssemblyQualifiedName); DataMother.WriteDocument("GenericsTesting.xml"); PluginGraphReport report = PluginGraphBuilder.BuildReportFromXml("GenericsTesting.xml"); Modified: trunk/Source/StructureMap.Testing/ObjectMother.cs =================================================================== --- trunk/Source/StructureMap.Testing/ObjectMother.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap.Testing/ObjectMother.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -32,7 +32,6 @@ _instanceManager = new InstanceManager(_pluginGraph); _instanceDefaultManager = _pluginGraph.DefaultManager; - } Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-04-01 22:21:15 UTC (rev 36) @@ -181,6 +181,7 @@ </Compile> <Compile Include="Configuration\ConfigurationParserCollectionTester.cs" /> <Compile Include="Configuration\ConfigurationParserTester.cs" /> + <Compile Include="Configuration\DefaultInstanceNodeTester.cs" /> <Compile Include="Configuration\DiagnosticGraphBuilderTester.cs"> <SubType>Code</SubType> </Compile> @@ -490,6 +491,7 @@ </ItemGroup> <ItemGroup> <Content Include="Sample.xml" /> + <EmbeddedResource Include="TestData\DefaultInstance.xml" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> Modified: trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -30,7 +30,9 @@ Assert.IsNotNull(report); } - [Test, ExpectedException(typeof(ApplicationException), "StructureMap detected configuration or environmental problems. Check the StructureMap error file")] + [Test, + ExpectedException(typeof (ApplicationException), + "StructureMap detected configuration or environmental problems. Check the StructureMap error file")] public void OnStartUpFail() { StructureMapConfiguration.OnStartUp().FailOnException(); @@ -81,16 +83,14 @@ StructureMapConfiguration.UseDefaultStructureMapConfigFile = false; StructureMapConfiguration.PullConfigurationFromAppConfig = true; - ColorThing<string, bool> thing = (ColorThing<string, bool>) ObjectFactory.GetInstance < IThing<string, bool>>(); + ColorThing<string, bool> thing = + (ColorThing<string, bool>) ObjectFactory.GetInstance<IThing<string, bool>>(); Assert.AreEqual("Cornflower", thing.Color, "Cornflower is the color from the App.config file"); } - - } public interface ISomething { - } public class Something : ISomething Modified: trunk/Source/StructureMap.Testing/TestData/DataMother.cs =================================================================== --- trunk/Source/StructureMap.Testing/TestData/DataMother.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap.Testing/TestData/DataMother.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -11,8 +11,8 @@ public class DataMother { private static ArrayList _files = new ArrayList(); - + private DataMother() { } Added: trunk/Source/StructureMap.Testing/TestData/DefaultInstance.xml =================================================================== --- trunk/Source/StructureMap.Testing/TestData/DefaultInstance.xml (rev 0) +++ trunk/Source/StructureMap.Testing/TestData/DefaultInstance.xml 2007-04-01 22:21:15 UTC (rev 36) @@ -0,0 +1,4 @@ +<StructureMap MementoStyle="Attribute"> + <DefaultInstance PluginType="StructureMap.Testing.Widget.IWidget,StructureMap.Testing.Widget" PluggedType="StructureMap.Testing.Widget.ColorWidget,StructureMap.Testing.Widget" Color="Red" /> + <DefaultInstance PluginType="StructureMap.Testing.Widget.Rule,StructureMap.Testing.Widget" PluggedType="StructureMap.Testing.Widget.ColorRule,StructureMap.Testing.Widget" Color="Blue" Scope="Singleton" Name="TheBlueOne"/> +</StructureMap> Modified: trunk/Source/StructureMap.Testing.Widget/IWidget.cs =================================================================== --- trunk/Source/StructureMap.Testing.Widget/IWidget.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap.Testing.Widget/IWidget.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -47,7 +47,7 @@ public object Clone() { - return this.MemberwiseClone(); + return MemberwiseClone(); } } Modified: trunk/Source/StructureMap.Testing.Widget/Rule.cs =================================================================== --- trunk/Source/StructureMap.Testing.Widget/Rule.cs 2007-04-01 18:18:16 UTC (rev 35) +++ trunk/Source/StructureMap.Testing.Widget/Rule.cs 2007-04-01 22:21:15 UTC (rev 36) @@ -152,6 +152,4 @@ get { return _Value; } } } - - } \ 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...> - 2007-04-01 18:18:22
|
Revision: 35 http://structuremap.svn.sourceforge.net/structuremap/?rev=35&view=rev Author: jeremydmiller Date: 2007-04-01 11:18:16 -0700 (Sun, 01 Apr 2007) Log Message: ----------- Adding NDoc style comments to the DSL classes Modified Paths: -------------- trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/LiteralExpression.cs trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs trunk/Source/StructureMap/Configuration/DSL/PropertyExpression.cs trunk/Source/StructureMap/Configuration/DSL/PrototypeExpression.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/Configuration/DSL/ScanAssembliesExpression.cs trunk/Source/StructureMap/Configuration/DSL/UserControlExpression.cs trunk/Source/StructureMap/StructureMapConfiguration.cs Modified: trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -4,6 +4,10 @@ namespace StructureMap.Configuration.DSL { + /// <summary> + /// Part of the Fluent Interface, represents a nonprimitive argument to a + /// constructure function + /// </summary> public class ChildInstanceExpression : IExpression { private readonly InstanceExpression _instance; @@ -28,7 +32,11 @@ _childType = childType; } - + /// <summary> + /// Use a previously configured and named instance for the child + /// </summary> + /// <param name="instanceKey"></param> + /// <returns></returns> public InstanceExpression IsNamedInstance(string instanceKey) { MemoryInstanceMemento child = MemoryInstanceMemento.CreateReferencedInstanceMemento(instanceKey); @@ -37,6 +45,11 @@ return _instance; } + /// <summary> + /// Start the definition of a child instance by defining the concrete type + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns></returns> public InstanceExpression IsConcreteType<T>() { Type pluggedType = typeof (T); @@ -78,6 +91,12 @@ set { _childType = value; } } + /// <summary> + /// Registers a configured instance to use as the argument to the parent's + /// constructor + /// </summary> + /// <param name="child"></param> + /// <returns></returns> public InstanceExpression Is(InstanceExpression child) { if (child.PluggedType != null && _childType != null) Modified: trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -8,6 +8,9 @@ { public delegate void AlterPluginFamilyDelegate(PluginFamily family); + /// <summary> + /// Represents the parameters for creating instances of a given Type + /// </summary> public class CreatePluginFamilyExpression : IExpression { private Type _pluginType; @@ -42,6 +45,11 @@ graph.Assemblies.Add(assembly); } + /// <summary> + /// Sets the default instance of a Type to the definition represented by builder + /// </summary> + /// <param name="builder"></param> + /// <returns></returns> public CreatePluginFamilyExpression TheDefaultIs(IMementoBuilder builder) { builder.ValidatePluggability(_pluginType); @@ -57,6 +65,13 @@ return this; } + /// <summary> + /// Convenience method that sets the default concrete type of the PluginType. Type T + /// can only accept types that do not have any primitive constructor arguments. + /// StructureMap has to know how to construct all of the constructor argument types. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns></returns> public CreatePluginFamilyExpression TheDefaultIsConcreteType<T>() { ExpressionValidator.ValidatePluggabilityOf(typeof (T)).IntoPluginType(_pluginType); @@ -70,6 +85,12 @@ return this; } + /// <summary> + /// Sets the object creation of the instances of the PluginType. For example: PerRequest, + /// Singleton, ThreadLocal, HttpContext, or Hybrid + /// </summary> + /// <param name="scope"></param> + /// <returns></returns> public CreatePluginFamilyExpression CacheBy(InstanceScope scope) { _alterations.Add(delegate(PluginFamily family) @@ -81,6 +102,10 @@ return this; } + /// <summary> + /// Convenience method to mark a PluginFamily as a Singleton + /// </summary> + /// <returns></returns> public CreatePluginFamilyExpression AsSingletons() { _alterations.Add( Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -3,6 +3,9 @@ namespace StructureMap.Configuration.DSL { + /// <summary> + /// Use to express the instance of a PluginType for the containing Profile + /// </summary> public class InstanceDefaultExpression { private readonly Type _pluginType; @@ -16,6 +19,11 @@ _parent = parent; } + /// <summary> + /// Use a named, preconfigured instance as the default instance for this profile + /// </summary> + /// <param name="instanceKey"></param> + /// <returns></returns> public ProfileExpression UseNamedInstance(string instanceKey) { _instanceKey = instanceKey; @@ -46,6 +54,11 @@ } } + /// <summary> + /// Define the default instance of the PluginType for the containing Profile + /// </summary> + /// <param name="mementoBuilder"></param> + /// <returns></returns> public ProfileExpression Use(IMementoBuilder mementoBuilder) { _mementoBuilder = mementoBuilder; Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -3,6 +3,9 @@ namespace StructureMap.Configuration.DSL { + /// <summary> + /// Used to define an Instance in code + /// </summary> public class InstanceExpression : MementoBuilder<InstanceExpression> { private Type _pluggedType; @@ -53,12 +56,24 @@ } + /// <summary> + /// Start the definition of a primitive argument to a constructor argument + /// </summary> + /// <param name="propertyName"></param> + /// <returns></returns> public PropertyExpression WithProperty(string propertyName) { return new PropertyExpression(this, _memento, propertyName); } - + /// <summary> + /// Starts the definition of a child instance specifying the argument name + /// in the case of a constructor function that consumes more than one argument + /// of type T + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="propertyName"></param> + /// <returns></returns> public ChildInstanceExpression Child<T>(string propertyName) { ChildInstanceExpression child = new ChildInstanceExpression(this, _memento, propertyName); @@ -68,6 +83,11 @@ return child; } + /// <summary> + /// Start the definition of a child instance for type T + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns></returns> public ChildInstanceExpression Child<T>() { string propertyName = findPropertyName<T>(); @@ -104,7 +124,9 @@ return new InstanceTypeExpression(this); } - + /// <summary> + /// Helper class to capture the actual concrete type of an Instance + /// </summary> public class InstanceTypeExpression { private readonly InstanceExpression _parent; @@ -114,12 +136,22 @@ _parent = parent; } + /// <summary> + /// Use type T for the concrete type of an instance + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns></returns> public InstanceExpression UsingConcreteType<T>() { _parent._pluggedType = typeof (T); return _parent; } + /// <summary> + /// Use a named Plugin type denoted by a [Pluggable("Key")] attribute + /// </summary> + /// <param name="concreteKey"></param> + /// <returns></returns> public InstanceExpression UsingConcreteTypeNamed(string concreteKey) { _parent._memento.ConcreteKey = concreteKey; Modified: trunk/Source/StructureMap/Configuration/DSL/LiteralExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/LiteralExpression.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/LiteralExpression.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -3,6 +3,10 @@ namespace StructureMap.Configuration.DSL { + /// <summary> + /// Small helper class to represent an object to be plugged into a PluginType as is + /// </summary> + /// <typeparam name="T"></typeparam> public class LiteralExpression<T> : MementoBuilder<LiteralExpression<T>> { private readonly T _target; Modified: trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -3,6 +3,9 @@ namespace StructureMap.Configuration.DSL { + /// <summary> + /// Expression class to help define a runtime Profile + /// </summary> public class ProfileExpression : IExpression { private readonly string _profileName; @@ -28,6 +31,11 @@ } } + /// <summary> + /// Starts the definition of the default instance for the containing Profile + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns></returns> public InstanceDefaultExpression For<T>() { InstanceDefaultExpression defaultExpression = new InstanceDefaultExpression(typeof (T), this); Modified: trunk/Source/StructureMap/Configuration/DSL/PropertyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/PropertyExpression.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/PropertyExpression.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -2,6 +2,9 @@ namespace StructureMap.Configuration.DSL { + /// <summary> + /// Defines the value of a primitive argument to a constructur argument + /// </summary> public class PropertyExpression { private readonly InstanceExpression _instance; @@ -15,12 +18,23 @@ _propertyName = propertyName; } + /// <summary> + /// Sets the value of the constructor argument + /// </summary> + /// <param name="propertyValue"></param> + /// <returns></returns> public InstanceExpression EqualTo(object propertyValue) { _memento.SetProperty(_propertyName, propertyValue.ToString()); return _instance; } + /// <summary> + /// Sets the value of the constructor argument to the key/value in the + /// AppSettings + /// </summary> + /// <param name="appSettingKey"></param> + /// <returns></returns> public InstanceExpression EqualToAppSetting(string appSettingKey) { string propertyValue = ConfigurationManager.AppSettings[appSettingKey]; Modified: trunk/Source/StructureMap/Configuration/DSL/PrototypeExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/PrototypeExpression.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/PrototypeExpression.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -3,6 +3,10 @@ namespace StructureMap.Configuration.DSL { + /// <summary> + /// Sets up a Prototype instance of type T + /// </summary> + /// <typeparam name="T"></typeparam> public class PrototypeExpression<T> : MementoBuilder<PrototypeExpression<T>> { private readonly T _prototype; Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -48,7 +48,12 @@ ConfigurePluginGraph(_graph); } - + /// <summary> + /// Direct StructureMap to build instances of type T, and look for concrete classes + /// marked with the [Pluggable] attribute that implement type T + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns></returns> public CreatePluginFamilyExpression BuildInstancesOf<T>() { CreatePluginFamilyExpression expression = new CreatePluginFamilyExpression(typeof (T)); @@ -64,6 +69,11 @@ return new InstanceManager(_graph); } + /// <summary> + /// Starts an instance definition of type T + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns></returns> public InstanceExpression.InstanceTypeExpression AddInstanceOf<T>() { InstanceExpression expression = new InstanceExpression(typeof (T)); @@ -71,22 +81,45 @@ return expression.TypeExpression(); } + /// <summary> + /// Convenience method to start the definition of an instance of type T + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns></returns> public static InstanceExpression.InstanceTypeExpression Instance<T>() { InstanceExpression expression = new InstanceExpression(typeof (T)); return expression.TypeExpression(); } + /// <summary> + /// Convenience method to register a prototype instance + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="prototype"></param> + /// <returns></returns> public static PrototypeExpression<T> Prototype<T>(T prototype) { return new PrototypeExpression<T>(prototype); } + /// <summary> + /// Convenience method to register a preconfigured instance of type T + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="instance"></param> + /// <returns></returns> public static LiteralExpression<T> Object<T>(T instance) { return new LiteralExpression<T>(instance); } + /// <summary> + /// Registers a preconfigured instance + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="target"></param> + /// <returns></returns> public LiteralExpression<T> AddInstanceOf<T>(T target) { LiteralExpression<T> literal = new LiteralExpression<T>(target); @@ -95,6 +128,12 @@ return literal; } + /// <summary> + /// Add a preconfigured instance as a Prototype + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="prototype"></param> + /// <returns></returns> public PrototypeExpression<T> AddPrototypeInstanceOf<T>(T prototype) { PrototypeExpression<T> expression = new PrototypeExpression<T>(prototype); @@ -103,11 +142,22 @@ return expression; } + /// <summary> + /// convenience method for a UserControl + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="url"></param> + /// <returns></returns> public static UserControlExpression LoadUserControlFrom<T>(string url) { - return new UserControlExpression(typeof(T), url); + return new UserControlExpression(typeof (T), url); } + /// <summary> + /// Starts the definition of a new Profile + /// </summary> + /// <param name="profileName"></param> + /// <returns></returns> public ProfileExpression CreateProfile(string profileName) { ProfileExpression expression = new ProfileExpression(profileName); @@ -131,9 +181,15 @@ return (type.GetConstructor(new Type[0]) != null); } + /// <summary> + /// Registers a UserControl as an instance + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="url"></param> + /// <returns></returns> public UserControlExpression LoadControlFromUrl<T>(string url) { - UserControlExpression expression = new UserControlExpression(typeof(T), url); + UserControlExpression expression = new UserControlExpression(typeof (T), url); addExpression(expression); return expression; Modified: trunk/Source/StructureMap/Configuration/DSL/ScanAssembliesExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ScanAssembliesExpression.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/ScanAssembliesExpression.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -6,6 +6,10 @@ namespace StructureMap.Configuration.DSL { + /// <summary> + /// Expression that directs StructureMap to scan the named assemblies + /// for [PluginFamily] and [Plugin] attributes + /// </summary> public class ScanAssembliesExpression : IExpression { private List<AssemblyGraph> _assemblies = new List<AssemblyGraph>(); Modified: trunk/Source/StructureMap/Configuration/DSL/UserControlExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/UserControlExpression.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/Configuration/DSL/UserControlExpression.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Text; using StructureMap.Graph; namespace StructureMap.Configuration.DSL @@ -44,4 +42,4 @@ // no-op } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-03-30 14:26:24 UTC (rev 34) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-04-01 18:18:16 UTC (rev 35) @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Configuration; using System.IO; using System.Xml; using StructureMap.Configuration; @@ -48,7 +47,10 @@ return configPath; } - + /// <summary> + /// Clears StructureMapConfiguration of all configuration options. Returns StructureMap + /// to only using the default StructureMap.config file for configuration. + /// </summary> public static void ResetAll() { _collection = new ConfigurationParserCollection(); @@ -58,6 +60,10 @@ _startUp = null; } + /// <summary> + /// Builds a PluginGraph object for the current configuration. Used by ObjectFactory. + /// </summary> + /// <returns></returns> public static PluginGraph GetPluginGraph() { if (_startUp != null) @@ -73,33 +79,48 @@ { if (_pullConfigurationFromAppConfig) { - _collection.IncludeNode(delegate() - { - - return StructureMapConfigurationSection.GetStructureMapConfiguration(); - }); + _collection.IncludeNode( + delegate() { return StructureMapConfigurationSection.GetStructureMapConfiguration(); }); } ConfigurationParser[] parsers = _collection.GetParsers(); return new PluginGraphBuilder(parsers, _registries.ToArray()); } + /// <summary> + /// Creates a PluginGraphReport that details the current configuration along with any problems found with the configuration. + /// The PluginGraphReport can be used to troubleshoot problems with the StructureMap configuration. + /// </summary> + /// <returns></returns> public static PluginGraphReport GetDiagnosticReport() { PluginGraphBuilder builder = createBuilder(); return builder.Report; } + /// <summary> + /// Directs StructureMap to include Xml configuration information from a separate file + /// </summary> + /// <param name="filename"></param> public static void IncludeConfigurationFromFile(string filename) { _collection.IncludeFile(filename); } + /// <summary> + /// Register a FetchNodeDelegate delegate to retrieve a <StructureMap> + /// node to include Xml configuration + /// </summary> + /// <param name="fetcher"></param> public static void IncludeConfigurationFrom(FetchNodeDelegate fetcher) { _collection.IncludeNode(fetcher); } + /// <summary> + /// Programmatically adds a <StructureMap> node containing Xml configuration + /// </summary> + /// <param name="node"></param> public static void IncludeConfigurationFromNode(XmlNode node) { _collection.IncludeNode( @@ -107,6 +128,10 @@ ); } + /// <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 _collection.UseDefaultFile; } @@ -124,6 +149,10 @@ } } + /// <summary> + /// Programmatically determine Assembly's to be scanned for attribute configuration + /// </summary> + /// <returns></returns> public static ScanAssembliesExpression ScanAssemblies() { ScanAssembliesExpression expression = new ScanAssembliesExpression(); @@ -132,51 +161,77 @@ return expression; } + /// <summary> + /// Direct StructureMap to create instances of Type T + /// </summary> + /// <typeparam name="T">The Type to build</typeparam> + /// <returns></returns> public static CreatePluginFamilyExpression BuildInstancesOf<T>() { return _registry.BuildInstancesOf<T>(); } + /// <summary> + /// Adds a new configured instance of Type T + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns></returns> public static InstanceExpression.InstanceTypeExpression AddInstanceOf<T>() { return _registry.AddInstanceOf<T>(); } - public static InstanceExpression.InstanceTypeExpression Instance<T>() - { - return Registry.Instance<T>(); - } - public static PrototypeExpression<T> Prototype<T>(T prototype) - { - return new PrototypeExpression<T>(prototype); - } - - public static LiteralExpression<T> Object<T>(T instance) - { - return new LiteralExpression<T>(instance); - } - + /// <summary> + /// Adds a preconfigured instance of Type T to StructureMap. When this instance is requested, + /// StructureMap will always return the original object. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="target"></param> + /// <returns></returns> public static LiteralExpression<T> AddInstanceOf<T>(T target) { return _registry.AddInstanceOf(target); } + /// <summary> + /// Adds a Prototype (GoF) instance of Type T. The actual prototype object must implement the + /// ICloneable interface. When this instance of T is requested, StructureMap will + /// return a cloned copy of the originally registered prototype object. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="prototype"></param> + /// <returns></returns> public static PrototypeExpression<T> AddPrototypeInstanceOf<T>(T prototype) { return _registry.AddPrototypeInstanceOf(prototype); } + /// <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) { _registries.Add(registry); } + /// <summary> + /// Controls the reporting and diagnostics of StructureMap on + /// startup + /// </summary> + /// <returns></returns> public static IStartUp OnStartUp() { if (_startUp == null) @@ -186,5 +241,26 @@ return _startUp; } + + public static void TheDefaultProfileIs(string profileName) + { + DefaultProfileExpression expression = new DefaultProfileExpression(profileName); + _registry.addExpression(expression); + } + + internal class DefaultProfileExpression : IExpression + { + private readonly string _profileName; + + public DefaultProfileExpression(string profileName) + { + _profileName = profileName; + } + + public void Configure(PluginGraph graph) + { + graph.DefaultManager.DefaultProfileName = _profileName; + } + } } } \ 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...> - 2007-03-30 14:26:25
|
Revision: 34 http://structuremap.svn.sourceforge.net/structuremap/?rev=34&view=rev Author: jeremydmiller Date: 2007-03-30 07:26:24 -0700 (Fri, 30 Mar 2007) Log Message: ----------- last set of changes for the configuration, UserControl support Modified Paths: -------------- trunk/Source/CommonAssemblyInfo.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/StructureMap.csproj trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap/Verification/PluginGraphConsoleWriter.cs trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj trunk/Source/StructureMap.Testing/StructureMap.Testing.dll.config trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs trunk/cruise.build Added Paths: ----------- trunk/Source/StructureMap/Configuration/DSL/UserControlExpression.cs trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs trunk/Source/StructureMap/Configuration/UserControlMemento.cs trunk/Source/StructureMap.Testing/Configuration/DSL/UserControlExpressionTester.cs Modified: trunk/Source/CommonAssemblyInfo.cs =================================================================== --- trunk/Source/CommonAssemblyInfo.cs 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/CommonAssemblyInfo.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -14,7 +14,7 @@ [assembly: ComVisibleAttribute(false)] [assembly: AssemblyVersionAttribute("1.0.0.0000")] -[assembly: AssemblyCopyrightAttribute("Copyright (c) 2005, Jeremy D. Miller, Jeffrey Palermo")] +[assembly: AssemblyCopyrightAttribute("Copyright (c) 2007, Jeremy D. Miller")] [assembly: AssemblyProductAttribute("StructureMap")] [assembly: AssemblyCompanyAttribute("")] [assembly: AssemblyConfigurationAttribute("release")] Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -103,6 +103,11 @@ return expression; } + public static UserControlExpression LoadUserControlFrom<T>(string url) + { + return new UserControlExpression(typeof(T), url); + } + public ProfileExpression CreateProfile(string profileName) { ProfileExpression expression = new ProfileExpression(profileName); @@ -125,5 +130,13 @@ return (type.GetConstructor(new Type[0]) != null); } + + public UserControlExpression LoadControlFromUrl<T>(string url) + { + UserControlExpression expression = new UserControlExpression(typeof(T), url); + addExpression(expression); + + return expression; + } } } \ No newline at end of file Added: trunk/Source/StructureMap/Configuration/DSL/UserControlExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/UserControlExpression.cs (rev 0) +++ trunk/Source/StructureMap/Configuration/DSL/UserControlExpression.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Text; +using StructureMap.Graph; + +namespace StructureMap.Configuration.DSL +{ + public class UserControlExpression : MementoBuilder<UserControlExpression> + { + private UserControlMemento _memento; + + public UserControlExpression(Type pluginType, string url) : base(pluginType) + { + _memento.Url = url; + } + + protected override InstanceMemento memento + { + get { return _memento; } + } + + protected override UserControlExpression thisInstance + { + get { return this; } + } + + protected override void configureMemento(PluginFamily family) + { + // no-op + } + + protected override void validate() + { + // no-op + } + + protected override void buildMemento() + { + _memento = new UserControlMemento(); + } + + public override void ValidatePluggability(Type pluginType) + { + // no-op + } + } +} Added: trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs =================================================================== --- trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs (rev 0) +++ trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -0,0 +1,35 @@ + + +using System.Configuration; +using System.Diagnostics; +using System.Xml; + +namespace StructureMap.Configuration +{ + public class StructureMapConfigurationSection : IConfigurationSectionHandler + { + private XmlNode _node; + + public object Create(object parent, object configContext, XmlNode section) + { + return _node; + } + + public static XmlNode GetStructureMapConfiguration() + { + object config = ConfigurationManager.GetSection(XmlConstants.STRUCTUREMAP); + + + return null; + /* + object o = ConfigurationSettings.GetConfig(XmlConstants.STRUCTUREMAP); + XmlNode node = o as XmlNode; + if (node == null) + { + throw new ApplicationException("No <StructureMap> section was found in the application config file"); + } + return node; + */ + } + } +} Added: trunk/Source/StructureMap/Configuration/UserControlMemento.cs =================================================================== --- trunk/Source/StructureMap/Configuration/UserControlMemento.cs (rev 0) +++ trunk/Source/StructureMap/Configuration/UserControlMemento.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -0,0 +1,68 @@ +using System; +using System.Web.UI; + +namespace StructureMap.Configuration +{ + public class UserControlMemento : InstanceMemento + { + private string _instanceKey; + private string _url; + + public UserControlMemento(string instanceKey, string url) + { + _instanceKey = instanceKey; + _url = url; + } + + + public UserControlMemento() + { + } + + public string Url + { + get { return _url; } + set { _url = value; } + } + + public override object Build(IInstanceCreator creator) + { + return new Page().LoadControl(_url); + } + + protected override string innerConcreteKey + { + get { return string.Empty; } + } + + protected override string innerInstanceKey + { + get { return _instanceKey; } + } + + protected override string getPropertyValue(string Key) + { + throw new NotImplementedException(); + } + + protected override InstanceMemento getChild(string Key) + { + throw new NotImplementedException(); + } + + public override InstanceMemento[] GetChildrenArray(string Key) + { + throw new NotImplementedException(); + } + + public override bool IsReference + { + get { return false; } + } + + public override string ReferenceKey + { + get { throw new NotImplementedException(); } + } + } +} Modified: trunk/Source/StructureMap/StructureMap.csproj =================================================================== --- trunk/Source/StructureMap/StructureMap.csproj 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/StructureMap/StructureMap.csproj 2007-03-30 14:26:24 UTC (rev 34) @@ -229,6 +229,7 @@ <Compile Include="Configuration\DSL\PrototypeMemento.cs" /> <Compile Include="Configuration\DSL\Registry.cs" /> <Compile Include="Configuration\DSL\ScanAssembliesExpression.cs" /> + <Compile Include="Configuration\DSL\UserControlExpression.cs" /> <Compile Include="Configuration\FamilyParser.cs"> <SubType>Code</SubType> </Compile> @@ -263,6 +264,7 @@ <SubType>Code</SubType> </Compile> <Compile Include="Configuration\ProfileAndMachineParser.cs" /> + <Compile Include="Configuration\StructureMapConfigurationSection.cs" /> <Compile Include="Configuration\Tokens\AssemblyToken.cs"> <SubType>Code</SubType> </Compile> @@ -329,6 +331,7 @@ <Compile Include="Configuration\Tokens\TemplateToken.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="Configuration\UserControlMemento.cs" /> <Compile Include="Configuration\XmlConstants.cs"> <SubType>Code</SubType> </Compile> Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Configuration; using System.IO; using System.Xml; using StructureMap.Configuration; @@ -16,6 +17,7 @@ private static Registry _registry = new Registry(); private static List<Registry> _registries = new List<Registry>(); private static StartUp _startUp; + private static bool _pullConfigurationFromAppConfig; static StructureMapConfiguration() { @@ -69,6 +71,15 @@ private static PluginGraphBuilder createBuilder() { + if (_pullConfigurationFromAppConfig) + { + _collection.IncludeNode(delegate() + { + + return StructureMapConfigurationSection.GetStructureMapConfiguration(); + }); + } + ConfigurationParser[] parsers = _collection.GetParsers(); return new PluginGraphBuilder(parsers, _registries.ToArray()); } @@ -102,6 +113,17 @@ set { _collection.UseDefaultFile = value; } } + [Obsolete("Not ready yet")] + public static bool PullConfigurationFromAppConfig + { + get { return _pullConfigurationFromAppConfig; } + set + { + throw new NotImplementedException("This feature has not been completed"); + _pullConfigurationFromAppConfig = value; + } + } + public static ScanAssembliesExpression ScanAssemblies() { ScanAssembliesExpression expression = new ScanAssembliesExpression(); Modified: trunk/Source/StructureMap/Verification/PluginGraphConsoleWriter.cs =================================================================== --- trunk/Source/StructureMap/Verification/PluginGraphConsoleWriter.cs 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/StructureMap/Verification/PluginGraphConsoleWriter.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -140,6 +140,7 @@ { _writer.WriteLine(problem.Path); _writer.WriteLine(problem.ToString()); + writeSeparator(); } } Modified: trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -15,6 +15,7 @@ StructureMapConfiguration.ResetAll(); DataMother.WriteDocument("Config1.xml"); DataMother.WriteDocument("Config2.xml"); + DataMother.WriteDocument("FullTesting.XML"); } [TearDown] Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -142,7 +142,7 @@ Assert.AreEqual("Purple", widget.Color); } - [Test] + [Test, Explicit] public void CreateAnInstancePullAPropertyFromTheApplicationConfig() { Assert.AreEqual("Blue", ConfigurationManager.AppSettings["Color"]); Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -1,6 +1,7 @@ using System; using NUnit.Framework; using Rhino.Mocks; +using StructureMap.Configuration; using StructureMap.Configuration.DSL; using StructureMap.Graph; using StructureMap.Testing.Widget3; @@ -64,6 +65,26 @@ mocks.VerifyAll(); } + + [Test] + public void LoadControl() + { + PluginGraph graph = new PluginGraph(); + Registry registry = new Registry(graph); + + string theUrl = "some url"; + string theKey = "the memento"; + registry.LoadControlFromUrl<IGateway>(theUrl).WithName(theKey); + + registry.Dispose(); + + PluginFamily family = graph.PluginFamilies[typeof (IGateway)]; + UserControlMemento memento = (UserControlMemento) family.Source.GetMemento(theKey); + Assert.IsNotNull(memento); + + Assert.AreEqual(theUrl, memento.Url); + Assert.AreEqual(theKey, memento.InstanceKey); + } } public class TestRegistry : Registry Added: trunk/Source/StructureMap.Testing/Configuration/DSL/UserControlExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/UserControlExpressionTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/UserControlExpressionTester.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -0,0 +1,53 @@ +using NUnit.Framework; +using Rhino.Mocks; +using StructureMap.Configuration; +using StructureMap.Configuration.DSL; +using StructureMap.Graph; + +namespace StructureMap.Testing.Configuration.DSL +{ + [TestFixture] + public class UserControlExpressionTester + { + [SetUp] + public void SetUp() + { + } + + [Test] + public void CreateMementoHappyPath() + { + string theUrl = "alskdjf"; + + UserControlExpression expression = new UserControlExpression(typeof(IControl), theUrl); + + UserControlMemento memento = (UserControlMemento) ((IMementoBuilder) expression).BuildMemento(new PluginGraph()); + Assert.IsNotNull(memento); + + Assert.AreEqual(theUrl, memento.Url); + Assert.IsNotEmpty(memento.InstanceKey); + Assert.IsNotNull(memento.InstanceKey); + } + + [Test] + public void CreateMementoHappyPathWithName() + { + string theUrl = "alskdjf"; + string theName = "the name"; + + UserControlExpression expression = new UserControlExpression(typeof(IControl), theUrl); + expression.WithName(theName); + + UserControlMemento memento = (UserControlMemento)((IMementoBuilder)expression).BuildMemento(new PluginGraph()); + Assert.IsNotNull(memento); + + Assert.AreEqual(theUrl, memento.Url); + Assert.AreEqual(theName, memento.InstanceKey); + } + } + + public interface IControl + { + + } +} Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-03-30 14:26:24 UTC (rev 34) @@ -195,6 +195,7 @@ <Compile Include="Configuration\DSL\RegistryIntegratedTester.cs" /> <Compile Include="Configuration\DSL\RegistryTester.cs" /> <Compile Include="Configuration\DSL\ScanAssembliesTester.cs" /> + <Compile Include="Configuration\DSL\UserControlExpressionTester.cs" /> <Compile Include="Configuration\FamilyParserTester.cs"> <SubType>Code</SubType> </Compile> Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.dll.config =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.dll.config 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.dll.config 2007-03-30 14:26:24 UTC (rev 34) @@ -1,7 +1,37 @@ <?xml version="1.0" encoding="utf-8" ?> <configuration> + <configSections> + <section name="StructureMap" type="StructureMap.Configuration.StructureMapConfigurationSection,StructureMap"/> + </configSections> + + <StructureMap> + <Assembly Name="StructureMap.Testing.GenericWidgets"/> + + <PluginFamily Assembly="StructureMap.Testing.GenericWidgets" Type="StructureMap.Testing.GenericWidgets.IThing`2" DefaultKey="Cornflower"> + <Plugin Assembly="StructureMap.Testing.GenericWidgets" Type="StructureMap.Testing.GenericWidgets.ColorThing`2" ConcreteKey="Color" /> + <Plugin Assembly="StructureMap.Testing.GenericWidgets" Type="StructureMap.Testing.GenericWidgets.ComplexThing`2" ConcreteKey="Complex" /> + + <Instance Key="Cornflower" Type="Color"> + <Property Name="color" Value="Cornflower"/> + </Instance> + + <Instance Key="Complicated" Type="Complex"> + <Property Name="name" Value="Jeremy" /> + <Property Name="age" Value="32" /> + <Property Name="ready" Value="true" /> + </Instance> + </PluginFamily> + + <PluginFamily Assembly="StructureMap.Testing.GenericWidgets" Type="StructureMap.Testing.GenericWidgets.ISimpleThing`1" DefaultKey="Simple"> + <Plugin Assembly="StructureMap.Testing.GenericWidgets" Type="StructureMap.Testing.GenericWidgets.SimpleThing`1" ConcreteKey="Simple" /> + </PluginFamily> + </StructureMap> + + <appSettings> <add key="Color" value="Blue"/> <add key="Day" value="Monday"/> </appSettings> + + </configuration> \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-03-30 14:26:24 UTC (rev 34) @@ -3,6 +3,7 @@ using NUnit.Framework; using StructureMap.Configuration; using StructureMap.Graph; +using StructureMap.Testing.GenericWidgets; namespace StructureMap.Testing { @@ -72,6 +73,19 @@ Assert.IsTrue(File.Exists(filePath)); } + + + [Test, Ignore("Not complete")] + public void PullConfigurationFromTheAppConfig() + { + StructureMapConfiguration.UseDefaultStructureMapConfigFile = false; + StructureMapConfiguration.PullConfigurationFromAppConfig = true; + + ColorThing<string, bool> thing = (ColorThing<string, bool>) ObjectFactory.GetInstance < IThing<string, bool>>(); + Assert.AreEqual("Cornflower", thing.Color, "Cornflower is the color from the App.config file"); + } + + } public interface ISomething Modified: trunk/cruise.build =================================================================== --- trunk/cruise.build 2007-03-29 18:31:00 UTC (rev 33) +++ trunk/cruise.build 2007-03-30 14:26:24 UTC (rev 34) @@ -48,7 +48,7 @@ <attributes> <attribute type="ComVisibleAttribute" value="false" /> <attribute type="AssemblyVersionAttribute" value="${assembly-version}" /> - <attribute type="AssemblyCopyrightAttribute" value="Copyright (c) 2005, Jeremy D. Miller, Jeffrey Palermo" /> + <attribute type="AssemblyCopyrightAttribute" value="Copyright (c) 2007, Jeremy D. Miller" /> <attribute type="AssemblyProductAttribute" value="StructureMap" /> <attribute type="AssemblyCompanyAttribute" value="" /> <attribute type="AssemblyConfigurationAttribute" value="${project.config}" /> @@ -118,14 +118,16 @@ </target> <target name="unit-test"> - <nunit2 failonerror="true"> - <formatter type="Xml" outputdir="${results.dir}" usefile="true" extension=".xml"/> - <formatter type="Plain" /> - - <test assemblyname="${build.dir}\StructureMap.Testing.dll" appconfig="${nant.location}nant.tests.config" /> - <test assemblyname="${build.dir}\StructureMap.Testing.DeploymentTasks.dll" appconfig="${nant.location}nant.tests.config" /> - </nunit2> + <property name="nunit-console.exe" value="bin\NUnit\nunit-console.exe" /> + <exec program="${nunit-console.exe}" workingdir="${build.dir}"> + <arg value="StructureMap.Testing.dll" /> + </exec> +<!-- + <exec program="${nunit-console.exe}" workingdir="${build.dir}"> + <arg value="StructureMap.Testing.DeploymentTasks.dll" /> + </exec> +--> </target> <target name="runDoctor"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2007-03-29 18:31:03
|
Revision: 33 http://structuremap.svn.sourceforge.net/structuremap/?rev=33&view=rev Author: jeremydmiller Date: 2007-03-29 11:31:00 -0700 (Thu, 29 Mar 2007) Log Message: ----------- adding diagnostics to StructureMapConfiguration Modified Paths: -------------- trunk/Source/StructureMap/StructureMap.csproj trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs Added Paths: ----------- trunk/Source/StructureMap/Verification/IStartUp.cs trunk/Source/StructureMap/Verification/StartUp.cs Modified: trunk/Source/StructureMap/StructureMap.csproj =================================================================== --- trunk/Source/StructureMap/StructureMap.csproj 2007-03-29 15:58:10 UTC (rev 32) +++ trunk/Source/StructureMap/StructureMap.csproj 2007-03-29 18:31:00 UTC (rev 33) @@ -556,9 +556,11 @@ <Compile Include="StubbedInstanceFactory.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="Verification\IStartUp.cs" /> <Compile Include="Verification\PluginGraphConsoleWriter.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="Verification\StartUp.cs" /> <Compile Include="XmlMapping\ConfigEditor.cs"> <SubType>Code</SubType> </Compile> Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-03-29 15:58:10 UTC (rev 32) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-03-29 18:31:00 UTC (rev 33) @@ -5,6 +5,7 @@ using StructureMap.Configuration; using StructureMap.Configuration.DSL; using StructureMap.Graph; +using StructureMap.Verification; namespace StructureMap { @@ -14,6 +15,7 @@ private static ConfigurationParserCollection _collection = new ConfigurationParserCollection(); private static Registry _registry = new Registry(); private static List<Registry> _registries = new List<Registry>(); + private static StartUp _startUp; static StructureMapConfiguration() { @@ -51,10 +53,16 @@ _registry = new Registry(); _registries = new List<Registry>(); _registries.Add(_registry); + _startUp = null; } public static PluginGraph GetPluginGraph() { + if (_startUp != null) + { + _startUp.RunDiagnostics(); + } + PluginGraphBuilder builder = createBuilder(); return builder.Build(); } @@ -65,10 +73,10 @@ return new PluginGraphBuilder(parsers, _registries.ToArray()); } - public static PluginGraph GetDiagnosticPluginGraph() + public static PluginGraphReport GetDiagnosticReport() { PluginGraphBuilder builder = createBuilder(); - return builder.BuildDiagnosticPluginGraph(); + return builder.Report; } public static void IncludeConfigurationFromFile(string filename) @@ -146,5 +154,15 @@ { _registries.Add(registry); } + + public static IStartUp OnStartUp() + { + if (_startUp == null) + { + _startUp = new StartUp(); + } + + return _startUp; + } } } \ No newline at end of file Added: trunk/Source/StructureMap/Verification/IStartUp.cs =================================================================== --- trunk/Source/StructureMap/Verification/IStartUp.cs (rev 0) +++ trunk/Source/StructureMap/Verification/IStartUp.cs 2007-03-29 18:31:00 UTC (rev 33) @@ -0,0 +1,9 @@ +namespace StructureMap.Verification +{ + public interface IStartUp + { + IStartUp WriteProblemsTo(string fileName); + IStartUp FailOnException(); + IStartUp WriteAllTo(string fileName); + } +} \ No newline at end of file Added: trunk/Source/StructureMap/Verification/StartUp.cs =================================================================== --- trunk/Source/StructureMap/Verification/StartUp.cs (rev 0) +++ trunk/Source/StructureMap/Verification/StartUp.cs 2007-03-29 18:31:00 UTC (rev 33) @@ -0,0 +1,85 @@ +using System; +using System.IO; +using StructureMap.Configuration; + +namespace StructureMap.Verification +{ + public class StartUp : IStartUp + { + private string _problemFile = "StructureMap.error"; + private bool _fail = false; + private string _allFile; + + public IStartUp WriteProblemsTo(string fileName) + { + _problemFile = fileName; + return this; + } + + public IStartUp FailOnException() + { + _fail = true; + return this; + } + + public IStartUp WriteAllTo(string fileName) + { + _allFile = fileName; + return this; + } + + public void RunDiagnostics() + { + PluginGraphReport report = StructureMapConfiguration.GetDiagnosticReport(); + + writeProblems(report); + + writeAll(report); + + fail(report); + } + + private void fail(PluginGraphReport report) + { + if (_fail) + { + ProblemFinder finder = new ProblemFinder(report); + Problem[] problems = finder.GetProblems(); + + if (problems.Length > 0) + { + throw new ApplicationException( + "StructureMap detected configuration or environmental problems. Check the StructureMap error file"); + } + } + } + + private void writeAll(PluginGraphReport report) + { + if (!string.IsNullOrEmpty(_allFile)) + { + PluginGraphConsoleWriter consoleWriter = new PluginGraphConsoleWriter(report); + consoleWriter.WriteAll = true; + consoleWriter.WriteProblems = true; + + using (TextWriter writer = new StreamWriter(_allFile)) + { + consoleWriter.Write(writer); + } + } + } + + private void writeProblems(PluginGraphReport report) + { + using (TextWriter writer = new StreamWriter(_problemFile)) + { + PluginGraphConsoleWriter consoleWriter = new PluginGraphConsoleWriter(report); + consoleWriter.IncludeAllInstances = false; + consoleWriter.IncludePlugins = false; + consoleWriter.IncludeSource = false; + consoleWriter.WriteProblems = true; + consoleWriter.Write(writer); + } + } + } +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-03-29 15:58:10 UTC (rev 32) +++ trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-03-29 18:31:00 UTC (rev 33) @@ -1,4 +1,7 @@ +using System; +using System.IO; using NUnit.Framework; +using StructureMap.Configuration; using StructureMap.Graph; namespace StructureMap.Testing @@ -20,10 +23,67 @@ } [Test] - public void BuildDiagnosticPluginGraph() + public void BuildReport() { - PluginGraph graph = StructureMapConfiguration.GetDiagnosticPluginGraph(); - Assert.IsNotNull(graph); + PluginGraphReport report = StructureMapConfiguration.GetDiagnosticReport(); + Assert.IsNotNull(report); } + + [Test, ExpectedException(typeof(ApplicationException), "StructureMap detected configuration or environmental problems. Check the StructureMap error file")] + public void OnStartUpFail() + { + StructureMapConfiguration.OnStartUp().FailOnException(); + StructureMapConfiguration.AddInstanceOf<ISomething>().UsingConcreteType<Something>(); + + StructureMapConfiguration.GetPluginGraph(); + } + + [Test] + public void WriteAllFile() + { + string filePath = "all.txt"; + if (File.Exists(filePath)) + { + File.Delete(filePath); + } + + StructureMapConfiguration.OnStartUp().WriteAllTo(filePath); + StructureMapConfiguration.AddInstanceOf<ISomething>().UsingConcreteType<Something>(); + + StructureMapConfiguration.GetPluginGraph(); + + Assert.IsTrue(File.Exists(filePath)); + } + + + [Test] + public void WriteProblems() + { + string filePath = "problems.txt"; + if (File.Exists(filePath)) + { + File.Delete(filePath); + } + + StructureMapConfiguration.OnStartUp().WriteProblemsTo(filePath); + StructureMapConfiguration.AddInstanceOf<ISomething>().UsingConcreteType<Something>(); + + StructureMapConfiguration.GetPluginGraph(); + + Assert.IsTrue(File.Exists(filePath)); + } } + + public interface ISomething + { + + } + + public class Something : ISomething + { + public Something() + { + throw new ApplicationException("You can't make me!"); + } + } } \ 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...> - 2007-03-29 15:58:27
|
Revision: 32 http://structuremap.svn.sourceforge.net/structuremap/?rev=32&view=rev Author: jeremydmiller Date: 2007-03-29 08:58:10 -0700 (Thu, 29 Mar 2007) Log Message: ----------- making diagnostics work with generic types Modified Paths: -------------- trunk/Source/StructureMap/Configuration/ConfigurationConstants.cs trunk/Source/StructureMap/Configuration/ConfigurationParser.cs trunk/Source/StructureMap/Configuration/ConfigurationParserCollection.cs trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/Configuration/DiagnosticGraphBuilder.cs trunk/Source/StructureMap/Configuration/GraphObject.cs trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs trunk/Source/StructureMap/Configuration/PluginGraphReport.cs trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs trunk/Source/StructureMap/Configuration/Tokens/FamilyToken.cs trunk/Source/StructureMap/Configuration/Tokens/InstanceToken.cs trunk/Source/StructureMap/Graph/AssemblyGraph.cs trunk/Source/StructureMap/Graph/PluginGraph.cs trunk/Source/StructureMap/Graph/TypePath.cs trunk/Source/StructureMap/IInstanceCreator.cs trunk/Source/StructureMap/IInstanceManager.cs trunk/Source/StructureMap/InstanceManager.cs trunk/Source/StructureMap/InstanceMemento.cs trunk/Source/StructureMap/Interceptors/HttpContextItemInterceptor.cs trunk/Source/StructureMap/MemoryInstanceMemento.cs trunk/Source/StructureMap/ObjectFactory.cs trunk/Source/StructureMap/PluginGraphBuilder.cs trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserCollectionTester.cs trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/CreateProfileTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/LiteralExpressionTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs trunk/Source/StructureMap.Testing/Container/InstanceManagerTester.cs trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs trunk/Source/StructureMap.Testing/Graph/PluginGraphTester.cs trunk/Source/StructureMap.Testing/Graph/PluginTester.cs trunk/Source/StructureMap.Testing/ImplicitPluginFromPluggedTypeAttributeTester.cs trunk/Source/StructureMap.Testing/ObjectMother.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj trunk/Source/StructureMap.Testing/StructureMapConfigCreator.cs trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs trunk/Source/StructureMap.Testing/TestData/DataMother.cs trunk/Source/StructureMap.Testing/TestData/GenericsTesting.xml trunk/Source/StructureMap.Testing.GenericWidgets/Widgets.cs trunk/Source/StructureMap.Testing.Widget5/StructureMap.Testing.Widget5.csproj trunk/Source/StructureMap.Testing.Widget5/WidgetRegistry.cs Modified: trunk/Source/StructureMap/Configuration/ConfigurationConstants.cs =================================================================== --- trunk/Source/StructureMap/Configuration/ConfigurationConstants.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/ConfigurationConstants.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -42,5 +42,6 @@ "A fatal error in configuration is preventing StructureMap from functioning correctly"; public const string MISSING_TEMPLATE_VALUE = "A required value for a Templated InstanceMemento is missing"; + public const string UNKNOWN_PLUGIN_PROBLEM = "Exception occured while attaching a Plugin to a PluginFamily"; } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/ConfigurationParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -218,7 +218,5 @@ ProfileAndMachineParser parser = new ProfileAndMachineParser(builder, _structureMapNode, _mementoCreator); parser.Parse(); } - - } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/ConfigurationParserCollection.cs =================================================================== --- trunk/Source/StructureMap/Configuration/ConfigurationParserCollection.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/ConfigurationParserCollection.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -74,4 +74,4 @@ _fetchers.Add(fetcher); } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -21,7 +21,8 @@ _propertyName = propertyName; } - public ChildInstanceExpression(InstanceExpression instance, MemoryInstanceMemento memento, string propertyName, Type childType) + public ChildInstanceExpression(InstanceExpression instance, MemoryInstanceMemento memento, string propertyName, + Type childType) : this(instance, memento, propertyName) { _childType = childType; Modified: trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -59,7 +59,7 @@ public CreatePluginFamilyExpression TheDefaultIsConcreteType<T>() { - ExpressionValidator.ValidatePluggabilityOf(typeof(T)).IntoPluginType(_pluginType); + ExpressionValidator.ValidatePluggabilityOf(typeof (T)).IntoPluginType(_pluginType); _alterations.Add(delegate(PluginFamily family) { Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -42,8 +42,8 @@ } else { - throw new StructureMapException(304, TypePath.GetAssemblyQualifiedName(_pluginType)); - } + throw new StructureMapException(304, TypePath.GetAssemblyQualifiedName(_pluginType)); + } } public ProfileExpression Use(IMementoBuilder mementoBuilder) @@ -52,7 +52,5 @@ return _parent; } - - } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -53,8 +53,6 @@ } - - public PropertyExpression WithProperty(string propertyName) { return new PropertyExpression(this, _memento, propertyName); @@ -118,7 +116,7 @@ public InstanceExpression UsingConcreteType<T>() { - _parent._pluggedType = typeof(T); + _parent._pluggedType = typeof (T); return _parent; } @@ -127,7 +125,6 @@ _parent._memento.ConcreteKey = concreteKey; return _parent; } - } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -23,7 +23,7 @@ validate(); PluginFamily family = graph.LocateOrCreateFamilyForType((Type) _pluginType); configureMemento(family); - + if (!string.IsNullOrEmpty(_instanceKey)) { memento.InstanceKey = _instanceKey; Modified: trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using StructureMap.Graph; @@ -31,7 +30,7 @@ public InstanceDefaultExpression For<T>() { - InstanceDefaultExpression defaultExpression = new InstanceDefaultExpression(typeof(T), this); + InstanceDefaultExpression defaultExpression = new InstanceDefaultExpression(typeof (T), this); _defaults.Add(defaultExpression); return defaultExpression; Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -113,7 +113,7 @@ public static bool IsPublicRegistry(Type type) { - if (!typeof(Registry).IsAssignableFrom(type)) + if (!typeof (Registry).IsAssignableFrom(type)) { return false; } Modified: trunk/Source/StructureMap/Configuration/DiagnosticGraphBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DiagnosticGraphBuilder.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/DiagnosticGraphBuilder.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -19,7 +19,7 @@ { _innerBuilder = new NormalGraphBuilder(registries); _systemReport = new PluginGraphReport(); - _report = _innerBuilder.PluginGraph.Report; + _report = new PluginGraphReport(); } public PluginGraph PluginGraph @@ -168,6 +168,11 @@ pluginToken.LogProblem(problem); } } + catch (Exception ex) + { + Problem problem = new Problem(ConfigurationConstants.UNKNOWN_PLUGIN_PROBLEM, ex); + pluginToken.LogProblem(problem); + } return returnValue; } Modified: trunk/Source/StructureMap/Configuration/GraphObject.cs =================================================================== --- trunk/Source/StructureMap/Configuration/GraphObject.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/GraphObject.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,12 +1,13 @@ using System; using System.Collections; +using System.Collections.Generic; namespace StructureMap.Configuration { [Serializable] public abstract class GraphObject : IComparable { - private ArrayList _problems = new ArrayList(); + private List<Problem> _problems = new List<Problem>(); private Guid _id = Guid.NewGuid(); public GraphObject() @@ -21,8 +22,8 @@ public Problem[] Problems { - get { return (Problem[]) _problems.ToArray(typeof (Problem)); } - set { _problems = new ArrayList(value); } + get { return _problems.ToArray(); } + set { _problems = new List<Problem>(value); } } public void LogProblem(Problem problem) Modified: trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -25,7 +25,7 @@ public NormalGraphBuilder(IInterceptorChainBuilder builder, Registry[] registries) { _builder = builder; - + _pluginGraph = new PluginGraph(); foreach (Registry registry in registries) { @@ -154,6 +154,13 @@ public Plugin AddPlugin(TypePath pluginTypePath, TypePath pluginPath, string concreteKey) { PluginFamily family = _pluginGraph.PluginFamilies[pluginTypePath]; + if (family == null) + { + string message = + string.Format("Could not find a PluginFamily for {0}", pluginTypePath.AssemblyQualifiedName); + throw new ApplicationException(message); + } + Plugin plugin = new Plugin(pluginPath, concreteKey); plugin.DefinitionSource = DefinitionSource.Explicit; family.Plugins.Add(plugin); Modified: trunk/Source/StructureMap/Configuration/PluginGraphReport.cs =================================================================== --- trunk/Source/StructureMap/Configuration/PluginGraphReport.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/PluginGraphReport.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -18,6 +18,33 @@ { } + public PluginGraphReport(PluginGraph pluginGraph) + { + ReadFromPluginGraph(pluginGraph); + } + + public void ReadFromPluginGraph(PluginGraph pluginGraph) + { + ImportImplicitChildren(pluginGraph); + AnalyzeInstances(pluginGraph); + + Profile defaultProfile = pluginGraph.DefaultManager.CalculateDefaults(); + + InstanceManager manager = new InstanceManager(); + try + { + manager = new InstanceManager(pluginGraph); + } + catch (Exception ex) + { + Problem problem = new Problem(ConfigurationConstants.FATAL_ERROR, ex); + LogProblem(problem); + } + + IInstanceValidator validator = new InstanceValidator(pluginGraph, defaultProfile, manager); + ValidateInstances(validator); + } + public override GraphObject[] Children { get @@ -62,6 +89,8 @@ FamilyToken[] returnValue = new FamilyToken[_families.Count]; _families.Values.CopyTo(returnValue, 0); + + return returnValue; } } @@ -90,6 +119,11 @@ return null; } + public bool HasFamily(Type pluginType) + { + return _families.ContainsKey(new TypePath(pluginType)); + } + public FamilyToken FindFamily(Type pluginType) { TypePath path = new TypePath(pluginType); Modified: trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,4 +1,3 @@ -using System; using System.Xml; using StructureMap.Graph; using StructureMap.Graph.Configuration; @@ -62,12 +61,12 @@ private void processOverrideElement(WriteOverride function, XmlElement overrideElement, string profileName) { string fullName = overrideElement.GetAttribute(XmlConstants.TYPE_ATTRIBUTE); - + XmlElement instanceElement = (XmlElement) overrideElement.SelectSingleNode(XmlConstants.INSTANCE_NODE); if (instanceElement == null) { string defaultKey = overrideElement.GetAttribute(XmlConstants.DEFAULT_KEY_ATTRIBUTE); - function(fullName, defaultKey); + function(fullName, defaultKey); } else { @@ -75,7 +74,8 @@ } } - private void createOverrideInstance(string fullName, XmlElement instanceElement, WriteOverride function, string profileName) + private void createOverrideInstance(string fullName, XmlElement instanceElement, WriteOverride function, + string profileName) { string key = Profile.InstanceKeyForProfile(profileName); InstanceMemento memento = _creator.CreateMemento(instanceElement); @@ -91,6 +91,5 @@ { return _structureMapNode.SelectNodes(nodeName); } - } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/Tokens/FamilyToken.cs =================================================================== --- trunk/Source/StructureMap/Configuration/Tokens/FamilyToken.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/Tokens/FamilyToken.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using StructureMap.Attributes; using StructureMap.Graph; @@ -31,7 +32,7 @@ private DefinitionSource _definitionSource = DefinitionSource.Explicit; private string _defaultKey; - private Hashtable _plugins = new Hashtable(); + private Dictionary<string, PluginToken> _plugins = new Dictionary<string, PluginToken>(); private InstanceToken _sourceInstance; private ArrayList _interceptors = new ArrayList(); private Hashtable _instances = new Hashtable(); @@ -142,7 +143,12 @@ public PluginToken FindPlugin(string concreteKey) { - return (PluginToken) _plugins[concreteKey]; + if (_plugins.ContainsKey(concreteKey)) + { + return _plugins[concreteKey]; + } + + return null; } public TemplateToken[] Templates @@ -180,6 +186,14 @@ public void AddInstance(InstanceToken instance) { + if (_instances.ContainsKey(instance.InstanceKey)) + { + string message = + string.Format("Duplicate Instance '{0}' of PluginFamily '{1}'", instance.InstanceKey, + _typePath.AssemblyQualifiedName); + throw new ApplicationException(message); + } + _instances.Add(instance.InstanceKey, instance); } Modified: trunk/Source/StructureMap/Configuration/Tokens/InstanceToken.cs =================================================================== --- trunk/Source/StructureMap/Configuration/Tokens/InstanceToken.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Configuration/Tokens/InstanceToken.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -146,6 +146,11 @@ return; } + if (_pluginTypePath.FindType().IsGenericType) + { + return; + } + object target = validator.CreateObject(_pluginTypePath.FindType(), _memento); validateInstance(target); } Modified: trunk/Source/StructureMap/Graph/AssemblyGraph.cs =================================================================== --- trunk/Source/StructureMap/Graph/AssemblyGraph.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Graph/AssemblyGraph.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -184,10 +184,9 @@ { if (Registry.IsPublicRegistry(type)) { - Registry registry = (Registry)Activator.CreateInstance(type); + Registry registry = (Registry) Activator.CreateInstance(type); returnValue.Add(registry); } - } return returnValue; Modified: trunk/Source/StructureMap/Graph/PluginGraph.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginGraph.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Graph/PluginGraph.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -19,8 +19,8 @@ private bool _sealed = false; private PluginFamilyCollection _pluginFamilies; private InstanceDefaultManager _defaultManager = new InstanceDefaultManager(); - private PluginGraphReport _report = new PluginGraphReport(); + /// <summary> /// Default constructor /// </summary> @@ -28,8 +28,6 @@ { _assemblies = new AssemblyGraphCollection(this); _pluginFamilies = new PluginFamilyCollection(this); - - _report.DefaultManager = _defaultManager; } @@ -152,12 +150,6 @@ return pluginGraph; } - public PluginGraphReport Report - { - get { return _report; } - set { _report = value; } - } - public TypePath LocateOrCreateFamilyForType(string fullName) { Type pluginType = findTypeByFullName(fullName); Modified: trunk/Source/StructureMap/Graph/TypePath.cs =================================================================== --- trunk/Source/StructureMap/Graph/TypePath.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Graph/TypePath.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -13,7 +13,7 @@ { public static string GetTypeIdentifier(Type type) { - return type.AssemblyQualifiedName; + return new TypePath(type).AssemblyQualifiedName; } public static TypePath TypePathForFullName(string fullname) Modified: trunk/Source/StructureMap/IInstanceCreator.cs =================================================================== --- trunk/Source/StructureMap/IInstanceCreator.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/IInstanceCreator.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -4,4 +4,4 @@ { object BuildInstance(InstanceMemento memento); } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/IInstanceManager.cs =================================================================== --- trunk/Source/StructureMap/IInstanceManager.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/IInstanceManager.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -12,9 +12,6 @@ IList<T> GetAllInstances<T>(); void SetDefaultsToProfile(string profile); - InstanceDefaultManager DefaultManager - { - get; - } + InstanceDefaultManager DefaultManager { get; } } } \ No newline at end of file Modified: trunk/Source/StructureMap/InstanceManager.cs =================================================================== --- trunk/Source/StructureMap/InstanceManager.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/InstanceManager.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -469,7 +469,7 @@ public void Inject<T>(T instance) { - InjectStub(typeof(T), instance); + InjectStub(typeof (T), instance); } #endregion Modified: trunk/Source/StructureMap/InstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/InstanceMemento.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/InstanceMemento.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -31,7 +31,7 @@ _concreteKey = innerConcreteKey; if (string.IsNullOrEmpty(_concreteKey)) { - Plugin plugin = this.CreateInferredPlugin(); + Plugin plugin = CreateInferredPlugin(); if (plugin != null) { _concreteKey = plugin.ConcreteKey; @@ -62,10 +62,7 @@ return _instanceKey; } } - set - { - _instanceKey = value; - } + set { _instanceKey = value; } } protected abstract string innerInstanceKey { get; } Modified: trunk/Source/StructureMap/Interceptors/HttpContextItemInterceptor.cs =================================================================== --- trunk/Source/StructureMap/Interceptors/HttpContextItemInterceptor.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/Interceptors/HttpContextItemInterceptor.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -12,7 +12,6 @@ public HttpContextItemInterceptor() : base() { - } private string getKey(string instanceKey) Modified: trunk/Source/StructureMap/MemoryInstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/MemoryInstanceMemento.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/MemoryInstanceMemento.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,7 +1,5 @@ -using System; using System.Collections; using System.Collections.Specialized; -using StructureMap.Graph; namespace StructureMap { @@ -116,7 +114,7 @@ public void ReferenceChild(string name, string instanceKey) { - InstanceMemento child = MemoryInstanceMemento.CreateReferencedInstanceMemento(instanceKey); + InstanceMemento child = CreateReferencedInstanceMemento(instanceKey); AddChild(name, child); } Modified: trunk/Source/StructureMap/ObjectFactory.cs =================================================================== --- trunk/Source/StructureMap/ObjectFactory.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/ObjectFactory.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -90,7 +90,6 @@ } - /// <summary> /// Restores all default instance settings according to the StructureMap.config files /// </summary> Modified: trunk/Source/StructureMap/PluginGraphBuilder.cs =================================================================== --- trunk/Source/StructureMap/PluginGraphBuilder.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap/PluginGraphBuilder.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -133,8 +133,6 @@ { parser.ParseProfilesAndMachines(graphBuilder); } - - } private void readFamilies(IGraphBuilder graphBuilder) Modified: trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -12,7 +12,7 @@ [SetUp] public void SetUp() { - StructureMapConfiguration.ResetAll(); + StructureMapConfiguration.ResetAll(); DataMother.WriteDocument("Config1.xml"); DataMother.WriteDocument("Config2.xml"); } @@ -20,11 +20,11 @@ [TearDown] public void TearDown() { - StructureMapConfiguration.ResetAll(); + StructureMapConfiguration.ResetAll(); ObjectFactory.Reset(); } - + public void assertTheDefault(string color) { ColorWidget widget = (ColorWidget) ObjectFactory.GetInstance<IWidget>(); @@ -64,7 +64,7 @@ XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); - + StructureMapConfiguration.UseDefaultStructureMapConfigFile = true; StructureMapConfiguration.IncludeConfigurationFromNode(doc.DocumentElement); ObjectFactory.Reset(); @@ -73,4 +73,4 @@ Assert.IsNotNull(service); } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserCollectionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserCollectionTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserCollectionTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -22,7 +22,8 @@ { Array.Sort(expected); ConfigurationParser[] parsers = _collection.GetParsers(); - Converter<ConfigurationParser, string> converter = delegate(ConfigurationParser parser) { return parser.Id; }; + Converter<ConfigurationParser, string> converter = + delegate(ConfigurationParser parser) { return parser.Id; }; string[] actuals = Array.ConvertAll<ConfigurationParser, string>(parsers, converter); Array.Sort(actuals); @@ -47,7 +48,10 @@ assertParserIdList("Generics"); } - [Test, ExpectedException(typeof(StructureMapException), "StructureMap Exception Code: 100\nExpected file \"StructureMap.config\" cannot be opened at DoesNotExist.xml")] + [Test, + ExpectedException(typeof (StructureMapException), + "StructureMap Exception Code: 100\nExpected file \"StructureMap.config\" cannot be opened at DoesNotExist.xml" + )] public void FileDoesNotExist() { _collection.UseDefaultFile = false; @@ -105,4 +109,4 @@ assertParserIdList("Somewhere"); } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -4,7 +4,6 @@ using StructureMap.Configuration; using StructureMap.Configuration.DSL; using StructureMap.Graph; -using StructureMap.Source; using StructureMap.Testing.TestData; using StructureMap.Testing.Widget; @@ -105,7 +104,7 @@ { string[] names = _defaults.GetMachineNames(); Array.Sort(names); - Assert.AreEqual(new string[] {"GREEN-BOX", "SERVER" }, names); + Assert.AreEqual(new string[] {"GREEN-BOX", "SERVER"}, names); } [Test] Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -38,8 +38,6 @@ .WithProperty("Color").EqualToAppSetting("Color"); - - registry.AddInstanceOf<IWidget>().UsingConcreteType<AWidget>(); manager = registry.BuildInstanceManager(); @@ -47,7 +45,7 @@ [Test] public void UseAPreBuiltObjectForAnInstanceAsAPrototype() - { + { Registry registry = new Registry(); // Build an instance for IWidget, then setup StructureMap to return cloned instances of the // "Prototype" (GoF pattern) whenever someone asks for IWidget named "Jeremy" @@ -59,7 +57,7 @@ CloneableWidget widget1 = (CloneableWidget) manager.CreateInstance<IWidget>("Jeremy"); CloneableWidget widget2 = (CloneableWidget) manager.CreateInstance<IWidget>("Jeremy"); CloneableWidget widget3 = (CloneableWidget) manager.CreateInstance<IWidget>("Jeremy"); - + Assert.AreEqual("Jeremy", widget1.Name); Assert.AreEqual("Jeremy", widget2.Name); Assert.AreEqual("Jeremy", widget3.Name); @@ -80,9 +78,9 @@ manager = registry.BuildInstanceManager(); - CloneableWidget widget1 = (CloneableWidget)manager.CreateInstance<IWidget>("Julia"); - CloneableWidget widget2 = (CloneableWidget)manager.CreateInstance<IWidget>("Julia"); - CloneableWidget widget3 = (CloneableWidget)manager.CreateInstance<IWidget>("Julia"); + CloneableWidget widget1 = (CloneableWidget) manager.CreateInstance<IWidget>("Julia"); + CloneableWidget widget2 = (CloneableWidget) manager.CreateInstance<IWidget>("Julia"); + CloneableWidget widget3 = (CloneableWidget) manager.CreateInstance<IWidget>("Julia"); Assert.AreSame(julia, widget1); Assert.AreSame(julia, widget2); @@ -99,17 +97,17 @@ string instanceKey = "OrangeWidgetRule"; registry.AddInstanceOf<Rule>().UsingConcreteType<WidgetRule>().WithName(instanceKey) .Child<IWidget>().Is( - Registry.Instance<IWidget>().UsingConcreteType<ColorWidget>() - .WithProperty("Color").EqualTo("Orange") - .WithName("Orange") - ); + Registry.Instance<IWidget>().UsingConcreteType<ColorWidget>() + .WithProperty("Color").EqualTo("Orange") + .WithName("Orange") + ); IInstanceManager mgr = registry.BuildInstanceManager(); ColorWidget orange = (ColorWidget) mgr.CreateInstance<IWidget>("Orange"); Assert.IsNotNull(orange); - WidgetRule rule = (WidgetRule)mgr.CreateInstance<Rule>(instanceKey); + WidgetRule rule = (WidgetRule) mgr.CreateInstance<Rule>(instanceKey); ColorWidget widget = (ColorWidget) rule.Widget; Assert.AreEqual("Orange", widget.Color); } @@ -126,8 +124,8 @@ manager = registry.BuildInstanceManager(); - WidgetRule rule = (WidgetRule)manager.CreateInstance<Rule>("AWidgetRule"); - Assert.IsInstanceOfType(typeof(AWidget), rule.Widget); + WidgetRule rule = (WidgetRule) manager.CreateInstance<Rule>("AWidgetRule"); + Assert.IsInstanceOfType(typeof (AWidget), rule.Widget); } [Test] @@ -181,7 +179,6 @@ //registry.ScanAssemblies().IncludeAssemblyContainingType<IWidget>(); - registry.AddInstanceOf<Rule>().UsingConcreteType<ARule>().WithName("Alias"); // Add an instance by specifying the ConcreteKey @@ -196,7 +193,7 @@ manager = registry.BuildInstanceManager(); - Assert.IsInstanceOfType(typeof(ARule), manager.CreateInstance<Rule>("Alias")); + Assert.IsInstanceOfType(typeof (ARule), manager.CreateInstance<Rule>("Alias")); WidgetRule rule = (WidgetRule) manager.CreateInstance<Rule>("RuleThatUsesMyInstance"); ColorWidget widget = (ColorWidget) rule.Widget; @@ -271,6 +268,5 @@ public class ARule : Rule { - } } \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -12,36 +12,48 @@ { } - [Test, ExpectedException(typeof(StructureMapException), "StructureMap Exception Code: 303\nType System.String,mscorlib is either abstract or cannot be plugged into Type StructureMap.Testing.Configuration.DSL.IType,StructureMap.Testing")] + [Test, + ExpectedException(typeof (StructureMapException), + "StructureMap Exception Code: 303\nType System.String,mscorlib is either abstract or cannot be plugged into Type StructureMap.Testing.Configuration.DSL.IType,StructureMap.Testing" + )] public void CantCastTheRequestedConcreteType() { - InstanceExpression instance = new InstanceExpression(typeof(IStrategy)); + InstanceExpression instance = new InstanceExpression(typeof (IStrategy)); MemoryInstanceMemento memento = new MemoryInstanceMemento(); - ChildInstanceExpression expression = new ChildInstanceExpression(instance, memento, "a property", typeof(IType)); + ChildInstanceExpression expression = + new ChildInstanceExpression(instance, memento, "a property", typeof (IType)); expression.IsConcreteType<string>(); } - [Test, ExpectedException(typeof(StructureMapException), "StructureMap Exception Code: 303\nType StructureMap.Testing.Configuration.DSL.AbstractType,StructureMap.Testing is either abstract or cannot be plugged into Type StructureMap.Testing.Configuration.DSL.IType,StructureMap.Testing")] + [Test, + ExpectedException(typeof (StructureMapException), + "StructureMap Exception Code: 303\nType StructureMap.Testing.Configuration.DSL.AbstractType,StructureMap.Testing is either abstract or cannot be plugged into Type StructureMap.Testing.Configuration.DSL.IType,StructureMap.Testing" + )] public void CantCastTheRequestedConcreteType2() { - InstanceExpression instance = new InstanceExpression(typeof(IStrategy)); + InstanceExpression instance = new InstanceExpression(typeof (IStrategy)); MemoryInstanceMemento memento = new MemoryInstanceMemento(); - ChildInstanceExpression expression = new ChildInstanceExpression(instance, memento, "a property", typeof(IType)); + ChildInstanceExpression expression = + new ChildInstanceExpression(instance, memento, "a property", typeof (IType)); expression.IsConcreteType<AbstractType>(); } - [Test, ExpectedException(typeof(StructureMapException), "StructureMap Exception Code: 303\nType StructureMap.Testing.Configuration.DSL.AbstractType,StructureMap.Testing is either abstract or cannot be plugged into Type StructureMap.Testing.Configuration.DSL.IType,StructureMap.Testing")] + [Test, + ExpectedException(typeof (StructureMapException), + "StructureMap Exception Code: 303\nType StructureMap.Testing.Configuration.DSL.AbstractType,StructureMap.Testing is either abstract or cannot be plugged into Type StructureMap.Testing.Configuration.DSL.IType,StructureMap.Testing" + )] public void CantCastTheRequestedPluggedType3() { - InstanceExpression instance = new InstanceExpression(typeof(IStrategy)); + InstanceExpression instance = new InstanceExpression(typeof (IStrategy)); MemoryInstanceMemento memento = new MemoryInstanceMemento(); - ChildInstanceExpression expression = new ChildInstanceExpression(instance, memento, "a property", typeof(IType)); + ChildInstanceExpression expression = + new ChildInstanceExpression(instance, memento, "a property", typeof (IType)); InstanceExpression child = Registry.Instance<IType>().UsingConcreteType<AbstractType>(); - + expression.Is(child); } } @@ -56,6 +68,5 @@ public class ConcreteType : AbstractType { - } } \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -14,10 +14,9 @@ [SetUp] public void SetUp() { - } - [Test, ExpectedException(typeof(StructureMapException))] + [Test, ExpectedException(typeof (StructureMapException))] public void TheConceteTypeDoesNotCase() { Registry registry = new Registry(); @@ -34,7 +33,7 @@ IInstanceManager manager = registry.BuildInstanceManager(); - Assert.IsInstanceOfType(typeof(ARule), manager.CreateInstance<Rule>()); + Assert.IsInstanceOfType(typeof (ARule), manager.CreateInstance<Rule>()); } [Test] @@ -61,9 +60,9 @@ Assert.IsTrue(pluginGraph.PluginFamilies.Contains<IGateway>()); InstanceManager manager = new InstanceManager(pluginGraph); - IGateway gateway = (IGateway)manager.CreateInstance(typeof(IGateway)); + IGateway gateway = (IGateway) manager.CreateInstance(typeof (IGateway)); - Assert.IsInstanceOfType(typeof(DefaultGateway), gateway); + Assert.IsInstanceOfType(typeof (DefaultGateway), gateway); } [Test] @@ -79,9 +78,9 @@ Assert.IsTrue(pluginGraph.PluginFamilies.Contains<IGateway>()); InstanceManager manager = new InstanceManager(pluginGraph); - IGateway gateway = (IGateway)manager.CreateInstance(typeof(IGateway)); + IGateway gateway = (IGateway) manager.CreateInstance(typeof (IGateway)); - Assert.IsInstanceOfType(typeof(StubbedGateway), gateway); + Assert.IsInstanceOfType(typeof (StubbedGateway), gateway); } [Test] @@ -110,7 +109,7 @@ Assert.IsNotNull(expression); } - PluginFamily family = pluginGraph.PluginFamilies[typeof(IGateway)]; + PluginFamily family = pluginGraph.PluginFamilies[typeof (IGateway)]; Assert.AreEqual(0, family.InterceptionChain.Count); } @@ -120,12 +119,13 @@ PluginGraph pluginGraph = new PluginGraph(); using (Registry registry = new Registry(pluginGraph)) { - CreatePluginFamilyExpression expression = registry.BuildInstancesOf<IGateway>().CacheBy(InstanceScope.ThreadLocal); + CreatePluginFamilyExpression expression = + registry.BuildInstancesOf<IGateway>().CacheBy(InstanceScope.ThreadLocal); Assert.IsNotNull(expression); } - PluginFamily family = pluginGraph.PluginFamilies[typeof(IGateway)]; - Assert.IsTrue(family.InterceptionChain.Contains(typeof(ThreadLocalStorageInterceptor))); + PluginFamily family = pluginGraph.PluginFamilies[typeof (IGateway)]; + Assert.IsTrue(family.InterceptionChain.Contains(typeof (ThreadLocalStorageInterceptor))); } [Test] @@ -134,13 +134,13 @@ PluginGraph pluginGraph = new PluginGraph(); using (Registry registry = new Registry(pluginGraph)) { - CreatePluginFamilyExpression expression = + CreatePluginFamilyExpression expression = registry.BuildInstancesOf<IGateway>().AsSingletons(); Assert.IsNotNull(expression); } PluginFamily family = pluginGraph.PluginFamilies[typeof (IGateway)]; - Assert.IsTrue(family.InterceptionChain.Contains(typeof(SingletonInterceptor))); + Assert.IsTrue(family.InterceptionChain.Contains(typeof (SingletonInterceptor))); } [Test] @@ -155,10 +155,9 @@ Assert.IsTrue(pluginGraph.PluginFamilies.Contains<IGateway>()); InstanceManager manager = new InstanceManager(pluginGraph); - IGateway gateway = (IGateway)manager.CreateInstance(typeof(IGateway)); + IGateway gateway = (IGateway) manager.CreateInstance(typeof (IGateway)); - Assert.IsInstanceOfType(typeof(FakeGateway), gateway); + Assert.IsInstanceOfType(typeof (FakeGateway), gateway); } - } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/CreateProfileTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/CreateProfileTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/CreateProfileTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,8 +1,5 @@ using NUnit.Framework; -using StructureMap.Configuration.DSL; using StructureMap.Graph; -using StructureMap.Testing.GenericWidgets; -using StructureMap.Testing.Widget; namespace StructureMap.Testing.Configuration.DSL { @@ -36,7 +33,6 @@ [Test] public void CreateProfile() { - } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,5 +1,4 @@ using NUnit.Framework; -using Rhino.Mocks; using StructureMap.Configuration.DSL; using StructureMap.Testing.Widget; @@ -36,7 +35,7 @@ .WithProperty("count").EqualTo(4) .WithProperty("average").EqualTo(.333) .Child<Rule>().Is( - ruleExpression + ruleExpression ) ); @@ -70,7 +69,7 @@ { Registry registry = new Registry(); registry.BuildInstancesOf<IWidget>().TheDefaultIs( - Registry.Object(new ColorWidget("yellow")) + Registry.Object(new ColorWidget("yellow")) ); registry.BuildInstancesOf<Rule>().TheDefaultIsConcreteType<WidgetRule>(); @@ -109,7 +108,6 @@ } - [Test] public void DeepInstance5() { @@ -136,7 +134,6 @@ assertThingMatches(registry); } - } public class Thing @@ -177,4 +174,4 @@ return result; } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -13,19 +13,22 @@ { } - [Test, ExpectedException(typeof(StructureMapException), "StructureMap Exception Code: 301\nNo concrete type or concrete key is specified for instance TheInstanceKey for PluginType StructureMap.Testing.Widget.IWidget,StructureMap.Testing.Widget")] + [Test, + ExpectedException(typeof (StructureMapException), + "StructureMap Exception Code: 301\nNo concrete type or concrete key is specified for instance TheInstanceKey for PluginType StructureMap.Testing.Widget.IWidget,StructureMap.Testing.Widget" + )] public void BlowUpIfNoConcreteKeyOrTypeDefinied() { - InstanceExpression expression = new InstanceExpression(typeof(IWidget)); + InstanceExpression expression = new InstanceExpression(typeof (IWidget)); expression.InstanceKey = "TheInstanceKey"; PluginGraph pluginGraph = new PluginGraph(); - ((IExpression)expression).Configure(pluginGraph); + ((IExpression) expression).Configure(pluginGraph); } - [Test, ExpectedException(typeof(StructureMapException))] + [Test, ExpectedException(typeof (StructureMapException))] public void BlowUpIfNoPropertyIsFoundForType() { Registry.Instance<IWidget>().UsingConcreteType<AWidget>().Child<Rule>(); } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/LiteralExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/LiteralExpressionTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/LiteralExpressionTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,5 +1,4 @@ using NUnit.Framework; -using Rhino.Mocks; using StructureMap.Configuration.DSL; using StructureMap.Graph; using StructureMap.Testing.Widget; @@ -20,14 +19,13 @@ ColorWidget theWidget = new ColorWidget("Red"); LiteralExpression<IWidget> expression = new LiteralExpression<IWidget>(theWidget); PluginGraph graph = new PluginGraph(); - ((IExpression)expression).Configure(graph); + ((IExpression) expression).Configure(graph); PluginFamily family = graph.PluginFamilies[typeof (IWidget)]; Assert.IsNotNull(family); LiteralMemento memento = (LiteralMemento) family.Source.GetMemento(expression.InstanceKey); Assert.AreSame(theWidget, memento.Build(null)); - } [Test] @@ -36,7 +34,7 @@ ColorWidget theWidget = new ColorWidget("Red"); LiteralExpression<IWidget> expression = new LiteralExpression<IWidget>(theWidget); PluginGraph graph = new PluginGraph(); - ((IExpression)expression).Configure(graph); + ((IExpression) expression).Configure(graph); InstanceManager manager = new InstanceManager(graph); @@ -51,13 +49,13 @@ LiteralExpression<IWidget> expression = new LiteralExpression<IWidget>(theWidget); expression.WithName("Blue"); PluginGraph graph = new PluginGraph(); - ((IExpression)expression).Configure(graph); + ((IExpression) expression).Configure(graph); - PluginFamily family = graph.PluginFamilies[typeof(IWidget)]; + PluginFamily family = graph.PluginFamilies[typeof (IWidget)]; Assert.IsNotNull(family); - LiteralMemento memento = (LiteralMemento)family.Source.GetMemento(expression.InstanceKey); + LiteralMemento memento = (LiteralMemento) family.Source.GetMemento(expression.InstanceKey); Assert.AreSame(theWidget, memento.Build(null)); } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,5 +1,4 @@ using NUnit.Framework; -using Rhino.Mocks; using StructureMap.Configuration.DSL; using StructureMap.Graph; using StructureMap.Testing.Widget; @@ -12,7 +11,6 @@ [SetUp] public void SetUp() { - } [Test] @@ -22,16 +20,17 @@ string theDefaultName = "TheDefaultName"; ProfileExpression expression = new ProfileExpression(theProfileName); - + ProfileExpression expression2 = expression.For<IWidget>().UseNamedInstance(theDefaultName); Assert.AreSame(expression, expression2); PluginGraph graph = new PluginGraph(); - ((IExpression)expression).Configure(graph); + ((IExpression) expression).Configure(graph); Profile profile = graph.DefaultManager.GetProfile(theProfileName); Assert.IsNotNull(profile); - Assert.AreEqual(new InstanceDefault[] { new InstanceDefault(typeof(IWidget), theDefaultName) }, profile.Defaults); + Assert.AreEqual(new InstanceDefault[] {new InstanceDefault(typeof (IWidget), theDefaultName)}, + profile.Defaults); } [Test] @@ -43,12 +42,11 @@ Registry registry = new Registry(graph); registry.CreateProfile(theProfileName) .For<IWidget>().Use( - Registry.Instance<IWidget>().UsingConcreteType<AWidget>() + Registry.Instance<IWidget>().UsingConcreteType<AWidget>() ); IInstanceManager manager = registry.BuildInstanceManager(); - Profile profile = manager.DefaultManager.GetProfile(theProfileName); InstanceDefault instanceDefault = profile.Defaults[0]; @@ -59,4 +57,4 @@ Assert.IsNotNull(widget); } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -43,7 +43,7 @@ graph.Seal(); List<string> colors = new List<string>(); - foreach (InstanceMemento memento in graph.PluginFamilies[typeof(IWidget)].Source.GetAllMementos() ) + foreach (InstanceMemento memento in graph.PluginFamilies[typeof (IWidget)].Source.GetAllMementos()) { colors.Add(memento.InstanceKey); } @@ -83,4 +83,4 @@ Assert.Contains("Black", colors); } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,5 +1,4 @@ using System; -using System.Reflection; using NUnit.Framework; using Rhino.Mocks; using StructureMap.Configuration.DSL; @@ -28,7 +27,7 @@ expression1.Configure(graph); expression2.Configure(graph); expression3.Configure(graph); - + mocks.ReplayAll(); TestRegistry registry = new TestRegistry(graph); @@ -48,7 +47,7 @@ IExpression expression1 = mocks.CreateMock<IExpression>(); IExpression expression2 = mocks.CreateMock<IExpression>(); IExpression expression3 = mocks.CreateMock<IExpression>(); - + PluginGraph graph = new PluginGraph(); expression1.Configure(graph); expression2.Configure(graph); @@ -60,15 +59,11 @@ { registry.AddExpression(expression1); registry.AddExpression(expression2); - registry.AddExpression(expression3); + registry.AddExpression(expression3); } mocks.VerifyAll(); } - - - - } public class TestRegistry : Registry @@ -126,4 +121,4 @@ get { throw new NotImplementedException(); } } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs 2007-03-27 11:18:48 UTC (rev 31) +++ trunk/Source/StructureMap.Testing/Configuration/InlineInstanceDefinitionInProfileAndMachineNodesTester.cs 2007-03-29 15:58:10 UTC (rev 32) @@ -1,4 +1,3 @@ -using System; using System.Diagnostics; using NUnit.Framework; using StructureMap.Graph; @@ -33,24 +32,24 @@ [Test] public void CanFindTheTwoPluginFamilies() { - Assert.IsTrue(_graph.PluginFamilies.Contains(typeof(IWidget))); - Assert.IsTrue(_graph.PluginFamilies.Contains(typeof(Rule))); + Assert.IsTrue(_graph.PluginFamilies.Contains(typeof (IWidget))); + Assert.IsTrue(_graph.PluginFamilies.Contains(typeof (Rule))); } [Test] public void HasTheOverrideForProfile() { Profile blueProfile = _graph.DefaultManager.GetProfile("Blue"); - Assert.IsTrue(blueProfile.HasOverride(typeof(Rule).FullName)); - Assert.IsTrue(blueProfile.HasOverride(typeof(IWidget).FullName)); + Assert.IsTrue(blueProfile.HasOverride(typeof (Rule).FullName)); + Assert.IsTrue(blueProfile.HasOverride(typeof (IWidget).FullName)); - Assert.IsNotEmpty(blueProfile[typeof(Rule).FullName]); - Assert.IsNotEmpty(blueProfile[typeof(IWidget).FullName]); + Assert.IsNotEmpty(blueProfile[typeof (Rule).FullName]); + Assert.IsNotEmpty(blueProfile[typeof (IWidget).FullName]); - Debug.WriteLine(blueProfile[typeof(IWidget).FullName]); + Debug.WriteLine(blueProfile[typeof (IWidget).FullName]); Profile defaults = _graph.DefaultManager.CalculateDefaults(InstanceDefaultManager.GetMachineName(), "Blue"); - Assert.IsNotEmpty(defaults[typeof(Rule).FullName]); + Assert.IsNotEmpty(defaults[typeof (Rule).FullName]); } [Test] @@ -59,10 +58,8 @@ InstanceManager manager = new InstanceManager(_graph); manager.SetDefaultsToProfile("Green"); - string defaultKey = manager[typeof(Rule)].DefaultInstanceKey; + string defaultKey = manager[typeof (Rule)].DefaultInstanceKey; Assert.IsNotEmpty(defaultKey); - - } [Test] @@ -76,7 +73,7 @@ manager.SetDefaultsToProfile("Blue"); - ColorRule blueRule = (ColorRule)manager.CreateInstance(typeof(Rule)); + ColorRule blueRule = (ColorRule) manager.CreateInstance(typeof (Rule)); Assert.AreEqual("Blue", blueRule.Color); } @@ -85,14 +82,13 @@ { MachineOverride machine = _graph.DefaultManager.GetMachineOverride("SERVER"); Assert.AreEqual(1, machine.InnerDefaults.Length); - Assert.IsTrue(machine.HasOverride(typeof(IWidget).FullName)); + Assert.IsTrue... [truncated message content] |
From: <jer...@us...> - 2007-03-27 11:18:51
|
Revision: 31 http://structuremap.svn.sourceforge.net/structuremap/?rev=31&view=rev Author: jeremydmiller Date: 2007-03-27 04:18:48 -0700 (Tue, 27 Mar 2007) Log Message: ----------- Integrated Registry into ObjectFactory Modified Paths: -------------- trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/Configuration/DiagnosticGraphBuilder.cs trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs trunk/Source/StructureMap/Configuration/Tokens/FamilyToken.cs trunk/Source/StructureMap/Graph/AssemblyGraph.cs trunk/Source/StructureMap/Graph/PluginGraph.cs trunk/Source/StructureMap/PluginGraphBuilder.cs trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/ScanAssembliesTester.cs trunk/Source/StructureMap.Testing/Configuration/DiagnosticGraphBuilderTester.cs trunk/Source/StructureMap.Testing/Configuration/NormalGraphBuilderTester.cs trunk/Source/StructureMap.Testing/ImplicitPluginFromPluggedTypeAttributeTester.cs Added Paths: ----------- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs trunk/Source/StructureMap.Testing.Widget5/WidgetRegistry.cs Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -9,7 +9,7 @@ private List<IExpression> _expressions = new List<IExpression>(); private PluginGraph _graph; - public Registry(PluginGraph graph) + public Registry(PluginGraph graph) : this() { _graph = graph; } @@ -17,6 +17,7 @@ public Registry() { _graph = new PluginGraph(); + configure(); } @@ -28,12 +29,12 @@ // no-op; } - protected void addExpression(IExpression expression) + protected internal void addExpression(IExpression expression) { _expressions.Add(expression); } - private void configurePluginGraph(PluginGraph graph) + internal void ConfigurePluginGraph(PluginGraph graph) { foreach (IExpression expression in _expressions) { @@ -44,17 +45,10 @@ public void Dispose() { - configurePluginGraph(_graph); + ConfigurePluginGraph(_graph); } - public ScanAssembliesExpression ScanAssemblies() - { - ScanAssembliesExpression expression = new ScanAssembliesExpression(); - addExpression(expression); - return expression; - } - public CreatePluginFamilyExpression BuildInstancesOf<T>() { CreatePluginFamilyExpression expression = new CreatePluginFamilyExpression(typeof (T)); @@ -65,7 +59,7 @@ public IInstanceManager BuildInstanceManager() { - configurePluginGraph(_graph); + ConfigurePluginGraph(_graph); _graph.ReadDefaults(); return new InstanceManager(_graph); } @@ -116,5 +110,20 @@ return expression; } + + public static bool IsPublicRegistry(Type type) + { + if (!typeof(Registry).IsAssignableFrom(type)) + { + return false; + } + + if (type.IsInterface || type.IsAbstract || type.IsGenericType) + { + return false; + } + + return (type.GetConstructor(new Type[0]) != null); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DiagnosticGraphBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DiagnosticGraphBuilder.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap/Configuration/DiagnosticGraphBuilder.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -1,5 +1,6 @@ using System; using StructureMap.Attributes; +using StructureMap.Configuration.DSL; using StructureMap.Configuration.Tokens; using StructureMap.Graph; using StructureMap.Graph.Configuration; @@ -14,9 +15,9 @@ private PluginGraphReport _systemReport; private PluginGraphReport _report; - public DiagnosticGraphBuilder() + public DiagnosticGraphBuilder(Registry[] registries) { - _innerBuilder = new NormalGraphBuilder(); + _innerBuilder = new NormalGraphBuilder(registries); _systemReport = new PluginGraphReport(); _report = _innerBuilder.PluginGraph.Report; } Modified: trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -1,6 +1,7 @@ using System; using System.Reflection; using StructureMap.Attributes; +using StructureMap.Configuration.DSL; using StructureMap.Graph; using StructureMap.Graph.Configuration; using StructureMap.Interceptors; @@ -17,14 +18,20 @@ private MachineOverride _machine; - public NormalGraphBuilder() : this(new InterceptorChainBuilder()) + public NormalGraphBuilder(Registry[] registries) : this(new InterceptorChainBuilder(), registries) { } - public NormalGraphBuilder(IInterceptorChainBuilder builder) + public NormalGraphBuilder(IInterceptorChainBuilder builder, Registry[] registries) { _builder = builder; + _pluginGraph = new PluginGraph(); + foreach (Registry registry in registries) + { + registry.ConfigurePluginGraph(_pluginGraph); + } + _systemGraph = new PluginGraph(); _systemGraph.Assemblies.Add(Assembly.GetExecutingAssembly()); } Modified: trunk/Source/StructureMap/Configuration/Tokens/FamilyToken.cs =================================================================== --- trunk/Source/StructureMap/Configuration/Tokens/FamilyToken.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap/Configuration/Tokens/FamilyToken.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -16,11 +16,14 @@ PluginFamilyAttribute att = PluginFamilyAttribute.GetAttribute(family.PluginType); - if (att.Scope != InstanceScope.PerRequest) + if (att != null) { - token.Scope = att.Scope; - InterceptorInstanceToken interceptor = new InterceptorInstanceToken(att.Scope); - token.AddInterceptor(interceptor); + if (att.Scope != InstanceScope.PerRequest) + { + token.Scope = att.Scope; + InterceptorInstanceToken interceptor = new InterceptorInstanceToken(att.Scope); + token.AddInterceptor(interceptor); + } } return token; Modified: trunk/Source/StructureMap/Graph/AssemblyGraph.cs =================================================================== --- trunk/Source/StructureMap/Graph/AssemblyGraph.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap/Graph/AssemblyGraph.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -1,8 +1,10 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; +using StructureMap.Configuration.DSL; namespace StructureMap.Graph { @@ -91,17 +93,9 @@ return new PluginFamily[0]; } - ArrayList list = new ArrayList(); + List<PluginFamily> list = new List<PluginFamily>(); - Type[] exportedTypes = null; - try - { - exportedTypes = _assembly.GetExportedTypes(); - } - catch (Exception ex) - { - throw new StructureMapException(170, ex, AssemblyName); - } + Type[] exportedTypes = getExportedTypes(); foreach (Type exportedType in exportedTypes) { @@ -112,9 +106,24 @@ } } - return (PluginFamily[]) list.ToArray(typeof (PluginFamily)); + return list.ToArray(); } + private Type[] getExportedTypes() + { + Type[] exportedTypes = null; + try + { + exportedTypes = _assembly.GetExportedTypes(); + } + catch (Exception ex) + { + throw new StructureMapException(170, ex, AssemblyName); + } + return exportedTypes; + } + + /// <summary> /// Returns an array of possible Plugin's from the Assembly that match /// the requested type @@ -165,5 +174,23 @@ { return _assembly.GetType(fullName, false); } + + public List<Registry> FindRegistries() + { + Type[] exportedTypes = getExportedTypes(); + List<Registry> returnValue = new List<Registry>(); + + foreach (Type type in exportedTypes) + { + if (Registry.IsPublicRegistry(type)) + { + Registry registry = (Registry)Activator.CreateInstance(type); + returnValue.Add(registry); + } + + } + + return returnValue; + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Graph/PluginGraph.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginGraph.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap/Graph/PluginGraph.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -1,7 +1,9 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Reflection; using StructureMap.Configuration; +using StructureMap.Configuration.DSL; namespace StructureMap.Graph { @@ -54,6 +56,8 @@ return; } + searchAssembliesForRegistries(); + foreach (AssemblyGraph assembly in _assemblies) { addImplicitPluginFamilies(assembly); @@ -67,6 +71,20 @@ _sealed = true; } + private void searchAssembliesForRegistries() + { + List<Registry> list = new List<Registry>(); + foreach (AssemblyGraph assembly in _assemblies) + { + list.AddRange(assembly.FindRegistries()); + } + + foreach (Registry registry in list) + { + registry.ConfigurePluginGraph(this); + } + } + private void attachImplicitPlugins(PluginFamily family) { foreach (AssemblyGraph assembly in _assemblies) Modified: trunk/Source/StructureMap/PluginGraphBuilder.cs =================================================================== --- trunk/Source/StructureMap/PluginGraphBuilder.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap/PluginGraphBuilder.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -1,6 +1,7 @@ using System; using System.Xml; using StructureMap.Configuration; +using StructureMap.Configuration.DSL; using StructureMap.Graph; using StructureMap.Graph.Configuration; @@ -17,7 +18,7 @@ public static PluginGraph BuildFromXml(XmlDocument document) { ConfigurationParser[] parsers = ConfigurationParser.GetParsers(document, ""); - PluginGraphBuilder builder = new PluginGraphBuilder(parsers); + PluginGraphBuilder builder = new PluginGraphBuilder(parsers, new Registry[0]); return builder.BuildDiagnosticPluginGraph(); } @@ -49,21 +50,22 @@ private PluginGraph _graph; private PluginGraphReport _report; private ConfigurationParser[] _parsers; + private readonly Registry[] _registries = new Registry[0]; #region constructors public PluginGraphBuilder(ConfigurationParser parser) - : this(new ConfigurationParser[] {parser}) + : this(new ConfigurationParser[] {parser}, new Registry[0]) { } - public PluginGraphBuilder(ConfigurationParser[] parsers) + public PluginGraphBuilder(ConfigurationParser[] parsers, Registry[] registries) { _parsers = parsers; + _registries = registries; } - /// <summary> /// Creates a PluginGraphBuilder that reads configuration from the filePath /// </summary> @@ -102,7 +104,7 @@ /// <returns></returns> public PluginGraph Build() { - NormalGraphBuilder graphBuilder = new NormalGraphBuilder(); + NormalGraphBuilder graphBuilder = new NormalGraphBuilder(_registries); PluginGraph pluginGraph = buildPluginGraph(graphBuilder); return pluginGraph; } @@ -162,7 +164,7 @@ /// <returns></returns> public PluginGraph BuildDiagnosticPluginGraph() { - DiagnosticGraphBuilder graphBuilder = new DiagnosticGraphBuilder(); + DiagnosticGraphBuilder graphBuilder = new DiagnosticGraphBuilder(_registries); buildPluginGraph(graphBuilder); _report = graphBuilder.Report; Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -1,7 +1,9 @@ using System; +using System.Collections.Generic; using System.IO; using System.Xml; using StructureMap.Configuration; +using StructureMap.Configuration.DSL; using StructureMap.Graph; namespace StructureMap @@ -10,7 +12,15 @@ { private const string CONFIG_FILE_NAME = "StructureMap.config"; private static ConfigurationParserCollection _collection = new ConfigurationParserCollection(); + private static Registry _registry = new Registry(); + private static List<Registry> _registries = new List<Registry>(); + static StructureMapConfiguration() + { + ResetAll(); + } + + /// <summary> /// Returns the path to the StructureMap.config file /// </summary> @@ -38,6 +48,9 @@ public static void ResetAll() { _collection = new ConfigurationParserCollection(); + _registry = new Registry(); + _registries = new List<Registry>(); + _registries.Add(_registry); } public static PluginGraph GetPluginGraph() @@ -49,7 +62,7 @@ private static PluginGraphBuilder createBuilder() { ConfigurationParser[] parsers = _collection.GetParsers(); - return new PluginGraphBuilder(parsers); + return new PluginGraphBuilder(parsers, _registries.ToArray()); } public static PluginGraph GetDiagnosticPluginGraph() @@ -80,5 +93,58 @@ get { return _collection.UseDefaultFile; } set { _collection.UseDefaultFile = value; } } + + public static ScanAssembliesExpression ScanAssemblies() + { + ScanAssembliesExpression expression = new ScanAssembliesExpression(); + _registry.addExpression(expression); + + return expression; + } + + public static CreatePluginFamilyExpression BuildInstancesOf<T>() + { + return _registry.BuildInstancesOf<T>(); + } + + public static InstanceExpression.InstanceTypeExpression AddInstanceOf<T>() + { + return _registry.AddInstanceOf<T>(); + } + + public static InstanceExpression.InstanceTypeExpression Instance<T>() + { + return Registry.Instance<T>(); + } + + public static PrototypeExpression<T> Prototype<T>(T prototype) + { + return new PrototypeExpression<T>(prototype); + } + + public static LiteralExpression<T> Object<T>(T instance) + { + return new LiteralExpression<T>(instance); + } + + public static LiteralExpression<T> AddInstanceOf<T>(T target) + { + return _registry.AddInstanceOf(target); + } + + public static PrototypeExpression<T> AddPrototypeInstanceOf<T>(T prototype) + { + return _registry.AddPrototypeInstanceOf(prototype); + } + + public static ProfileExpression CreateProfile(string profileName) + { + return _registry.CreateProfile(profileName); + } + + public static void AddRegistry(Registry registry) + { + _registries.Add(registry); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -2,6 +2,7 @@ using System.Xml; using NUnit.Framework; using StructureMap.Configuration; +using StructureMap.Configuration.DSL; using StructureMap.Graph; using StructureMap.Source; using StructureMap.Testing.TestData; @@ -45,7 +46,7 @@ ConfigurationParser parser = new ConfigurationParser(doc.DocumentElement); - NormalGraphBuilder builder = new NormalGraphBuilder(); + NormalGraphBuilder builder = new NormalGraphBuilder(new Registry[0]); parser.ParseProfilesAndMachines(builder); _defaults = builder.DefaultManager; Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -178,13 +178,15 @@ { Registry registry = new Registry(); - registry.ScanAssemblies().IncludeAssemblyContainingType<IWidget>(); + //registry.ScanAssemblies().IncludeAssemblyContainingType<IWidget>(); + + registry.AddInstanceOf<Rule>().UsingConcreteType<ARule>().WithName("Alias"); // Add an instance by specifying the ConcreteKey registry.AddInstanceOf<IWidget>() - .UsingConcreteTypeNamed("Color") + .UsingConcreteType<ColorWidget>() .WithName("Purple") .WithProperty("Color").EqualTo("Purple"); Added: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -0,0 +1,86 @@ +using System.Collections.Generic; +using NUnit.Framework; +using StructureMap.Configuration.DSL; +using StructureMap.Graph; +using StructureMap.Testing.Widget; +using StructureMap.Testing.Widget5; + +namespace StructureMap.Testing.Configuration.DSL +{ + [TestFixture] + public class RegistryIntegratedTester + { + [SetUp] + public void SetUp() + { + } + + [TearDown] + public void TearDown() + { + StructureMapConfiguration.ResetAll(); + ObjectFactory.Reset(); + } + + + [Test] + public void FindRegistries() + { + AssemblyGraph assembly = new AssemblyGraph("StructureMap.Testing.Widget5"); + List<Registry> list = assembly.FindRegistries(); + + Assert.AreEqual(3, list.Count); + Assert.Contains(new RedGreenRegistry(), list); + Assert.Contains(new YellowBlueRegistry(), list); + Assert.Contains(new BrownBlackRegistry(), list); + } + + [Test] + public void FindRegistriesWithinPluginGraphSeal() + { + PluginGraph graph = new PluginGraph(); + graph.Assemblies.Add("StructureMap.Testing.Widget5"); + graph.Seal(); + + List<string> colors = new List<string>(); + foreach (InstanceMemento memento in graph.PluginFamilies[typeof(IWidget)].Source.GetAllMementos() ) + { + colors.Add(memento.InstanceKey); + } + + Assert.Contains("Red", colors); + Assert.Contains("Green", colors); + Assert.Contains("Yellow", colors); + Assert.Contains("Blue", colors); + Assert.Contains("Brown", colors); + Assert.Contains("Black", colors); + } + + [Test] + public void AutomaticallyFindRegistryFromAssembly() + { + StructureMapConfiguration.ResetAll(); + StructureMapConfiguration.ScanAssemblies().IncludeAssemblyContainingType<RedGreenRegistry>(); + ObjectFactory.Reset(); + + List<string> colors = new List<string>(); + foreach (IWidget widget in ObjectFactory.GetAllInstances<IWidget>()) + { + if (!(widget is ColorWidget)) + { + continue; + } + + ColorWidget color = (ColorWidget) widget; + colors.Add(color.Color); + } + + Assert.Contains("Red", colors); + Assert.Contains("Green", colors); + Assert.Contains("Yellow", colors); + Assert.Contains("Blue", colors); + Assert.Contains("Brown", colors); + Assert.Contains("Black", colors); + } + } +} Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ScanAssembliesTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ScanAssembliesTester.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ScanAssembliesTester.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -1,7 +1,5 @@ using System.Reflection; using NUnit.Framework; -using Rhino.Mocks; -using StructureMap.Configuration.DSL; using StructureMap.Graph; using StructureMap.Testing.Widget3; @@ -13,19 +11,22 @@ [SetUp] public void SetUp() { + ObjectFactory.Reset(); } + [TearDown] + public void TearDown() + { + StructureMapConfiguration.ResetAll(); + ObjectFactory.Reset(); + } + [Test] public void ScanCallingAssembly() { - PluginGraph graph = new PluginGraph(); + StructureMapConfiguration.ScanAssemblies().IncludeTheCallingAssembly(); + PluginGraph graph = StructureMapConfiguration.GetPluginGraph(); - - using (Registry registry = new Registry(graph)) - { - registry.ScanAssemblies().IncludeTheCallingAssembly(); - } - AssemblyGraph assembly = new AssemblyGraph(Assembly.GetExecutingAssembly()); Assert.IsTrue(graph.Assemblies.Contains(assembly.AssemblyName)); } @@ -33,15 +34,9 @@ [Test] public void ScanAssemblyContainingType() { - PluginGraph graph = new PluginGraph(); + StructureMapConfiguration.ScanAssemblies().IncludeAssemblyContainingType<IGateway>(); + PluginGraph graph = StructureMapConfiguration.GetPluginGraph(); - - using (Registry registry = new Registry(graph)) - { - registry.ScanAssemblies() - .IncludeAssemblyContainingType<IGateway>(); - } - AssemblyGraph assembly = AssemblyGraph.ContainingType<IGateway>(); Assert.IsTrue(graph.Assemblies.Contains(assembly.AssemblyName)); } @@ -49,16 +44,11 @@ [Test] public void Combination1() { - PluginGraph graph = new PluginGraph(); + StructureMapConfiguration.ScanAssemblies() + .IncludeAssemblyContainingType<IGateway>() + .IncludeTheCallingAssembly(); + PluginGraph graph = StructureMapConfiguration.GetPluginGraph(); - - using (Registry registry = new Registry(graph)) - { - registry.ScanAssemblies() - .IncludeAssemblyContainingType<IGateway>() - .IncludeTheCallingAssembly(); - } - AssemblyGraph assembly = AssemblyGraph.ContainingType<IGateway>(); Assert.IsTrue(graph.Assemblies.Contains(assembly.AssemblyName)); @@ -70,23 +60,16 @@ [Test] public void Combination2() { - PluginGraph graph = new PluginGraph(); + StructureMapConfiguration.ScanAssemblies() + .IncludeTheCallingAssembly() + .IncludeAssemblyContainingType<IGateway>(); + PluginGraph graph = StructureMapConfiguration.GetPluginGraph(); - - using (Registry registry = new Registry(graph)) - { - registry.ScanAssemblies() - .IncludeTheCallingAssembly() - .IncludeAssemblyContainingType<IGateway>(); - - } - AssemblyGraph assembly = AssemblyGraph.ContainingType<IGateway>(); Assert.IsTrue(graph.Assemblies.Contains(assembly.AssemblyName)); assembly = new AssemblyGraph(Assembly.GetExecutingAssembly()); Assert.IsTrue(graph.Assemblies.Contains(assembly.AssemblyName)); } - } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DiagnosticGraphBuilderTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DiagnosticGraphBuilderTester.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap.Testing/Configuration/DiagnosticGraphBuilderTester.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -3,6 +3,7 @@ using NUnit.Framework; using StructureMap.Attributes; using StructureMap.Configuration; +using StructureMap.Configuration.DSL; using StructureMap.Configuration.Tokens; using StructureMap.Graph; using StructureMap.Testing.Configuration.Tokens; @@ -22,7 +23,7 @@ XmlDocument document = new XmlDocument(); document.LoadXml("<StructureMap/>"); - _builder = new DiagnosticGraphBuilder(); + _builder = new DiagnosticGraphBuilder(new Registry[0]); _report = _builder.Report; } Modified: trunk/Source/StructureMap.Testing/Configuration/NormalGraphBuilderTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/NormalGraphBuilderTester.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap.Testing/Configuration/NormalGraphBuilderTester.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -2,6 +2,7 @@ using NUnit.Framework; using StructureMap.Attributes; using StructureMap.Configuration; +using StructureMap.Configuration.DSL; using StructureMap.Graph; using StructureMap.Interceptors; @@ -19,7 +20,7 @@ builderMock.ExpectAndReturn("Build", chain, theScope); NormalGraphBuilder graphBuilder = - new NormalGraphBuilder((IInterceptorChainBuilder) builderMock.MockInstance); + new NormalGraphBuilder((IInterceptorChainBuilder) builderMock.MockInstance, new Registry[0]); TypePath typePath = new TypePath(GetType()); @@ -36,7 +37,7 @@ [Test] public void AddProfile() { - NormalGraphBuilder graphBuilder = new NormalGraphBuilder(); + NormalGraphBuilder graphBuilder = new NormalGraphBuilder(new Registry[0]); string profileName = "blue"; graphBuilder.AddProfile(profileName); @@ -49,7 +50,7 @@ [Test] public void AddDefaultForAProfile() { - NormalGraphBuilder graphBuilder = new NormalGraphBuilder(); + NormalGraphBuilder graphBuilder = new NormalGraphBuilder(new Registry[0]); string profileName = "blue"; string theTypeName = "the name of the type"; string theKey = "Key1"; @@ -67,7 +68,7 @@ [Test] public void AddMachineWithExistingProfile() { - NormalGraphBuilder graphBuilder = new NormalGraphBuilder(); + NormalGraphBuilder graphBuilder = new NormalGraphBuilder(new Registry[0]); string theMachineName = "some machine"; string theProfileName = "some profile"; graphBuilder.AddProfile(theProfileName); @@ -85,7 +86,7 @@ )] public void AddMachineWithProfileThatDoesNotExist() { - NormalGraphBuilder graphBuilder = new NormalGraphBuilder(); + NormalGraphBuilder graphBuilder = new NormalGraphBuilder(new Registry[0]); string theMachineName = "some machine"; string theProfileName = "some profile"; @@ -95,7 +96,7 @@ [Test] public void AddMachineWithoutProfile() { - NormalGraphBuilder graphBuilder = new NormalGraphBuilder(); + NormalGraphBuilder graphBuilder = new NormalGraphBuilder(new Registry[0]); string theMachineName = "some machine"; graphBuilder.AddMachine(theMachineName, string.Empty); @@ -109,7 +110,7 @@ [Test] public void AddAnOverrideToMachine() { - NormalGraphBuilder graphBuilder = new NormalGraphBuilder(); + NormalGraphBuilder graphBuilder = new NormalGraphBuilder(new Registry[0]); string theMachineName = "some machine"; graphBuilder.AddMachine(theMachineName, string.Empty); Modified: trunk/Source/StructureMap.Testing/ImplicitPluginFromPluggedTypeAttributeTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/ImplicitPluginFromPluggedTypeAttributeTester.cs 2007-03-26 14:31:28 UTC (rev 30) +++ trunk/Source/StructureMap.Testing/ImplicitPluginFromPluggedTypeAttributeTester.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -5,6 +5,7 @@ using Rhino.Mocks; using StructureMap.Attributes; using StructureMap.Configuration; +using StructureMap.Configuration.DSL; using StructureMap.Graph; using StructureMap.Testing.TestData; using StructureMap.Testing.Widget; @@ -42,7 +43,7 @@ [Test] public void NormalGraphBuilderHandlesTheInferredPlugin() { - NormalGraphBuilder builder = new NormalGraphBuilder(); + NormalGraphBuilder builder = new NormalGraphBuilder(new Registry[0]); TypePath pluginTypePath = new TypePath(typeof(IGateway)); builder.AddPluginFamily(pluginTypePath, "", new string[0], InstanceScope.PerRequest); @@ -61,7 +62,7 @@ [Test] public void CanBuildTheInstance() { - NormalGraphBuilder builder = new NormalGraphBuilder(); + NormalGraphBuilder builder = new NormalGraphBuilder(new Registry[0]); TypePath pluginTypePath = new TypePath(typeof(IGateway)); builder.AddPluginFamily(pluginTypePath, _memento.InstanceKey, new string[0], InstanceScope.PerRequest); Added: trunk/Source/StructureMap.Testing.Widget5/WidgetRegistry.cs =================================================================== --- trunk/Source/StructureMap.Testing.Widget5/WidgetRegistry.cs (rev 0) +++ trunk/Source/StructureMap.Testing.Widget5/WidgetRegistry.cs 2007-03-27 11:18:48 UTC (rev 31) @@ -0,0 +1,78 @@ +using StructureMap.Configuration.DSL; +using StructureMap.Testing.Widget; + +namespace StructureMap.Testing.Widget5 +{ + public class RedGreenRegistry : Registry + { + protected override void configure() + { + AddInstanceOf<IWidget>().UsingConcreteType<ColorWidget>().WithProperty("Color").EqualTo("Red").WithName("Red"); + AddInstanceOf<IWidget>().UsingConcreteType<ColorWidget>().WithProperty("Color").EqualTo("Green").WithName("Green"); + } + + + public override bool Equals(object obj) + { + if (this == obj) return true; + RedGreenRegistry redGreenRegistry = obj as RedGreenRegistry; + if (redGreenRegistry == null) return false; + return true; + } + + public override int GetHashCode() + { + return 0; + } + } + + public class YellowBlueRegistry : Registry + { + protected override void configure() + { + AddInstanceOf<IWidget>().UsingConcreteType<ColorWidget>().WithProperty("Color").EqualTo("Yellow").WithName("Yellow"); + AddInstanceOf<IWidget>().UsingConcreteType<ColorWidget>().WithProperty("Color").EqualTo("Blue").WithName("Blue"); + } + + + public override bool Equals(object obj) + { + if (this == obj) return true; + YellowBlueRegistry yellowBlueRegistry = obj as YellowBlueRegistry; + if (yellowBlueRegistry == null) return false; + return true; + } + + public override int GetHashCode() + { + return 0; + } + } + + public class BrownBlackRegistry : Registry + { + protected override void configure() + { + AddInstanceOf<IWidget>().UsingConcreteType<ColorWidget>().WithProperty("Color").EqualTo("Brown").WithName("Brown"); + AddInstanceOf<IWidget>().UsingConcreteType<ColorWidget>().WithProperty("Color").EqualTo("Black").WithName("Black"); + } + + + public override bool Equals(object obj) + { + if (this == obj) return true; + BrownBlackRegistry brownBlackRegistry = obj as BrownBlackRegistry; + if (brownBlackRegistry == null) return false; + return true; + } + + public override int GetHashCode() + { + return 0; + } + } + + public abstract class PurpleRegistry : Registry + { + } +} \ 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...> - 2007-03-26 15:33:17
|
Revision: 30 http://structuremap.svn.sourceforge.net/structuremap/?rev=30&view=rev Author: jeremydmiller Date: 2007-03-26 07:31:28 -0700 (Mon, 26 Mar 2007) Log Message: ----------- Deep testing on the Fluent Interface API Modified Paths: -------------- trunk/Source/StructureMap/Attributes/PluggableAttribute.cs trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/Graph/PluginFamily.cs trunk/Source/StructureMap/InstanceMemento.cs trunk/Source/StructureMap/MementoSource.cs trunk/Source/StructureMap/StructureMap.csproj trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj trunk/Source/StructureMap.Testing.Widget/IWidget.cs Added Paths: ----------- trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs Modified: trunk/Source/StructureMap/Attributes/PluggableAttribute.cs =================================================================== --- trunk/Source/StructureMap/Attributes/PluggableAttribute.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap/Attributes/PluggableAttribute.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -47,7 +47,7 @@ /// <returns></returns> public static PluggableAttribute InstanceOf(Type objectType) { - return (PluggableAttribute) GetCustomAttribute(objectType, typeof (PluggableAttribute), false); + return GetCustomAttribute(objectType, typeof (PluggableAttribute), false) as PluggableAttribute; } /// <summary> Modified: trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -41,8 +41,9 @@ Type pluggedType = typeof (T); ExpressionValidator.ValidatePluggabilityOf(pluggedType).IntoPluginType(_childType); + InstanceExpression child = new InstanceExpression(_childType); - child.UsingConcreteType<T>(); + child.TypeExpression().UsingConcreteType<T>(); _children.Add(child); _builder = child; Modified: trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -13,6 +13,7 @@ private Type _pluginType; private List<AlterPluginFamilyDelegate> _alterations = new List<AlterPluginFamilyDelegate>(); private InstanceScope _scope = InstanceScope.PerRequest; + private List<IExpression> _children = new List<IExpression>(); public CreatePluginFamilyExpression(Type pluginType) { @@ -25,6 +26,11 @@ InterceptorChainBuilder builder = new InterceptorChainBuilder(); family.InterceptionChain = builder.Build(_scope); + foreach (IExpression child in _children) + { + child.Configure(graph); + } + foreach (AlterPluginFamilyDelegate alteration in _alterations) { alteration(family); @@ -40,6 +46,7 @@ { builder.ValidatePluggability(_pluginType); + _children.Add(builder); _alterations.Add(delegate(PluginFamily family) { InstanceMemento memento = builder.BuildMemento(family); Modified: trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -3,7 +3,7 @@ namespace StructureMap.Configuration.DSL { - public interface IMementoBuilder + public interface IMementoBuilder : IExpression { InstanceMemento BuildMemento(PluginFamily family); InstanceMemento BuildMemento(PluginGraph graph); Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -53,22 +53,13 @@ } - public InstanceExpression UsingConcreteType<T>() - { - _pluggedType = typeof (T); - return this; - } + public PropertyExpression WithProperty(string propertyName) { return new PropertyExpression(this, _memento, propertyName); } - public InstanceExpression UsingConcreteTypeNamed(string concreteKey) - { - _memento.ConcreteKey = concreteKey; - return this; - } public ChildInstanceExpression Child<T>(string propertyName) { @@ -109,5 +100,34 @@ ExpressionValidator.ValidatePluggabilityOf(_pluggedType).IntoPluginType(pluginType); } + + internal InstanceTypeExpression TypeExpression() + { + return new InstanceTypeExpression(this); + } + + + public class InstanceTypeExpression + { + private readonly InstanceExpression _parent; + + internal InstanceTypeExpression(InstanceExpression parent) + { + _parent = parent; + } + + public InstanceExpression UsingConcreteType<T>() + { + _parent._pluggedType = typeof(T); + return _parent; + } + + public InstanceExpression UsingConcreteTypeNamed(string concreteKey) + { + _parent._memento.ConcreteKey = concreteKey; + return _parent; + } + + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -70,16 +70,17 @@ return new InstanceManager(_graph); } - public InstanceExpression AddInstanceOf<T>() + public InstanceExpression.InstanceTypeExpression AddInstanceOf<T>() { InstanceExpression expression = new InstanceExpression(typeof (T)); addExpression(expression); - return expression; + return expression.TypeExpression(); } - public static InstanceExpression Instance<T>() + public static InstanceExpression.InstanceTypeExpression Instance<T>() { - return new InstanceExpression(typeof (T)); + InstanceExpression expression = new InstanceExpression(typeof (T)); + return expression.TypeExpression(); } public static PrototypeExpression<T> Prototype<T>(T prototype) @@ -87,6 +88,11 @@ return new PrototypeExpression<T>(prototype); } + public static LiteralExpression<T> Object<T>(T instance) + { + return new LiteralExpression<T>(instance); + } + public LiteralExpression<T> AddInstanceOf<T>(T target) { LiteralExpression<T> literal = new LiteralExpression<T>(target); Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -35,7 +35,7 @@ private string _defaultKey = string.Empty; private Type _pluginType; - private MementoSource _source = new MemoryMementoSource(); + private MementoSource _source; private DefinitionSource _definitionSource = DefinitionSource.Implicit; private string _pluginTypeName; private InterceptionChain _interceptionChain; @@ -53,6 +53,8 @@ _plugins = new PluginCollection(this); _interceptionChain = new InterceptionChain(); + + Source = new MemoryMementoSource(); } public PluginFamily(Type pluginType, string defaultInstanceKey, MementoSource source) @@ -89,6 +91,8 @@ _pluginTypeName = path.AssemblyQualifiedName; _interceptionChain = new InterceptionChain(); initializeExplicit(path, defaultKey); + + Source = new MemoryMementoSource(); } Modified: trunk/Source/StructureMap/InstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/InstanceMemento.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap/InstanceMemento.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -164,18 +164,7 @@ if (memento == null) { - try - { - returnValue = manager.CreateInstance(typeName); - } - catch (StructureMapException) - { - throw; - } - catch (Exception ex) - { - throw new StructureMapException(209, ex, key, typeName); - } + returnValue = buildDefaultChild(key, manager, typeName); } else { @@ -186,7 +175,25 @@ return returnValue; } + private static object buildDefaultChild(string key, InstanceManager manager, string typeName) + { + object returnValue; + try + { + returnValue = manager.CreateInstance(typeName); + } + catch (StructureMapException) + { + throw; + } + catch (Exception ex) + { + throw new StructureMapException(209, ex, key, typeName); + } + return returnValue; + } + /// <summary> /// Not used yet. /// </summary> Modified: trunk/Source/StructureMap/MementoSource.cs =================================================================== --- trunk/Source/StructureMap/MementoSource.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap/MementoSource.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using StructureMap.Configuration.Tokens; using StructureMap.Graph; using StructureMap.Source; @@ -15,7 +16,7 @@ { private PluginFamily _family; private InstanceMemento _defaultMemento; - private Hashtable _externalMementos = new Hashtable(); + private Dictionary<string, InstanceMemento> _externalMementos = new Dictionary<string, InstanceMemento>(); protected MementoSource() : base() { @@ -32,7 +33,7 @@ if (_externalMementos.ContainsKey(instanceKey)) { - returnValue = (InstanceMemento) _externalMementos[instanceKey]; + returnValue = _externalMementos[instanceKey]; } else if (containsKey(instanceKey)) { @@ -88,6 +89,11 @@ else if (memento.IsReference) { returnValue = GetMemento(memento.ReferenceKey); + + if (returnValue == null) + { + throw new StructureMapException(200, memento.ReferenceKey, Family.PluginTypeName); + } } return returnValue; Modified: trunk/Source/StructureMap/StructureMap.csproj =================================================================== --- trunk/Source/StructureMap/StructureMap.csproj 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap/StructureMap.csproj 2007-03-26 14:31:28 UTC (rev 30) @@ -215,6 +215,7 @@ </Compile> <Compile Include="Configuration\DSL\ChildInstanceExpression.cs" /> <Compile Include="Configuration\DSL\CreatePluginFamilyExpression.cs" /> + <Compile Include="Configuration\DSL\ExpressionValidator.cs" /> <Compile Include="Configuration\DSL\IExpression.cs" /> <Compile Include="Configuration\DSL\IMementoBuilder.cs" /> <Compile Include="Configuration\DSL\InstanceDefaultExpression.cs" /> Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -21,20 +21,20 @@ // Add an instance with properties registry.AddInstanceOf<IWidget>() + .UsingConcreteType<ColorWidget>() .WithName("DarkGreen") - .UsingConcreteType<ColorWidget>() .WithProperty("Color").EqualTo("DarkGreen"); // Add an instance by specifying the ConcreteKey registry.AddInstanceOf<IWidget>() + .UsingConcreteTypeNamed("Color") .WithName("Purple") - .UsingConcreteTypeNamed("Color") .WithProperty("Color").EqualTo("Purple"); // Pull a property from the App config registry.AddInstanceOf<IWidget>() + .UsingConcreteType<ColorWidget>() .WithName("AppSetting") - .UsingConcreteType<ColorWidget>() .WithProperty("Color").EqualToAppSetting("Color"); @@ -184,8 +184,8 @@ // Add an instance by specifying the ConcreteKey registry.AddInstanceOf<IWidget>() + .UsingConcreteTypeNamed("Color") .WithName("Purple") - .UsingConcreteTypeNamed("Color") .WithProperty("Color").EqualTo("Purple"); // Specify a new Instance, override a dependency with a named instance @@ -217,6 +217,20 @@ { get { return _widget; } } + + + public override bool Equals(object obj) + { + if (this == obj) return true; + WidgetRule widgetRule = obj as WidgetRule; + if (widgetRule == null) return false; + return Equals(_widget, widgetRule._widget); + } + + public override int GetHashCode() + { + return _widget != null ? _widget.GetHashCode() : 0; + } } public class WidgetThing : IWidget Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -40,7 +40,8 @@ MemoryInstanceMemento memento = new MemoryInstanceMemento(); ChildInstanceExpression expression = new ChildInstanceExpression(instance, memento, "a property", typeof(IType)); - InstanceExpression child = new InstanceExpression(typeof(IType)).UsingConcreteType<AbstractType>(); + InstanceExpression child = Registry.Instance<IType>().UsingConcreteType<AbstractType>(); + expression.Is(child); } } Added: trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -0,0 +1,180 @@ +using NUnit.Framework; +using Rhino.Mocks; +using StructureMap.Configuration.DSL; +using StructureMap.Testing.Widget; + +namespace StructureMap.Testing.Configuration.DSL +{ + [TestFixture] + public class DeepInstanceTester + { + private Thing _prototype = new Thing(4, "Jeremy", .333, new WidgetRule(new ColorWidget("yellow"))); + + private void assertThingMatches(Registry registry) + { + IInstanceManager manager = registry.BuildInstanceManager(); + Thing actual = manager.CreateInstance<Thing>(); + Assert.AreEqual(_prototype, actual); + } + + [Test] + public void DeepInstanceTest1() + { + Registry registry = new Registry(); + InstanceExpression widgetExpression = Registry.Instance<IWidget>() + .UsingConcreteType<ColorWidget>() + .WithProperty("Color").EqualTo("yellow"); + + InstanceExpression ruleExpression = Registry.Instance<Rule>() + .UsingConcreteType<WidgetRule>() + .Child<IWidget>().Is(widgetExpression); + + registry.BuildInstancesOf<Thing>().TheDefaultIs( + Registry.Instance<Thing>() + .UsingConcreteType<Thing>() + .WithProperty("name").EqualTo("Jeremy") + .WithProperty("count").EqualTo(4) + .WithProperty("average").EqualTo(.333) + .Child<Rule>().Is( + ruleExpression + ) + ); + + assertThingMatches(registry); + } + + [Test] + public void DeepInstance2() + { + Registry registry = new Registry(); + registry.BuildInstancesOf<IWidget>().TheDefaultIs( + Registry.Instance<IWidget>().UsingConcreteType<ColorWidget>() + .WithProperty("Color").EqualTo("yellow") + ); + + registry.BuildInstancesOf<Rule>().TheDefaultIsConcreteType<WidgetRule>(); + + registry.BuildInstancesOf<Thing>().TheDefaultIs( + Registry.Instance<Thing>() + .UsingConcreteType<Thing>() + .WithProperty("average").EqualTo(.333) + .WithProperty("name").EqualTo("Jeremy") + .WithProperty("count").EqualTo(4) + ); + + assertThingMatches(registry); + } + + [Test] + public void DeepInstance3() + { + Registry registry = new Registry(); + registry.BuildInstancesOf<IWidget>().TheDefaultIs( + Registry.Object(new ColorWidget("yellow")) + ); + + registry.BuildInstancesOf<Rule>().TheDefaultIsConcreteType<WidgetRule>(); + + registry.BuildInstancesOf<Thing>().TheDefaultIs( + Registry.Instance<Thing>() + .UsingConcreteType<Thing>() + .WithProperty("average").EqualTo(.333) + .WithProperty("name").EqualTo("Jeremy") + .WithProperty("count").EqualTo(4) + ); + + assertThingMatches(registry); + } + + + [Test] + public void DeepInstance4() + { + Registry registry = new Registry(); + registry.BuildInstancesOf<IWidget>().TheDefaultIs( + Registry.Prototype(new ColorWidget("yellow")) + ); + + registry.BuildInstancesOf<Rule>().TheDefaultIsConcreteType<WidgetRule>(); + + registry.BuildInstancesOf<Thing>().TheDefaultIs( + Registry.Instance<Thing>() + .UsingConcreteType<Thing>() + .WithProperty("average").EqualTo(.333) + .WithProperty("name").EqualTo("Jeremy") + .WithProperty("count").EqualTo(4) + ); + + assertThingMatches(registry); + } + + + + [Test] + public void DeepInstance5() + { + Registry registry = new Registry(); + + registry.AddInstanceOf<IWidget>() + .UsingConcreteType<ColorWidget>() + .WithName("Yellow") + .WithProperty("Color").EqualTo("yellow"); + + registry.AddInstanceOf<Rule>() + .UsingConcreteType<WidgetRule>() + .WithName("TheWidgetRule") + .Child<IWidget>().IsNamedInstance("Yellow"); + + registry.BuildInstancesOf<Thing>().TheDefaultIs( + Registry.Instance<Thing>() + .UsingConcreteType<Thing>() + .WithProperty("average").EqualTo(.333) + .WithProperty("name").EqualTo("Jeremy") + .WithProperty("count").EqualTo(4) + .Child<Rule>().IsNamedInstance("TheWidgetRule") + ); + + assertThingMatches(registry); + } + + } + + public class Thing + { + private int _count; + private string _name; + private double _average; + private Rule _rule; + + + public Thing(int count, string name, double average, Rule rule) + { + _count = count; + _name = name; + _average = average; + _rule = rule; + } + + + public override bool Equals(object obj) + { + if (this == obj) return true; + Thing thing = obj as Thing; + if (thing == null) return false; + if (_count != thing._count) return false; + if (!Equals(_name, thing._name)) return false; + if (_average != thing._average) return false; + if (!Equals(_rule, thing._rule)) return false; + return true; + } + + public override int GetHashCode() + { + int result = _count; + result = 29*result + (_name != null ? _name.GetHashCode() : 0); + result = 29*result + _average.GetHashCode(); + result = 29*result + (_rule != null ? _rule.GetHashCode() : 0); + return result; + } + } +} Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -25,9 +25,7 @@ [Test, ExpectedException(typeof(StructureMapException))] public void BlowUpIfNoPropertyIsFoundForType() { - InstanceExpression expression = new InstanceExpression(typeof(IWidget)); - expression.UsingConcreteType<AWidget>(); - expression.Child<Rule>(); + Registry.Instance<IWidget>().UsingConcreteType<AWidget>().Child<Rule>(); } } } Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-03-26 14:31:28 UTC (rev 30) @@ -185,8 +185,10 @@ <SubType>Code</SubType> </Compile> <Compile Include="Configuration\DSL\AddInstanceTester.cs" /> + <Compile Include="Configuration\DSL\ChildInstanceExpressionTester.cs" /> <Compile Include="Configuration\DSL\CreatePluginFamilyTester.cs" /> <Compile Include="Configuration\DSL\CreateProfileTester.cs" /> + <Compile Include="Configuration\DSL\DeepInstanceTester.cs" /> <Compile Include="Configuration\DSL\InstanceExpressionTester.cs" /> <Compile Include="Configuration\DSL\LiteralExpressionTester.cs" /> <Compile Include="Configuration\DSL\ProfileExpressionTester.cs" /> Modified: trunk/Source/StructureMap.Testing.Widget/IWidget.cs =================================================================== --- trunk/Source/StructureMap.Testing.Widget/IWidget.cs 2007-03-26 01:52:39 UTC (rev 29) +++ trunk/Source/StructureMap.Testing.Widget/IWidget.cs 2007-03-26 14:31:28 UTC (rev 30) @@ -8,7 +8,7 @@ } [Pluggable("Color", "Only for testing")] - public class ColorWidget : IWidget + public class ColorWidget : IWidget, ICloneable { private string _Color; @@ -31,6 +31,24 @@ } #endregion + + public override bool Equals(object obj) + { + if (this == obj) return true; + ColorWidget colorWidget = obj as ColorWidget; + if (colorWidget == null) return false; + return Equals(_Color, colorWidget._Color); + } + + public override int GetHashCode() + { + return _Color != null ? _Color.GetHashCode() : 0; + } + + public object Clone() + { + return this.MemberwiseClone(); + } } [Pluggable("AWidget")] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2007-03-26 01:52:42
|
Revision: 29 http://structuremap.svn.sourceforge.net/structuremap/?rev=29&view=rev Author: jeremydmiller Date: 2007-03-25 18:52:39 -0700 (Sun, 25 Mar 2007) Log Message: ----------- Adding some defensive programming to the Fluent Interface API Modified Paths: -------------- trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/LiteralExpression.cs trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs trunk/Source/StructureMap/Configuration/DSL/PrototypeExpression.cs trunk/Source/StructureMap/Graph/Plugin.cs trunk/Source/StructureMap/StructureMapException.resx trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs Added Paths: ----------- trunk/Source/StructureMap/Configuration/DSL/ExpressionValidator.cs trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs Modified: trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap/Configuration/DSL/ChildInstanceExpression.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -21,7 +21,13 @@ _propertyName = propertyName; } + public ChildInstanceExpression(InstanceExpression instance, MemoryInstanceMemento memento, string propertyName, Type childType) + : this(instance, memento, propertyName) + { + _childType = childType; + } + public InstanceExpression IsNamedInstance(string instanceKey) { MemoryInstanceMemento child = MemoryInstanceMemento.CreateReferencedInstanceMemento(instanceKey); @@ -30,9 +36,11 @@ return _instance; } - // TODO -- negative case if the concrete type cannot be an implicit instance public InstanceExpression IsConcreteType<T>() { + Type pluggedType = typeof (T); + ExpressionValidator.ValidatePluggabilityOf(pluggedType).IntoPluginType(_childType); + InstanceExpression child = new InstanceExpression(_childType); child.UsingConcreteType<T>(); _children.Add(child); @@ -70,6 +78,11 @@ public InstanceExpression Is(InstanceExpression child) { + if (child.PluggedType != null && _childType != null) + { + ExpressionValidator.ValidatePluggabilityOf(child.PluggedType).IntoPluginType(_childType); + } + _children.Add(child); MemoryInstanceMemento childMemento = MemoryInstanceMemento.CreateReferencedInstanceMemento(child.InstanceKey); Modified: trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -19,7 +19,7 @@ _pluginType = pluginType; } - public void Configure(PluginGraph graph) + void IExpression.Configure(PluginGraph graph) { PluginFamily family = graph.LocateOrCreateFamilyForType(_pluginType); InterceptorChainBuilder builder = new InterceptorChainBuilder(); @@ -36,26 +36,10 @@ graph.Assemblies.Add(assembly); } - public CreatePluginFamilyExpression WithDefaultConcreteType<T>() - { - Plugin plugin = addPlugin<T>(); - - _alterations.Add(delegate(PluginFamily family) { family.DefaultInstanceKey = plugin.ConcreteKey; }); - - return this; - } - - private Plugin addPlugin<T>() - { - Plugin plugin = Plugin.CreateImplicitPlugin(typeof (T)); - - _alterations.Add(delegate(PluginFamily family) { family.Plugins.Add(plugin); }); - - return plugin; - } - public CreatePluginFamilyExpression TheDefaultIs(IMementoBuilder builder) { + builder.ValidatePluggability(_pluginType); + _alterations.Add(delegate(PluginFamily family) { InstanceMemento memento = builder.BuildMemento(family); @@ -68,6 +52,8 @@ public CreatePluginFamilyExpression TheDefaultIsConcreteType<T>() { + ExpressionValidator.ValidatePluggabilityOf(typeof(T)).IntoPluginType(_pluginType); + _alterations.Add(delegate(PluginFamily family) { Plugin plugin = family.Plugins.FindOrCreate(typeof (T)); Added: trunk/Source/StructureMap/Configuration/DSL/ExpressionValidator.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ExpressionValidator.cs (rev 0) +++ trunk/Source/StructureMap/Configuration/DSL/ExpressionValidator.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -0,0 +1,35 @@ +using System; +using StructureMap.Graph; + +namespace StructureMap.Configuration.DSL +{ + public static class ExpressionValidator + { + public static ValidateExpression ValidatePluggabilityOf(Type pluggedType) + { + return new ValidateExpression(pluggedType); + } + + + public class ValidateExpression + { + private readonly Type _pluggedType; + + public ValidateExpression(Type pluggedType) + { + _pluggedType = pluggedType; + } + + public void IntoPluginType(Type pluginType) + { + if (!Plugin.CanBeCast(pluginType, _pluggedType)) + { + throw new StructureMapException( + 303, + TypePath.GetAssemblyQualifiedName(_pluggedType), + TypePath.GetAssemblyQualifiedName(pluginType)); + } + } + } + } +} \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -1,3 +1,4 @@ +using System; using StructureMap.Graph; namespace StructureMap.Configuration.DSL @@ -7,5 +8,7 @@ InstanceMemento BuildMemento(PluginFamily family); InstanceMemento BuildMemento(PluginGraph graph); void SetInstanceName(string instanceKey); + + void ValidatePluggability(Type pluginType); } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -22,7 +22,7 @@ return _parent; } - public void Configure(Profile profile, PluginGraph graph) + internal void Configure(Profile profile, PluginGraph graph) { if (!string.IsNullOrEmpty(_instanceKey)) { @@ -40,8 +40,10 @@ InstanceDefault instanceDefault = new InstanceDefault(_pluginType, defaultKey); profile.AddOverride(instanceDefault); } - - // TODO throw up!!! + else + { + throw new StructureMapException(304, TypePath.GetAssemblyQualifiedName(_pluginType)); + } } public ProfileExpression Use(IMementoBuilder mementoBuilder) Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -12,6 +12,12 @@ { } + + internal Type PluggedType + { + get { return _pluggedType; } + } + protected override void buildMemento() { _memento = new MemoryInstanceMemento(); @@ -75,8 +81,13 @@ public ChildInstanceExpression Child<T>() { - // TODO -- what if the property can't be found string propertyName = findPropertyName<T>(); + + if (string.IsNullOrEmpty(propertyName)) + { + throw new StructureMapException(305, TypePath.GetAssemblyQualifiedName(typeof (T))); + } + ChildInstanceExpression child = new ChildInstanceExpression(this, _memento, propertyName); addChildExpression(child); child.ChildType = typeof (T); @@ -88,5 +99,15 @@ Plugin plugin = Plugin.CreateImplicitPlugin(_pluggedType); return plugin.FindFirstConstructorArgumentOfType<T>(); } + + public override void ValidatePluggability(Type pluginType) + { + if (_pluggedType == null) + { + return; + } + + ExpressionValidator.ValidatePluggabilityOf(_pluggedType).IntoPluginType(pluginType); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/LiteralExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/LiteralExpression.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap/Configuration/DSL/LiteralExpression.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -1,3 +1,4 @@ +using System; using StructureMap.Graph; namespace StructureMap.Configuration.DSL @@ -36,5 +37,10 @@ { _memento = new LiteralMemento(null); } + + public override void ValidatePluggability(Type pluginType) + { + ExpressionValidator.ValidatePluggabilityOf(_target.GetType()).IntoPluginType(pluginType); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -88,6 +88,8 @@ _instanceKey = instanceKey; } + public abstract void ValidatePluggability(Type pluginType); + protected void addChildExpression(IExpression expression) { _children.Add(expression); Modified: trunk/Source/StructureMap/Configuration/DSL/PrototypeExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/PrototypeExpression.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap/Configuration/DSL/PrototypeExpression.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -37,5 +37,10 @@ { _memento = new PrototypeMemento(string.Empty, (ICloneable) _prototype); } + + public override void ValidatePluggability(Type pluginType) + { + ExpressionValidator.ValidatePluggabilityOf(_prototype.GetType()).IntoPluginType(pluginType); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Graph/Plugin.cs =================================================================== --- trunk/Source/StructureMap/Graph/Plugin.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap/Graph/Plugin.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -82,6 +82,11 @@ /// <returns></returns> public static bool CanBeCast(Type pluginType, Type pluggedType) { + if (pluggedType.IsInterface || pluggedType.IsAbstract) + { + return false; + } + if (GenericsPluginGraph.CanBeCast(pluginType, pluggedType)) { return true; Modified: trunk/Source/StructureMap/StructureMapException.resx =================================================================== --- trunk/Source/StructureMap/StructureMapException.resx 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap/StructureMapException.resx 2007-03-26 01:52:39 UTC (rev 29) @@ -237,4 +237,13 @@ <data name="302" xml:space="preserve"> <value>There is no argument of type {0} for concrete type {1}</value> </data> + <data name="303" xml:space="preserve"> + <value>Type {0} is either abstract or cannot be plugged into Type {1}</value> + </data> + <data name="304" xml:space="preserve"> + <value>Profile or Machine default for {0} not completely specified</value> + </data> + <data name="305" xml:space="preserve"> + <value>There is no constructor property found of type {0}</value> + </data> </root> \ No newline at end of file Added: trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ChildInstanceExpressionTester.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -0,0 +1,60 @@ +using NUnit.Framework; +using StructureMap.Configuration.DSL; +using StructureMap.Testing.Widget4; + +namespace StructureMap.Testing.Configuration.DSL +{ + [TestFixture] + public class ChildInstanceExpressionTester + { + [SetUp] + public void SetUp() + { + } + + [Test, ExpectedException(typeof(StructureMapException), "StructureMap Exception Code: 303\nType System.String,mscorlib is either abstract or cannot be plugged into Type StructureMap.Testing.Configuration.DSL.IType,StructureMap.Testing")] + public void CantCastTheRequestedConcreteType() + { + InstanceExpression instance = new InstanceExpression(typeof(IStrategy)); + MemoryInstanceMemento memento = new MemoryInstanceMemento(); + + ChildInstanceExpression expression = new ChildInstanceExpression(instance, memento, "a property", typeof(IType)); + expression.IsConcreteType<string>(); + } + + [Test, ExpectedException(typeof(StructureMapException), "StructureMap Exception Code: 303\nType StructureMap.Testing.Configuration.DSL.AbstractType,StructureMap.Testing is either abstract or cannot be plugged into Type StructureMap.Testing.Configuration.DSL.IType,StructureMap.Testing")] + public void CantCastTheRequestedConcreteType2() + { + InstanceExpression instance = new InstanceExpression(typeof(IStrategy)); + MemoryInstanceMemento memento = new MemoryInstanceMemento(); + + ChildInstanceExpression expression = new ChildInstanceExpression(instance, memento, "a property", typeof(IType)); + expression.IsConcreteType<AbstractType>(); + } + + + [Test, ExpectedException(typeof(StructureMapException), "StructureMap Exception Code: 303\nType StructureMap.Testing.Configuration.DSL.AbstractType,StructureMap.Testing is either abstract or cannot be plugged into Type StructureMap.Testing.Configuration.DSL.IType,StructureMap.Testing")] + public void CantCastTheRequestedPluggedType3() + { + InstanceExpression instance = new InstanceExpression(typeof(IStrategy)); + MemoryInstanceMemento memento = new MemoryInstanceMemento(); + + ChildInstanceExpression expression = new ChildInstanceExpression(instance, memento, "a property", typeof(IType)); + InstanceExpression child = new InstanceExpression(typeof(IType)).UsingConcreteType<AbstractType>(); + expression.Is(child); + } + } + + public interface IType + { + } + + public abstract class AbstractType : IType + { + } + + public class ConcreteType : AbstractType + { + + } +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -17,6 +17,13 @@ } + [Test, ExpectedException(typeof(StructureMapException))] + public void TheConceteTypeDoesNotCase() + { + Registry registry = new Registry(); + registry.BuildInstancesOf<Rule>().TheDefaultIsConcreteType<IWidget>(); + } + [Test] public void TheDefaultInstanceIsConcreteType() { @@ -66,7 +73,7 @@ using (Registry registry = new Registry(pluginGraph)) { // Specify the default implementation for an interface - registry.BuildInstancesOf<IGateway>().WithDefaultConcreteType<StubbedGateway>(); + registry.BuildInstancesOf<IGateway>().TheDefaultIsConcreteType<StubbedGateway>(); } Assert.IsTrue(pluginGraph.PluginFamilies.Contains<IGateway>()); @@ -142,7 +149,7 @@ PluginGraph pluginGraph = new PluginGraph(); using (Registry registry = new Registry(pluginGraph)) { - registry.BuildInstancesOf<IGateway>().WithDefaultConcreteType<FakeGateway>(); + registry.BuildInstancesOf<IGateway>().TheDefaultIsConcreteType<FakeGateway>(); } Assert.IsTrue(pluginGraph.PluginFamilies.Contains<IGateway>()); Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs 2007-03-25 02:56:13 UTC (rev 28) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/InstanceExpressionTester.cs 2007-03-26 01:52:39 UTC (rev 29) @@ -21,5 +21,13 @@ PluginGraph pluginGraph = new PluginGraph(); ((IExpression)expression).Configure(pluginGraph); } + + [Test, ExpectedException(typeof(StructureMapException))] + public void BlowUpIfNoPropertyIsFoundForType() + { + InstanceExpression expression = new InstanceExpression(typeof(IWidget)); + expression.UsingConcreteType<AWidget>(); + expression.Child<Rule>(); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2007-03-25 02:56:21
|
Revision: 28 http://structuremap.svn.sourceforge.net/structuremap/?rev=28&view=rev Author: jeremydmiller Date: 2007-03-24 19:56:13 -0700 (Sat, 24 Mar 2007) Log Message: ----------- Pulling out the IInstanceManager interface Modified Paths: -------------- trunk/Source/CommonAssemblyInfo.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/Graph/AssemblyGraph.cs trunk/Source/StructureMap/Graph/Plugin.cs trunk/Source/StructureMap/Graph/PluginGraph.cs trunk/Source/StructureMap/InstanceManager.cs trunk/Source/StructureMap/StructureMap.csproj trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs Added Paths: ----------- trunk/Source/StructureMap/IInstanceManager.cs Modified: trunk/Source/CommonAssemblyInfo.cs =================================================================== --- trunk/Source/CommonAssemblyInfo.cs 2007-03-25 02:43:09 UTC (rev 27) +++ trunk/Source/CommonAssemblyInfo.cs 2007-03-25 02:56:13 UTC (rev 28) @@ -1,5 +1,7 @@ +using System; using System.Reflection; using System.Runtime.InteropServices; + //------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. @@ -10,10 +12,11 @@ // </auto-generated> //------------------------------------------------------------------------------ -[assembly : ComVisible(false)] -[assembly : AssemblyVersion("1.0.0.0000")] -[assembly : AssemblyCopyrightAttribute("Copyright (c) 2005, Jeremy D. Miller, Jeffrey Palermo")] -[assembly : AssemblyProductAttribute("StructureMap")] -[assembly : AssemblyCompanyAttribute("")] -[assembly : AssemblyConfigurationAttribute("release")] -[assembly : AssemblyInformationalVersionAttribute("1.0.0.0000")] \ No newline at end of file +[assembly: ComVisibleAttribute(false)] +[assembly: AssemblyVersionAttribute("1.0.0.0000")] +[assembly: AssemblyCopyrightAttribute("Copyright (c) 2005, Jeremy D. Miller, Jeffrey Palermo")] +[assembly: AssemblyProductAttribute("StructureMap")] +[assembly: AssemblyCompanyAttribute("")] +[assembly: AssemblyConfigurationAttribute("release")] +[assembly: AssemblyInformationalVersionAttribute("1.0.0.0000")] + Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-25 02:43:09 UTC (rev 27) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-25 02:56:13 UTC (rev 28) @@ -63,7 +63,7 @@ return expression; } - public InstanceManager BuildInstanceManager() + public IInstanceManager BuildInstanceManager() { configurePluginGraph(_graph); _graph.ReadDefaults(); Modified: trunk/Source/StructureMap/Graph/AssemblyGraph.cs =================================================================== --- trunk/Source/StructureMap/Graph/AssemblyGraph.cs 2007-03-25 02:43:09 UTC (rev 27) +++ trunk/Source/StructureMap/Graph/AssemblyGraph.cs 2007-03-25 02:56:13 UTC (rev 28) @@ -158,7 +158,7 @@ public static AssemblyGraph ContainingType<T>() { - return new AssemblyGraph(typeof(T).Assembly); + return new AssemblyGraph(typeof (T).Assembly); } public Type FindTypeByFullName(string fullName) Modified: trunk/Source/StructureMap/Graph/Plugin.cs =================================================================== --- trunk/Source/StructureMap/Graph/Plugin.cs 2007-03-25 02:43:09 UTC (rev 27) +++ trunk/Source/StructureMap/Graph/Plugin.cs 2007-03-25 02:56:13 UTC (rev 28) @@ -102,7 +102,8 @@ PluggableAttribute att = PluggableAttribute.InstanceOf(pluggedType); if (att == null) { - return new Plugin(pluggedType, TypePath.GetAssemblyQualifiedName(pluggedType), Graph.DefinitionSource.Implicit); + return + new Plugin(pluggedType, TypePath.GetAssemblyQualifiedName(pluggedType), DefinitionSource.Implicit); } else { @@ -396,15 +397,17 @@ public override int GetHashCode() { - return (_pluggedType != null ? _pluggedType.GetHashCode() : 0) + 29*(_concreteKey != null ? _concreteKey.GetHashCode() : 0); + return + (_pluggedType != null ? _pluggedType.GetHashCode() : 0) + + 29*(_concreteKey != null ? _concreteKey.GetHashCode() : 0); } public string FindFirstConstructorArgumentOfType<T>() { - ConstructorInfo ctor = this.GetConstructor(); + ConstructorInfo ctor = GetConstructor(); foreach (ParameterInfo info in ctor.GetParameters()) { - if (info.ParameterType.Equals(typeof(T))) + if (info.ParameterType.Equals(typeof (T))) { return info.Name; } Modified: trunk/Source/StructureMap/Graph/PluginGraph.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginGraph.cs 2007-03-25 02:43:09 UTC (rev 27) +++ trunk/Source/StructureMap/Graph/PluginGraph.cs 2007-03-25 02:56:13 UTC (rev 28) @@ -160,7 +160,7 @@ public PluginFamily LocateOrCreateFamilyForType(Type pluginType) { buildFamilyIfMissing(pluginType); - return this.PluginFamilies[pluginType]; + return PluginFamilies[pluginType]; } private Type findTypeByFullName(string fullName) @@ -181,7 +181,5 @@ { _defaultManager.ReadDefaultsFromPluginGraph(this); } - - } } \ No newline at end of file Added: trunk/Source/StructureMap/IInstanceManager.cs =================================================================== --- trunk/Source/StructureMap/IInstanceManager.cs (rev 0) +++ trunk/Source/StructureMap/IInstanceManager.cs 2007-03-25 02:56:13 UTC (rev 28) @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using StructureMap.Graph; + +namespace StructureMap +{ + public interface IInstanceManager + { + T CreateInstance<T>(string instanceKey); + T CreateInstance<T>(); + T FillDependencies<T>(); + void Inject<T>(T instance); + IList<T> GetAllInstances<T>(); + void SetDefaultsToProfile(string profile); + + InstanceDefaultManager DefaultManager + { + get; + } + } +} \ No newline at end of file Modified: trunk/Source/StructureMap/InstanceManager.cs =================================================================== --- trunk/Source/StructureMap/InstanceManager.cs 2007-03-25 02:43:09 UTC (rev 27) +++ trunk/Source/StructureMap/InstanceManager.cs 2007-03-25 02:56:13 UTC (rev 28) @@ -1,7 +1,6 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Collections.Specialized; using NMock; using StructureMap.Exceptions; using StructureMap.Graph; @@ -12,10 +11,10 @@ /// <summary> /// A collection of IInstanceFactory's. /// </summary> - public class InstanceManager : IEnumerable + public class InstanceManager : IInstanceManager, IEnumerable { private Dictionary<Type, IInstanceFactory> _factories; - private HybridDictionary _filledTypeFactories; + private Dictionary<Type, InstanceFactory> _filledTypeFactories; private bool _failOnException = true; private GenericsPluginGraph _genericsGraph; private InstanceDefaultManager _defaultManager; @@ -26,7 +25,7 @@ public InstanceManager() { _factories = new Dictionary<Type, IInstanceFactory>(); - _filledTypeFactories = new HybridDictionary(); + _filledTypeFactories = new Dictionary<Type, InstanceFactory>(); _genericsGraph = new GenericsPluginGraph(); } @@ -174,7 +173,7 @@ public T CreateInstance<T>() { - return (T)CreateInstance(typeof(T)); + return (T) CreateInstance(typeof (T)); } /// <summary> @@ -202,7 +201,6 @@ } - /// <summary> /// Creates a new instance of the requested type using the InstanceMemento. Mostly used from other /// classes to link children members @@ -338,11 +336,11 @@ private InstanceFactory getFilledTypeFactory(Type type) { - if (!_filledTypeFactories.Contains(type)) + if (!_filledTypeFactories.ContainsKey(type)) { lock (this) { - if (!_filledTypeFactories.Contains(type)) + if (!_filledTypeFactories.ContainsKey(type)) { PluginFamily family = PluginFamily.CreateAutoFilledPluginFamily(type); InstanceFactory factory = new InstanceFactory(family, true); @@ -352,7 +350,7 @@ } } - return (InstanceFactory) _filledTypeFactories[type]; + return _filledTypeFactories[type]; } #region mocking @@ -390,14 +388,10 @@ /// <returns></returns> public bool IsMocked(Type TargetType) { - bool returnValue = false; - - returnValue = isInstanceFamilyMocked(this[TargetType]); - - return returnValue; + return isInstanceFamilyMocked(this[TargetType]); } - private bool isInstanceFamilyMocked(IInstanceFactory instanceFactory) + private static bool isInstanceFamilyMocked(IInstanceFactory instanceFactory) { bool returnValue = false; @@ -473,6 +467,11 @@ } } + public void Inject<T>(T instance) + { + InjectStub(typeof(T), instance); + } + #endregion public IEnumerator GetEnumerator() @@ -489,7 +488,7 @@ { List<T> list = new List<T>(); - foreach (T instance in this[typeof(T)].GetAllInstances()) + foreach (T instance in this[typeof (T)].GetAllInstances()) { list.Add(instance); } Modified: trunk/Source/StructureMap/StructureMap.csproj =================================================================== --- trunk/Source/StructureMap/StructureMap.csproj 2007-03-25 02:43:09 UTC (rev 27) +++ trunk/Source/StructureMap/StructureMap.csproj 2007-03-25 02:56:13 UTC (rev 28) @@ -450,6 +450,7 @@ <Compile Include="IInstanceFactory.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="IInstanceManager.cs" /> <Compile Include="InstanceBuilder.cs"> <SubType>Code</SubType> </Compile> Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2007-03-25 02:43:09 UTC (rev 27) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2007-03-25 02:56:13 UTC (rev 28) @@ -10,7 +10,7 @@ [TestFixture] public class AddInstanceTester { - private InstanceManager manager; + private IInstanceManager manager; private PluginGraph pluginGraph; [SetUp] @@ -104,7 +104,7 @@ .WithName("Orange") ); - InstanceManager mgr = registry.BuildInstanceManager(); + IInstanceManager mgr = registry.BuildInstanceManager(); ColorWidget orange = (ColorWidget) mgr.CreateInstance<IWidget>("Orange"); Assert.IsNotNull(orange); Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2007-03-25 02:43:09 UTC (rev 27) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2007-03-25 02:56:13 UTC (rev 28) @@ -25,7 +25,7 @@ // Needs to blow up if the concrete type can't be used registry.BuildInstancesOf<Rule>().TheDefaultIsConcreteType<ARule>(); - InstanceManager manager = registry.BuildInstanceManager(); + IInstanceManager manager = registry.BuildInstanceManager(); Assert.IsInstanceOfType(typeof(ARule), manager.CreateInstance<Rule>()); } @@ -85,7 +85,7 @@ Registry.Instance<IWidget>().UsingConcreteType<ColorWidget>().WithProperty("Color").EqualTo("Red") ); - InstanceManager manager = registry.BuildInstanceManager(); + IInstanceManager manager = registry.BuildInstanceManager(); ColorWidget widget = (ColorWidget) manager.CreateInstance<IWidget>(); Assert.AreEqual("Red", widget.Color); Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2007-03-25 02:43:09 UTC (rev 27) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2007-03-25 02:56:13 UTC (rev 28) @@ -46,7 +46,7 @@ Registry.Instance<IWidget>().UsingConcreteType<AWidget>() ); - InstanceManager manager = registry.BuildInstanceManager(); + IInstanceManager manager = registry.BuildInstanceManager(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2007-03-25 02:43:21
|
Revision: 27 http://structuremap.svn.sourceforge.net/structuremap/?rev=27&view=rev Author: jeremydmiller Date: 2007-03-24 19:43:09 -0700 (Sat, 24 Mar 2007) Log Message: ----------- 2.0 ifying, finishing up the Profile DSL support Modified Paths: -------------- trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/Configuration/DSL/ScanAssembliesExpression.cs trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs trunk/Source/StructureMap/Graph/Deployable.cs trunk/Source/StructureMap/Graph/InstanceDefault.cs trunk/Source/StructureMap/Graph/InstanceDefaultManager.cs trunk/Source/StructureMap/Graph/MachineOverride.cs trunk/Source/StructureMap/Graph/PluginFamily.cs trunk/Source/StructureMap/Graph/Profile.cs trunk/Source/StructureMap/InstanceManager.cs trunk/Source/StructureMap/Interceptors/HttpContextItemInterceptor.cs trunk/Source/StructureMap/StructureMap.csproj trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj Added Paths: ----------- trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs trunk/Source/StructureMap.Testing/Sample.xml Removed Paths: ------------- trunk/Source/StructureMap/Configuration/DSL/DefaultExpression.cs Deleted: trunk/Source/StructureMap/Configuration/DSL/DefaultExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/DefaultExpression.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Configuration/DSL/DefaultExpression.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -1,21 +0,0 @@ -using StructureMap.Graph; - -namespace StructureMap.Configuration.DSL -{ - public delegate void ConfigurePluginGraph(PluginGraph graph); - - public class DefaultExpression : IExpression - { - private readonly ConfigurePluginGraph _configure; - - public DefaultExpression(ConfigurePluginGraph configure) - { - _configure = configure; - } - - public void Configure(PluginGraph graph) - { - _configure(graph); - } - } -} \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Configuration/DSL/IMementoBuilder.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -5,5 +5,7 @@ public interface IMementoBuilder { InstanceMemento BuildMemento(PluginFamily family); + InstanceMemento BuildMemento(PluginGraph graph); + void SetInstanceName(string instanceKey); } } \ No newline at end of file Added: trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs (rev 0) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceDefaultExpression.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -0,0 +1,56 @@ +using System; +using StructureMap.Graph; + +namespace StructureMap.Configuration.DSL +{ + public class InstanceDefaultExpression + { + private readonly Type _pluginType; + private readonly ProfileExpression _parent; + private string _instanceKey = string.Empty; + private IMementoBuilder _mementoBuilder; + + public InstanceDefaultExpression(Type pluginType, ProfileExpression parent) + { + _pluginType = pluginType; + _parent = parent; + } + + public ProfileExpression UseNamedInstance(string instanceKey) + { + _instanceKey = instanceKey; + return _parent; + } + + public void Configure(Profile profile, PluginGraph graph) + { + if (!string.IsNullOrEmpty(_instanceKey)) + { + InstanceDefault instanceDefault = new InstanceDefault(_pluginType, _instanceKey); + profile.AddOverride(instanceDefault); + } + else if (_mementoBuilder != null) + { + string defaultKey = Profile.InstanceKeyForProfile(profile.ProfileName); + InstanceMemento memento = _mementoBuilder.BuildMemento(graph); + memento.InstanceKey = defaultKey; + + graph.PluginFamilies[_pluginType].AddInstance(memento); + + InstanceDefault instanceDefault = new InstanceDefault(_pluginType, defaultKey); + profile.AddOverride(instanceDefault); + } + + // TODO throw up!!! + } + + public ProfileExpression Use(IMementoBuilder mementoBuilder) + { + _mementoBuilder = mementoBuilder; + + return _parent; + } + + + } +} Modified: trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Configuration/DSL/MementoBuilder.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -9,6 +9,7 @@ { protected readonly Type _pluginType; protected List<IExpression> _children = new List<IExpression>(); + private string _instanceKey = null; public MementoBuilder(Type pluginType) { @@ -22,6 +23,12 @@ validate(); PluginFamily family = graph.LocateOrCreateFamilyForType((Type) _pluginType); configureMemento(family); + + if (!string.IsNullOrEmpty(_instanceKey)) + { + memento.InstanceKey = _instanceKey; + } + family.Source.AddExternalMemento(memento); foreach (IExpression child in _children) @@ -59,11 +66,28 @@ InstanceMemento IMementoBuilder.BuildMemento(PluginFamily family) { + return buildMementoFromFamily(family); + } + + private InstanceMemento buildMementoFromFamily(PluginFamily family) + { validate(); configureMemento(family); return memento; } + + InstanceMemento IMementoBuilder.BuildMemento(PluginGraph graph) + { + PluginFamily family = graph.LocateOrCreateFamilyForType(_pluginType); + return buildMementoFromFamily(family); + } + + public void SetInstanceName(string instanceKey) + { + _instanceKey = instanceKey; + } + protected void addChildExpression(IExpression expression) { _children.Add(expression); Modified: trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Configuration/DSL/ProfileExpression.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -1,13 +1,40 @@ using System; +using System.Collections.Generic; using StructureMap.Graph; namespace StructureMap.Configuration.DSL { public class ProfileExpression : IExpression { - public void Configure(PluginGraph graph) + private readonly string _profileName; + private List<InstanceDefaultExpression> _defaults = new List<InstanceDefaultExpression>(); + + public ProfileExpression(string profileName) { - throw new NotImplementedException(); + _profileName = profileName; } + + void IExpression.Configure(PluginGraph graph) + { + Profile profile = graph.DefaultManager.GetProfile(_profileName); + if (profile == null) + { + profile = new Profile(_profileName); + graph.DefaultManager.AddProfile(profile); + } + + foreach (InstanceDefaultExpression expression in _defaults) + { + expression.Configure(profile, graph); + } + } + + public InstanceDefaultExpression For<T>() + { + InstanceDefaultExpression defaultExpression = new InstanceDefaultExpression(typeof(T), this); + _defaults.Add(defaultExpression); + + return defaultExpression; + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -65,9 +65,9 @@ public InstanceManager BuildInstanceManager() { - PluginGraph graph = new PluginGraph(); - configurePluginGraph(graph); - return new InstanceManager(graph); + configurePluginGraph(_graph); + _graph.ReadDefaults(); + return new InstanceManager(_graph); } public InstanceExpression AddInstanceOf<T>() @@ -82,6 +82,11 @@ return new InstanceExpression(typeof (T)); } + public static PrototypeExpression<T> Prototype<T>(T prototype) + { + return new PrototypeExpression<T>(prototype); + } + public LiteralExpression<T> AddInstanceOf<T>(T target) { LiteralExpression<T> literal = new LiteralExpression<T>(target); @@ -97,5 +102,13 @@ return expression; } + + public ProfileExpression CreateProfile(string profileName) + { + ProfileExpression expression = new ProfileExpression(profileName); + addExpression(expression); + + return expression; + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/ScanAssembliesExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ScanAssembliesExpression.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Configuration/DSL/ScanAssembliesExpression.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -10,7 +10,7 @@ { private List<AssemblyGraph> _assemblies = new List<AssemblyGraph>(); - public void Configure(PluginGraph graph) + void IExpression.Configure(PluginGraph graph) { foreach (AssemblyGraph assembly in _assemblies) { @@ -18,11 +18,6 @@ } } - public IExpression[] ChildExpressions - { - get { return new IExpression[0]; } - } - public ScanAssembliesExpression IncludeTheCallingAssembly() { Assembly callingAssembly = findTheCallingAssembly(); Modified: trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Configuration/ProfileAndMachineParser.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -77,7 +77,7 @@ private void createOverrideInstance(string fullName, XmlElement instanceElement, WriteOverride function, string profileName) { - string key = profileName + "-Instance"; + string key = Profile.InstanceKeyForProfile(profileName); InstanceMemento memento = _creator.CreateMemento(instanceElement); memento.InstanceKey = key; Modified: trunk/Source/StructureMap/Graph/Deployable.cs =================================================================== --- trunk/Source/StructureMap/Graph/Deployable.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Graph/Deployable.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -1,4 +1,4 @@ -using System.Collections; +using System.Collections.Generic; namespace StructureMap.Graph { @@ -10,11 +10,11 @@ { public const string ALL = "All"; - private ArrayList _deploymentTargets; + private List<string> _deploymentTargets; public Deployable() { - _deploymentTargets = new ArrayList(); + _deploymentTargets = new List<string>(); } public Deployable(string[] deploymentTargets) : this() @@ -27,7 +27,7 @@ /// </summary> public string[] DeploymentTargets { - get { return (string[]) _deploymentTargets.ToArray(typeof (string)); } + get { return _deploymentTargets.ToArray(); } set { _deploymentTargets.Clear(); Modified: trunk/Source/StructureMap/Graph/InstanceDefault.cs =================================================================== --- trunk/Source/StructureMap/Graph/InstanceDefault.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Graph/InstanceDefault.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -19,6 +19,10 @@ _defaultKey = defaultKey; } + public InstanceDefault(Type pluginType, string defaultKey) : this(pluginType.FullName, defaultKey) + { + } + public string PluginTypeName { get { return _pluginTypeName; } Modified: trunk/Source/StructureMap/Graph/InstanceDefaultManager.cs =================================================================== --- trunk/Source/StructureMap/Graph/InstanceDefaultManager.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Graph/InstanceDefaultManager.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -1,5 +1,5 @@ using System; -using System.Collections; +using System.Collections.Generic; using StructureMap.Configuration; namespace StructureMap.Graph @@ -25,16 +25,16 @@ return machineName; } - private ArrayList _defaults; - private Hashtable _machineOverrides; - private Hashtable _profiles; + private List<InstanceDefault> _defaults; + private Dictionary<string, MachineOverride> _machineOverrides; + private Dictionary<string, Profile> _profiles; private string _defaultProfileName = string.Empty; public InstanceDefaultManager() : base() { - _defaults = new ArrayList(); - _machineOverrides = new Hashtable(); - _profiles = new Hashtable(); + _defaults = new List<InstanceDefault>(); + _machineOverrides = new Dictionary<string, MachineOverride>(); + _profiles = new Dictionary<string, Profile>(); } /// <summary> @@ -49,9 +49,12 @@ public void ReadDefaultsFromPluginGraph(PluginGraph graph) { + _defaults = new List<InstanceDefault>(); + foreach (PluginFamily family in graph.PluginFamilies) { - AddPluginFamilyDefault(family.PluginType.FullName, family.DefaultInstanceKey); + InstanceDefault instanceDefault = new InstanceDefault(family.PluginType, family.DefaultInstanceKey); + _defaults.Add(instanceDefault); } } @@ -106,7 +109,12 @@ /// <returns></returns> public Profile GetProfile(string profileName) { - return _profiles[profileName] as Profile; + if (!_profiles.ContainsKey(profileName)) + { + return null; + } + + return _profiles[profileName]; } /// <summary> @@ -118,7 +126,7 @@ { if (_machineOverrides.ContainsKey(machineName)) { - return (MachineOverride) _machineOverrides[machineName]; + return _machineOverrides[machineName]; } else { @@ -133,7 +141,7 @@ if (_profiles.ContainsKey(profileToFind)) { - return (Profile) _profiles[profileToFind]; + return _profiles[profileToFind]; } else { Modified: trunk/Source/StructureMap/Graph/MachineOverride.cs =================================================================== --- trunk/Source/StructureMap/Graph/MachineOverride.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Graph/MachineOverride.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Runtime.CompilerServices; using StructureMap.Configuration; using StructureMap.Configuration.Tokens; @@ -14,7 +15,7 @@ { private string _machineName; private Profile _profile = new Profile(string.Empty); - private Hashtable _defaults; + private Dictionary<string, InstanceDefault> _defaults; public MachineOverride(string machineName, Profile profile) : this(machineName) @@ -28,7 +29,7 @@ public MachineOverride(string machineName) : base() { _machineName = machineName; - _defaults = new Hashtable(); + _defaults = new Dictionary<string, InstanceDefault>(); } public string MachineName @@ -71,7 +72,7 @@ } else { - return ((InstanceDefault) _defaults[pluginTypeName]).DefaultKey; + return _defaults[pluginTypeName].DefaultKey; } } } Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -230,5 +230,10 @@ { _plugins.RemoveImplicitChildren(); } + + public void AddInstance(InstanceMemento memento) + { + _source.AddExternalMemento(memento); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Graph/Profile.cs =================================================================== --- trunk/Source/StructureMap/Graph/Profile.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Graph/Profile.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -1,5 +1,5 @@ using System; -using System.Collections; +using System.Collections.Generic; using System.Runtime.CompilerServices; using StructureMap.Configuration; using StructureMap.Configuration.Tokens; @@ -13,12 +13,12 @@ public class Profile : GraphObject { private string _profileName; - private Hashtable _defaults; + private Dictionary<string, InstanceDefault> _defaults; - public Profile(string profileName) : base() + public Profile(string profileName) { _profileName = profileName; - _defaults = new Hashtable(); + _defaults = new Dictionary<string, InstanceDefault>(); } public string ProfileName @@ -34,7 +34,7 @@ { if (_defaults.ContainsKey(pluginTypeName)) { - return ((InstanceDefault) _defaults[pluginTypeName]).DefaultKey; + return (_defaults[pluginTypeName]).DefaultKey; } else { @@ -129,5 +129,10 @@ { get { return ProfileName; } } + + public static string InstanceKeyForProfile(string profileName) + { + return profileName + "-Instance"; + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/InstanceManager.cs =================================================================== --- trunk/Source/StructureMap/InstanceManager.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/InstanceManager.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -485,6 +485,18 @@ return this[type].GetAllInstances(); } + public IList<T> GetAllInstances<T>() + { + List<T> list = new List<T>(); + + foreach (T instance in this[typeof(T)].GetAllInstances()) + { + list.Add(instance); + } + + return list; + } + public void SetDefaultsToProfile(string profile) { // The authenticated user may not have required privileges to read from Environment Modified: trunk/Source/StructureMap/Interceptors/HttpContextItemInterceptor.cs =================================================================== --- trunk/Source/StructureMap/Interceptors/HttpContextItemInterceptor.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/Interceptors/HttpContextItemInterceptor.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -12,6 +12,7 @@ public HttpContextItemInterceptor() : base() { + } private string getKey(string instanceKey) Modified: trunk/Source/StructureMap/StructureMap.csproj =================================================================== --- trunk/Source/StructureMap/StructureMap.csproj 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap/StructureMap.csproj 2007-03-25 02:43:09 UTC (rev 27) @@ -215,9 +215,9 @@ </Compile> <Compile Include="Configuration\DSL\ChildInstanceExpression.cs" /> <Compile Include="Configuration\DSL\CreatePluginFamilyExpression.cs" /> - <Compile Include="Configuration\DSL\DefaultExpression.cs" /> <Compile Include="Configuration\DSL\IExpression.cs" /> <Compile Include="Configuration\DSL\IMementoBuilder.cs" /> + <Compile Include="Configuration\DSL\InstanceDefaultExpression.cs" /> <Compile Include="Configuration\DSL\InstanceExpression.cs" /> <Compile Include="Configuration\DSL\LiteralExpression.cs" /> <Compile Include="Configuration\DSL\LiteralMemento.cs" /> Modified: trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserTester.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -1,3 +1,4 @@ +using System; using System.Xml; using NUnit.Framework; using StructureMap.Configuration; @@ -102,7 +103,8 @@ public void GotAllMachines() { string[] names = _defaults.GetMachineNames(); - Assert.AreEqual(new string[] {"SERVER", "GREEN-BOX"}, names); + Array.Sort(names); + Assert.AreEqual(new string[] {"GREEN-BOX", "SERVER" }, names); } [Test] Added: trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2007-03-25 02:43:09 UTC (rev 27) @@ -0,0 +1,62 @@ +using NUnit.Framework; +using Rhino.Mocks; +using StructureMap.Configuration.DSL; +using StructureMap.Graph; +using StructureMap.Testing.Widget; + +namespace StructureMap.Testing.Configuration.DSL +{ + [TestFixture] + public class ProfileExpressionTester + { + [SetUp] + public void SetUp() + { + + } + + [Test] + public void AddAProfileWithANamedDefault() + { + string theProfileName = "TheProfile"; + string theDefaultName = "TheDefaultName"; + + ProfileExpression expression = new ProfileExpression(theProfileName); + + ProfileExpression expression2 = expression.For<IWidget>().UseNamedInstance(theDefaultName); + Assert.AreSame(expression, expression2); + + PluginGraph graph = new PluginGraph(); + ((IExpression)expression).Configure(graph); + + Profile profile = graph.DefaultManager.GetProfile(theProfileName); + Assert.IsNotNull(profile); + Assert.AreEqual(new InstanceDefault[] { new InstanceDefault(typeof(IWidget), theDefaultName) }, profile.Defaults); + } + + [Test] + public void AddAProfileWithInlineInstanceDefinition() + { + string theProfileName = "TheProfile"; + + PluginGraph graph = new PluginGraph(); + Registry registry = new Registry(graph); + registry.CreateProfile(theProfileName) + .For<IWidget>().Use( + Registry.Instance<IWidget>().UsingConcreteType<AWidget>() + ); + + InstanceManager manager = registry.BuildInstanceManager(); + + + + Profile profile = manager.DefaultManager.GetProfile(theProfileName); + InstanceDefault instanceDefault = profile.Defaults[0]; + Assert.AreEqual(Profile.InstanceKeyForProfile(theProfileName), instanceDefault.DefaultKey); + + manager.SetDefaultsToProfile(theProfileName); + AWidget widget = (AWidget) manager.CreateInstance<IWidget>(); + Assert.IsNotNull(widget); + } + } +} Added: trunk/Source/StructureMap.Testing/Sample.xml =================================================================== --- trunk/Source/StructureMap.Testing/Sample.xml (rev 0) +++ trunk/Source/StructureMap.Testing/Sample.xml 2007-03-25 02:43:09 UTC (rev 27) @@ -0,0 +1,36 @@ +<StructureMap MementoStyle="Attribute" DefaultProfile="Development"> + <Assembly Name="SomeAssembly"/> + + <Profile Name="Production"> + <Override Type="SomeAssembly.IService" DefaultKey="Production"/> + </Profile> + + <Profile Name="Testing"> + <Override Type="SomeAssembly.IService" DefaultKey="Testing"/> + </Profile> + + <Profile Name="Development"> + <Override Type="SomeAssembly.IService" DefaultKey="Development"/> + </Profile> + + + <PluginFamily Type="SomeAssembly.IService" Assembly="SomeAssembly"> + <Plugin Type="SomeAssembly.ConcreteService" Assembly="SomeAssembly" ConcreteKey="Concrete"/> + + <Instance Type="Concrete" Key="Production"> + <Property Name="host" Value="PROD-SERVER"/> + <Property Name="port" Value="5050"/> + </Instance> + + <Instance Type="Concrete" Key="Testing"> + <Property Name="host" Value="TEST-SERVER"/> + <Property Name="port" Value="5050"/> + </Instance> + + <Instance Type="Concrete" Key="Development"> + <Property Name="host" Value="localhost"/> + <Property Name="port" Value="2000"/> + </Instance> + </PluginFamily> + +</StructureMap> Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-03-08 11:51:48 UTC (rev 26) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-03-25 02:43:09 UTC (rev 27) @@ -189,6 +189,7 @@ <Compile Include="Configuration\DSL\CreateProfileTester.cs" /> <Compile Include="Configuration\DSL\InstanceExpressionTester.cs" /> <Compile Include="Configuration\DSL\LiteralExpressionTester.cs" /> + <Compile Include="Configuration\DSL\ProfileExpressionTester.cs" /> <Compile Include="Configuration\DSL\RegistryTester.cs" /> <Compile Include="Configuration\DSL\ScanAssembliesTester.cs" /> <Compile Include="Configuration\FamilyParserTester.cs"> @@ -483,6 +484,9 @@ <ItemGroup> <EmbeddedResource Include="TestData\InlineInstanceInProfileAndMachine.xml" /> </ItemGroup> + <ItemGroup> + <Content Include="Sample.xml" /> + </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <PreBuildEvent> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |