From: <jer...@us...> - 2008-11-19 19:10:28
|
Revision: 195 http://structuremap.svn.sourceforge.net/structuremap/?rev=195&view=rev Author: jeremydmiller Date: 2008-11-19 19:10:25 +0000 (Wed, 19 Nov 2008) Log Message: ----------- Mild fix for a production issue with auto scanning open generic types Modified Paths: -------------- trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs trunk/Source/StructureMap/Graph/TypeRules.cs trunk/Source/StructureMap/Pipeline/HttpContextBuildPolicy.cs trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs trunk/Source/StructureMap.Testing/ModelQueryTester.cs Modified: trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs =================================================================== --- trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs 2008-10-27 02:13:42 UTC (rev 194) +++ trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs 2008-11-19 19:10:25 UTC (rev 195) @@ -15,6 +15,8 @@ public void Process(Type type, PluginGraph graph) { + + if (CanBeCast(_pluginType, type)) { graph.AddType(_pluginType, type); Modified: trunk/Source/StructureMap/Graph/TypeRules.cs =================================================================== --- trunk/Source/StructureMap/Graph/TypeRules.cs 2008-10-27 02:13:42 UTC (rev 194) +++ trunk/Source/StructureMap/Graph/TypeRules.cs 2008-11-19 19:10:25 UTC (rev 195) @@ -22,14 +22,25 @@ return false; } - if (GenericsPluginGraph.CanBeCast(pluginType, pluggedType)) + if (IsGeneric(pluginType)) { - return true; + return GenericsPluginGraph.CanBeCast(pluginType, pluggedType); } + if (IsGeneric(pluggedType)) + { + return false; + } + + return pluginType.IsAssignableFrom(pluggedType); } + public static bool IsGeneric(Type pluggedType) + { + return pluggedType.IsGenericTypeDefinition || pluggedType.ContainsGenericParameters; + } + /// <summary> /// Determines if the PluggedType is a valid Plugin into the /// PluginType Modified: trunk/Source/StructureMap/Pipeline/HttpContextBuildPolicy.cs =================================================================== --- trunk/Source/StructureMap/Pipeline/HttpContextBuildPolicy.cs 2008-10-27 02:13:42 UTC (rev 194) +++ trunk/Source/StructureMap/Pipeline/HttpContextBuildPolicy.cs 2008-11-19 19:10:25 UTC (rev 195) @@ -5,8 +5,9 @@ { public class HttpContextBuildPolicy : CacheInterceptor { - private readonly string _prefix = Guid.NewGuid().ToString(); + private string _prefix = Guid.NewGuid().ToString(); + public static bool HasContext() { return HttpContext.Current != null; Modified: trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs =================================================================== --- trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs 2008-10-27 02:13:42 UTC (rev 194) +++ trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs 2008-11-19 19:10:25 UTC (rev 195) @@ -4,15 +4,25 @@ { public class HybridBuildPolicy : IBuildInterceptor { + private readonly IBuildInterceptor _http; + private readonly IBuildInterceptor _threadLocal; + + public HybridBuildPolicy() + { + _http = new HttpContextBuildPolicy(); + _threadLocal = new ThreadLocalStoragePolicy(); + } + private IBuildPolicy _innerPolicy; + private IBuildInterceptor interceptor { get { return HttpContextBuildPolicy.HasContext() - ? (IBuildInterceptor)new HttpContextBuildPolicy(){InnerPolicy = _innerPolicy} - : new ThreadLocalStoragePolicy(){InnerPolicy = _innerPolicy}; + ? _http + : _threadLocal; } } @@ -21,7 +31,12 @@ public IBuildPolicy InnerPolicy { get { return _innerPolicy; } - set { _innerPolicy = value; } + set + { + _http.InnerPolicy = value; + _threadLocal.InnerPolicy = value; + _innerPolicy = value; + } } public object Build(BuildSession buildSession, Type pluginType, Instance instance) Modified: trunk/Source/StructureMap.Testing/ModelQueryTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/ModelQueryTester.cs 2008-10-27 02:13:42 UTC (rev 194) +++ trunk/Source/StructureMap.Testing/ModelQueryTester.cs 2008-11-19 19:10:25 UTC (rev 195) @@ -1,5 +1,6 @@ using System; using System.Data; +using System.Data.SqlClient; using System.Linq; using NUnit.Framework; using StructureMap.Configuration.DSL; @@ -31,6 +32,7 @@ } + [SetUp] public void SetUp() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |