|
From: <jer...@us...> - 2009-04-20 01:47:22
|
Revision: 240
http://structuremap.svn.sourceforge.net/structuremap/?rev=240&view=rev
Author: jeremydmiller
Date: 2009-04-20 01:47:17 +0000 (Mon, 20 Apr 2009)
Log Message:
-----------
The big, big lifecycle refactoring
Modified Paths:
--------------
trunk/Source/StructureMap/BuildSession.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
trunk/Source/StructureMap/Configuration/FamilyParser.cs
trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs
trunk/Source/StructureMap/Graph/IPluginFamily.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/IInstanceFactory.cs
trunk/Source/StructureMap/InstanceFactory.cs
trunk/Source/StructureMap/Pipeline/Lifecycle.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/PluginTypeConfiguration.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap/SystemRegistry.cs
trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs
trunk/Source/StructureMap.DebuggerVisualizers.Testing/VisualizerTests.cs
trunk/Source/StructureMap.Testing/Attributes/PluginFamilyAttributeTester.cs
trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs
trunk/Source/StructureMap.Testing/Configuration/FamilyParserTester.cs
trunk/Source/StructureMap.Testing/Configuration/NormalGraphBuilderTester.cs
trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs
trunk/Source/StructureMap.Testing/Graph/InstanceFactoryTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginGraphBuilderTester.cs
trunk/Source/StructureMap.Testing/PerRequestInterceptorTester.cs
trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ObjectBuilderTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileManagerTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileTester.cs
trunk/Source/StructureMap.Testing/Pipeline/StubBuildSession.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
Added Paths:
-----------
trunk/Source/StructureMap/Pipeline/HttpSessionLifecycle.cs
trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs
trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs
trunk/Source/StructureMap.Testing/Pipeline/HybridBuildLifecycleTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ThreadLocalStorageLifecycleTester.cs
Removed Paths:
-------------
trunk/Source/StructureMap/Pipeline/BuildPolicy.cs
trunk/Source/StructureMap/Pipeline/CacheInterceptor.cs
trunk/Source/StructureMap/Pipeline/HttpContextBuildPolicy.cs
trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs
trunk/Source/StructureMap/Pipeline/IBuildInterceptor.cs
trunk/Source/StructureMap/Pipeline/IBuildPolicy.cs
trunk/Source/StructureMap/Pipeline/SingletonPolicy.cs
trunk/Source/StructureMap/Pipeline/ThreadLocalStoragePolicy.cs
trunk/Source/StructureMap/Pipeline/UniquePerRequestInterceptor.cs
trunk/Source/StructureMap.Testing/Pipeline/HybridBuildPolicyTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ThreadLocalStoragePolicyTester.cs
Modified: trunk/Source/StructureMap/BuildSession.cs
===================================================================
--- trunk/Source/StructureMap/BuildSession.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/BuildSession.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -11,14 +11,15 @@
private readonly BuildStack _buildStack = new BuildStack();
private readonly InstanceCache _cache = new InstanceCache();
private readonly Cache<Type, Func<object>> _defaults;
- private readonly InterceptorLibrary _interceptorLibrary;
private readonly PipelineGraph _pipelineGraph;
+ private readonly ObjectBuilder _builder;
public BuildSession(PipelineGraph pipelineGraph, InterceptorLibrary interceptorLibrary)
{
_pipelineGraph = pipelineGraph;
- _interceptorLibrary = interceptorLibrary;
+ _builder = new ObjectBuilder(_pipelineGraph, interceptorLibrary, new NulloObjectCache());
+
_defaults = new Cache<Type, Func<object>>(t =>
{
Instance instance = _pipelineGraph.GetDefault(t);
@@ -28,9 +29,7 @@
throw new StructureMapException(202, t);
}
- object createdInstance = CreateInstance(t, instance);
-
- return () => createdInstance;
+ return () => CreateInstance(t, instance);
});
}
@@ -129,9 +128,14 @@
if (result == null)
{
- result = forType(pluginType).Build(this, instance);
+ result = _builder.Resolve(pluginType, instance, this);
- _cache.Set(pluginType, instance, result);
+ // TODO: HACK ATTACK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ var isUnique = forType(pluginType).Lifecycle is UniquePerRequestLifecycle;
+ if (!isUnique)
+ {
+ _cache.Set(pluginType, instance, result);
+ }
}
return result;
@@ -161,13 +165,6 @@
return _defaults[pluginType]();
}
- [Obsolete("get this inlined")]
- public virtual object ApplyInterception(Type pluginType, object actualValue)
- {
- if (actualValue == null) return null;
- return _interceptorLibrary.FindInterceptor(actualValue.GetType()).Process(actualValue, this);
- }
-
public virtual void RegisterDefault(Type pluginType, Func<object> creator)
{
_defaults[pluginType] = creator;
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -261,30 +261,18 @@
}
/// <summary>
- /// Registers an IBuildInterceptor for this Plugin Type that executes before
- /// any object of this PluginType is created. IBuildInterceptor's can be
+ /// Registers an ILifecycle for this Plugin Type that executes before
+ /// any object of this PluginType is created. ILifecycle's can be
/// used to create a custom scope
/// </summary>
- /// <param name="interceptor"></param>
+ /// <param name="lifecycle"></param>
/// <returns></returns>
- public CreatePluginFamilyExpression<PLUGINTYPE> InterceptConstructionWith(IBuildInterceptor interceptor)
+ public CreatePluginFamilyExpression<PLUGINTYPE> LifecycleIs(ILifecycle lifecycle)
{
- _alterations.Add(family => family.AddInterceptor(interceptor));
+ _alterations.Add(family => family.SetScopeTo(lifecycle));
return this;
}
- /// <summary>
- /// Registers an IBuildInterceptor for this Plugin Type that executes before
- /// any object of this PluginType is created. IBuildInterceptor's can be
- /// used to create a custom scope
- /// </summary>
- /// <param name="interceptor"></param>
- /// <returns></returns>
- public CreatePluginFamilyExpression<PLUGINTYPE> BuildPolicyIs(IBuildInterceptor interceptor)
- {
- _alterations.Add(family => family.AddInterceptor(interceptor));
- return this;
- }
/// <summary>
/// Largely deprecated and unnecessary with the ability to add Xml configuration files
@@ -314,7 +302,7 @@
/// <returns></returns>
public CreatePluginFamilyExpression<PLUGINTYPE> AlwaysUnique()
{
- return InterceptConstructionWith(new UniquePerRequestInterceptor());
+ return this.LifecycleIs(new UniquePerRequestLifecycle());
}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -144,11 +144,11 @@
/// any object of this PluginType is created. IBuildInterceptor's can be
/// used to create a custom scope
/// </summary>
- /// <param name="interceptor"></param>
+ /// <param name="lifecycle"></param>
/// <returns></returns>
- public GenericFamilyExpression InterceptConstructionWith(IBuildInterceptor interceptor)
+ public GenericFamilyExpression LifecycleIs(ILifecycle lifecycle)
{
- return alterAndContinue(family => family.AddInterceptor(interceptor));
+ return alterAndContinue(family => family.SetScopeTo(lifecycle));
}
/// <summary>
Modified: trunk/Source/StructureMap/Configuration/FamilyParser.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/FamilyParser.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Configuration/FamilyParser.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -127,10 +127,12 @@
{
var interceptorMemento = new XmlAttributeInstanceMemento(element);
string context = contextBase + element.OuterXml;
- _builder.WithSystemObject<IBuildInterceptor>(
+
+
+ _builder.WithSystemObject<ILifecycle>(
interceptorMemento,
context,
- interceptor => family.AddInterceptor(interceptor));
+ lifecycle => family.SetScopeTo(lifecycle));
});
}
}
Modified: trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -79,7 +79,14 @@
_writer.AddText(contents);
- _writer.AddContent("Scoped as: " + pluginType.Policy);
+ if (pluginType.Lifecycle != null)
+ {
+ _writer.AddContent("Scoped as: " + pluginType.Lifecycle.GetType().Name);
+ }
+ else
+ {
+ _writer.AddContent("Scoped as: PerRequest");
+ }
foreach (IInstance instance in pluginType.Instances)
{
Modified: trunk/Source/StructureMap/Graph/IPluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/IPluginFamily.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Graph/IPluginFamily.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -19,6 +19,8 @@
void AddMementoSource(MementoSource source);
void SetScopeTo(InstanceScope scope);
- void AddInterceptor(IBuildInterceptor interceptor);
+ void SetScopeTo(ILifecycle lifecycle);
+
+ ILifecycle Lifecycle {get; }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -17,7 +17,7 @@
private readonly List<InstanceMemento> _mementoList = new List<InstanceMemento>();
private readonly Cache<string, Plugin> _pluggedTypes = new Cache<string, Plugin>();
private readonly Type _pluginType;
- private IBuildPolicy _buildPolicy = new BuildPolicy();
+ private ILifecycle _lifecycle = null;
private string _defaultKey = string.Empty;
private PluginGraph _parent;
@@ -43,7 +43,16 @@
}
}
+ public void SetScopeTo(ILifecycle lifecycle)
+ {
+ _lifecycle = lifecycle;
+ }
+ public ILifecycle Lifecycle
+ {
+ get { return _lifecycle; }
+ }
+
public PluginGraph Parent
{
get { return _parent; }
@@ -59,40 +68,9 @@
public void SetScopeTo(InstanceScope scope)
{
- switch (scope)
- {
- case InstanceScope.Singleton:
- AddInterceptor(new SingletonPolicy());
- break;
-
- case InstanceScope.HttpContext:
- AddInterceptor(new HttpContextBuildPolicy());
- break;
-
- case InstanceScope.ThreadLocal:
- AddInterceptor(new ThreadLocalStoragePolicy());
- break;
-
- case InstanceScope.Hybrid:
- AddInterceptor(new HybridBuildPolicy());
- break;
-
- case InstanceScope.HttpSession:
- AddInterceptor(new HybridSessionBuildPolicy());
- break;
-
- case InstanceScope.HybridHttpSession:
- AddInterceptor(new HybridSessionBuildPolicy());
- break;
- }
+ _lifecycle = Lifecycles.GetLifecycle(scope);
}
- [Obsolete("Kill!")]
- public void AddInterceptor(IBuildInterceptor interceptor)
- {
- interceptor.InnerPolicy = _buildPolicy;
- _buildPolicy = interceptor;
- }
#endregion
@@ -292,7 +270,7 @@
Type templatedType = _pluginType.MakeGenericType(templateTypes);
var templatedFamily = new PluginFamily(templatedType, Parent);
templatedFamily.DefaultInstanceKey = DefaultInstanceKey;
- templatedFamily.Policy = Policy.Clone();
+ templatedFamily._lifecycle = _lifecycle;
// TODO -- Got a big problem here. Intances need to be copied over
@@ -330,7 +308,7 @@
{
Default = GetDefaultInstance(),
PluginType = PluginType,
- Policy = _buildPolicy,
+ Lifecycle = _lifecycle,
Instances = Instances
};
}
@@ -342,11 +320,7 @@
get { return _pluginType.IsGenericTypeDefinition || _pluginType.ContainsGenericParameters; }
}
- public IBuildPolicy Policy
- {
- get { return _buildPolicy; }
- set { _buildPolicy = value; }
- }
+
public int PluginCount
{
Modified: trunk/Source/StructureMap/IInstanceFactory.cs
===================================================================
--- trunk/Source/StructureMap/IInstanceFactory.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/IInstanceFactory.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -13,9 +13,6 @@
{
Type PluginType { get; }
IEnumerable<IInstance> Instances { get; }
-
- [Obsolete("Kill!!!!")]
- IBuildPolicy Policy { get; }
Instance MissingInstance { get; set; }
Instance[] AllInstances
@@ -26,12 +23,6 @@
void AddInstance(Instance instance);
Instance AddType<T>();
- [Obsolete("Return the list of Instances instead")]
- IList GetAllInstances(BuildSession session);
-
- [Obsolete("Kill!!!!")]
- object Build(BuildSession session, Instance instance);
-
Instance FindInstance(string name);
void ImportFrom(PluginFamily family);
Modified: trunk/Source/StructureMap/InstanceFactory.cs
===================================================================
--- trunk/Source/StructureMap/InstanceFactory.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/InstanceFactory.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -16,7 +16,7 @@
new Cache<string, Instance>(delegate { return null; });
private readonly Type _pluginType;
- private IBuildPolicy _policy = new BuildPolicy();
+ private ILifecycle _lifecycle;
#region constructor functions
@@ -38,7 +38,7 @@
try
{
- _policy = family.Policy;
+ _lifecycle = family.Lifecycle;
_pluginType = family.PluginType;
MissingInstance = family.MissingInstance;
@@ -95,14 +95,7 @@
}
}
- [Obsolete("Kill!!!!")]
- public IBuildPolicy Policy
- {
- get { return _policy; }
- set { _policy = value; }
- }
-
public void AddInstance(Instance instance)
{
_instances[instance.Name] = instance;
@@ -120,25 +113,6 @@
return instance;
}
- public IList GetAllInstances(BuildSession session)
- {
- IList list = new ArrayList();
-
- _instances.Each(instance =>
- {
- object builtObject = Build(session, instance);
- list.Add(builtObject);
- });
-
- return list;
- }
-
- [Obsolete("Kill!!!!")]
- public object Build(BuildSession session, Instance instance)
- {
- return _policy.Build(session, PluginType, instance);
- }
-
public Instance FindInstance(string name)
{
return _instances[name] ?? MissingInstance;
@@ -146,10 +120,14 @@
public void ImportFrom(PluginFamily family)
{
- if (!_policy.GetType().Equals(family.Policy.GetType()))
+ if (_lifecycle == null)
{
+ _lifecycle = family.Lifecycle;
+ }
+ else if (!_lifecycle.GetType().Equals(family.Lifecycle.GetType()))
+ {
// TODO: Might need to clear out the existing policy when it's ejected
- _policy = family.Policy;
+ _lifecycle = family.Lifecycle;
}
family.EachInstance(instance => _instances.Fill(instance.Name, instance));
@@ -162,13 +140,14 @@
public void EjectAllInstances()
{
- _policy.EjectAll();
+ if (_lifecycle != null) _lifecycle.EjectAll();
_instances.Clear();
}
public ILifecycle Lifecycle
{
- get { throw new NotImplementedException(); }
+ get { return _lifecycle; }
+ set { _lifecycle = value; }
}
#endregion
Deleted: trunk/Source/StructureMap/Pipeline/BuildPolicy.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/BuildPolicy.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Pipeline/BuildPolicy.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -1,65 +0,0 @@
-using System;
-using StructureMap.Attributes;
-
-namespace StructureMap.Pipeline
-{
- [Obsolete("Kill!")]
- public sealed class BuildPolicy : IBuildPolicy
- {
- #region IBuildPolicy Members
-
- public object Build(BuildSession buildSession, Type pluginType, Instance instance)
- {
- if (buildSession == null)
- {
- throw new ArgumentNullException("buildSession");
- }
-
- object builtObject = instance.Build(pluginType, buildSession);
-
- try
- {
- return buildSession.ApplyInterception(pluginType, builtObject);
- }
- catch (Exception e)
- {
- throw new StructureMapException(308, e, instance.Name, builtObject.GetType());
- }
- }
-
- public IBuildPolicy Clone()
- {
- return this;
- }
-
- public void EjectAll()
- {
- // no-op. Unlike other Container's, StructureMap doesn't hang on to
- // objects it created as "Transients"
- }
-
- #endregion
-
- public bool Equals(BuildPolicy obj)
- {
- return !ReferenceEquals(null, obj);
- }
-
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj)) return false;
- if (ReferenceEquals(this, obj)) return true;
- return obj is BuildPolicy;
- }
-
- public override int GetHashCode()
- {
- return 0;
- }
-
- public override string ToString()
- {
- return InstanceScope.PerRequest.ToString();
- }
- }
-}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Pipeline/CacheInterceptor.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/CacheInterceptor.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Pipeline/CacheInterceptor.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -1,86 +0,0 @@
-using System;
-using StructureMap.Util;
-
-namespace StructureMap.Pipeline
-{
-
-
-
- [Obsolete("Kill! in favor of MainObjectCache")]
- public class ObjectCache : Cache<InstanceKey, object>
- {
- public ObjectCache(IBuildPolicy innerPolicy) : base(key => innerPolicy.Build(key.Session, key.PluginType, key.Instance))
- {
- }
-
- public void DisposeAndClear()
- {
- Each(o =>
- {
- IDisposable disposable = o as IDisposable;
- if (disposable != null)
- {
- try
- {
- disposable.Dispose();
- }
- catch (Exception) { }
- }
- });
- Clear();
- }
- }
-
- public abstract class CacheInterceptor : IBuildInterceptor
- {
- private IBuildPolicy _innerPolicy = new BuildPolicy();
-
- #region IBuildInterceptor Members
-
- public IBuildPolicy InnerPolicy
- {
- get { return _innerPolicy; }
- set { _innerPolicy = value; }
- }
-
- protected ObjectCache buildNewCache()
- {
- return new ObjectCache(_innerPolicy);
- }
-
- protected abstract ObjectCache findCache();
-
- public object Build(BuildSession buildSession, Type pluginType, Instance instance)
- {
- var key = new InstanceKey{Instance = instance, PluginType = pluginType, Session = buildSession};
- return findCache()[key];
- }
-
- public IBuildPolicy Clone()
- {
- CacheInterceptor clonedCache = clone();
- clonedCache.InnerPolicy = _innerPolicy.Clone();
-
- return clonedCache;
- }
-
- public void EjectAll()
- {
- ejectAll();
- _innerPolicy.EjectAll();
- }
-
- protected virtual void ejectAll()
- {
- }
-
- #endregion
-
- protected abstract CacheInterceptor clone();
-
- public override string ToString()
- {
- return GetType().FullName + " / " + _innerPolicy;
- }
- }
-}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Pipeline/HttpContextBuildPolicy.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HttpContextBuildPolicy.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Pipeline/HttpContextBuildPolicy.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -1,59 +0,0 @@
-using System;
-using System.Collections;
-using System.Web;
-using StructureMap.Attributes;
-
-namespace StructureMap.Pipeline
-{
- public class HttpContextBuildPolicy : CacheInterceptor
- {
- public static readonly string ITEM_NAME = "STRUCTUREMAP-INSTANCES";
-
-
- public static bool HasContext()
- {
- return HttpContext.Current != null;
- }
-
- public static void DisposeAndClearAll()
- {
- new HttpContextBuildPolicy().findCache().DisposeAndClear();
- }
-
- protected override ObjectCache findCache()
- {
- IDictionary items = findHttpDictionary();
-
- if (!items.Contains(ITEM_NAME))
- {
- lock (items.SyncRoot)
- {
- if (!items.Contains(ITEM_NAME))
- {
- ObjectCache cache = buildNewCache();
- items.Add(ITEM_NAME, cache);
-
- return cache;
- }
- }
- }
-
- return (ObjectCache) items[ITEM_NAME];
- }
-
- protected virtual IDictionary findHttpDictionary()
- {
- return HttpContext.Current.Items;
- }
-
- protected override CacheInterceptor clone()
- {
- return this;
- }
-
- public override string ToString()
- {
- return InstanceScope.HttpContext.ToString();
- }
- }
-}
Added: trunk/Source/StructureMap/Pipeline/HttpSessionLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HttpSessionLifecycle.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/HttpSessionLifecycle.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -0,0 +1,13 @@
+using System.Collections;
+using System.Web;
+
+namespace StructureMap.Pipeline
+{
+ public class HttpSessionLifecycle : HttpContextLifecycle
+ {
+ protected override IDictionary findHttpDictionary()
+ {
+ return new SessionWrapper(HttpContext.Current.Session);
+ }
+ }
+}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -1,74 +0,0 @@
-using System;
-using StructureMap.Attributes;
-
-namespace StructureMap.Pipeline
-{
- public abstract class HttpBuildPolicyBase<HTTP, NONHTTP> : IBuildInterceptor
- where HTTP : IBuildInterceptor, new()
- where NONHTTP : IBuildInterceptor, new()
- {
- private readonly IBuildInterceptor _http;
- private readonly IBuildInterceptor _nonHttp;
-
- public HttpBuildPolicyBase()
- {
- _http = new HTTP();
- _nonHttp = new NONHTTP();
- }
-
-
- private IBuildPolicy _innerPolicy;
-
-
- private IBuildInterceptor interceptor
- {
- get
- {
- return HttpContextBuildPolicy.HasContext()
- ? _http
- : _nonHttp;
- }
- }
-
- public IBuildPolicy InnerPolicy
- {
- get { return _innerPolicy; }
- set
- {
- _http.InnerPolicy = value;
- _nonHttp.InnerPolicy = value;
- _innerPolicy = value;
- }
- }
-
- public object Build(BuildSession buildSession, Type pluginType, Instance instance)
- {
- return interceptor.Build(buildSession, pluginType, instance);
- }
-
- public abstract IBuildPolicy Clone();
- public void EjectAll()
- {
- _http.EjectAll();
- _nonHttp.EjectAll();
- }
- }
-
-
-
-
-
- public class HybridBuildPolicy : HttpBuildPolicyBase<HttpContextBuildPolicy, ThreadLocalStoragePolicy>
- {
- public override IBuildPolicy Clone()
- {
- return new HybridBuildPolicy(){InnerPolicy = InnerPolicy.Clone()};
- }
-
- public override string ToString()
- {
- return InstanceScope.Hybrid.ToString();
- }
- }
-
-}
\ No newline at end of file
Added: trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -0,0 +1,7 @@
+namespace StructureMap.Pipeline
+{
+ public class HybridSessionLifecycle : HttpLifecycleBase<HttpSessionLifecycle, ThreadLocalStorageLifecycle>
+ {
+
+ }
+}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Pipeline/IBuildInterceptor.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/IBuildInterceptor.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Pipeline/IBuildInterceptor.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -1,10 +0,0 @@
-namespace StructureMap.Pipeline
-{
- /// <summary>
- /// Plugin interface to create custom build or lifecycle policies for a Plugin Type
- /// </summary>
- public interface IBuildInterceptor : IBuildPolicy
- {
- IBuildPolicy InnerPolicy { get; set; }
- }
-}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Pipeline/IBuildPolicy.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/IBuildPolicy.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Pipeline/IBuildPolicy.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -1,15 +0,0 @@
-using System;
-
-namespace StructureMap.Pipeline
-{
- /// <summary>
- /// An object that specifies a "Policy" about how Instance's are invoked.
- /// </summary>
- [Obsolete("Kill!")]
- public interface IBuildPolicy
- {
- object Build(BuildSession buildSession, Type pluginType, Instance instance);
- IBuildPolicy Clone();
- void EjectAll();
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/Lifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Lifecycle.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Pipeline/Lifecycle.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -9,6 +9,12 @@
public interface IObjectCache
{
object Locker { get; }
+
+ int Count
+ {
+ get;
+ }
+
object Get(Type pluginType, Instance instance);
void Set(Type pluginType, Instance instance, object value);
void DisposeAndClear();
@@ -21,6 +27,11 @@
get { return new object(); }
}
+ public int Count
+ {
+ get { return 0; }
+ }
+
public object Get(Type pluginType, Instance instance)
{
return null;
@@ -47,6 +58,11 @@
get { return _locker; }
}
+ public int Count
+ {
+ get { return _objects.Count; }
+ }
+
public object Get(Type pluginType, Instance instance)
{
var key = new InstanceKey(instance, pluginType);
@@ -95,6 +111,9 @@
{
switch (scope)
{
+ case InstanceScope.PerRequest:
+ return null;
+
case InstanceScope.Singleton:
return new SingletonLifecycle();
@@ -133,7 +152,7 @@
public object Resolve(Type pluginType, Instance instance, BuildSession session)
{
- var cache = FindCache(instance, session);
+ var cache = FindCache(pluginType, instance, session);
lock (cache.Locker)
{
var returnValue = cache.Get(pluginType, instance);
@@ -171,9 +190,12 @@
}
- public IObjectCache FindCache(Instance instance, BuildSession session)
+ public IObjectCache FindCache(Type pluginType, Instance instance, BuildSession session)
{
- throw new NotImplementedException();
+ var lifecycle = _pipeline.ForType(pluginType).Lifecycle;
+ return lifecycle == null
+ ? _defaultCache
+ : lifecycle.FindCache();
}
}
}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Pipeline/SingletonPolicy.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/SingletonPolicy.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Pipeline/SingletonPolicy.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -1,54 +0,0 @@
-using System;
-using StructureMap.Attributes;
-
-namespace StructureMap.Pipeline
-{
- [Obsolete("Kill!")]
- public class SingletonPolicy : CacheInterceptor
- {
- private readonly object _locker = new object();
- private ObjectCache _cache;
-
- protected override ObjectCache findCache()
- {
- if (_cache == null)
- {
- lock (_locker)
- {
- if (_cache == null)
- {
- _cache = buildNewCache();
- }
- }
- }
-
- return _cache;
- }
-
- public ObjectCache Cache
- {
- get
- {
- return findCache();
- }
- }
-
- protected override void ejectAll()
- {
- lock (_locker)
- {
- _cache.DisposeAndClear();
- }
- }
-
- protected override CacheInterceptor clone()
- {
- return new SingletonPolicy();
- }
-
- public override string ToString()
- {
- return InstanceScope.Singleton.ToString();
- }
- }
-}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Pipeline/ThreadLocalStoragePolicy.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ThreadLocalStoragePolicy.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Pipeline/ThreadLocalStoragePolicy.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -1,46 +0,0 @@
-using System;
-using StructureMap.Attributes;
-
-namespace StructureMap.Pipeline
-{
- public class ThreadLocalStoragePolicy : CacheInterceptor
- {
- [ThreadStatic] private static ObjectCache _cache;
- private readonly object _locker = new object();
-
- public static void DisposeAndClearAll()
- {
- _cache.DisposeAndClear();
- }
-
- private void guaranteeHashExists()
- {
- if (_cache == null)
- {
- lock (_locker)
- {
- if (_cache == null)
- {
- _cache = buildNewCache();
- }
- }
- }
- }
-
- protected override ObjectCache findCache()
- {
- guaranteeHashExists();
- return _cache;
- }
-
- protected override CacheInterceptor clone()
- {
- return this;
- }
-
- public override string ToString()
- {
- return InstanceScope.Hybrid.ToString();
- }
- }
-}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Pipeline/UniquePerRequestInterceptor.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/UniquePerRequestInterceptor.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/Pipeline/UniquePerRequestInterceptor.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -1,46 +0,0 @@
-using System;
-
-namespace StructureMap.Pipeline
-{
- /// <summary>
- /// Makes sure that every request for this object returns a unique object
- /// </summary>
- public class UniquePerRequestInterceptor : IBuildInterceptor
- {
-
- #region IBuildInterceptor Members
-
- private IBuildPolicy _innerPolicy = new BuildPolicy();
-
- public IBuildPolicy InnerPolicy
- {
- get { return _innerPolicy; }
- set { _innerPolicy = value; }
- }
-
- #endregion
-
- #region IBuildPolicy Members
-
- public object Build(BuildSession buildSession, Type pluginType, Instance instance)
- {
- //insert a default object creator
- buildSession.RegisterDefault(pluginType, () => InnerPolicy.Build(buildSession, pluginType, instance));
-
- //build this object for the first time
- return buildSession.CreateInstance(pluginType);
- }
-
- public IBuildPolicy Clone()
- {
- return new UniquePerRequestInterceptor();
- }
-
- public void EjectAll()
- {
- InnerPolicy.EjectAll();
- }
-
- #endregion
- }
-}
Copied: trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs (from rev 234, trunk/Source/StructureMap/Pipeline/UniquePerRequestInterceptor.cs)
===================================================================
--- trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -0,0 +1,55 @@
+using System;
+
+namespace StructureMap.Pipeline
+{
+ /// <summary>
+ /// Makes sure that every request for this object returns a unique object
+ /// </summary>
+ public class UniquePerRequestLifecycle : ILifecycle
+ {
+ public void EjectAll()
+ {
+
+ }
+
+ public IObjectCache FindCache()
+ {
+ return new NulloObjectCache();
+ }
+
+ //#region IBuildInterceptor Members
+
+ //private IBuildPolicy _innerPolicy = new BuildPolicy();
+
+ //public IBuildPolicy InnerPolicy
+ //{
+ // get { return _innerPolicy; }
+ // set { _innerPolicy = value; }
+ //}
+
+ //#endregion
+
+ //#region IBuildPolicy Members
+
+ //public object Build(BuildSession buildSession, Type pluginType, Instance instance)
+ //{
+ // //insert a default object creator
+ // buildSession.RegisterDefault(pluginType, () => InnerPolicy.Build(buildSession, pluginType, instance));
+
+ // //build this object for the first time
+ // return buildSession.CreateInstance(pluginType);
+ //}
+
+ //public IBuildPolicy Clone()
+ //{
+ // return new UniquePerRequestInterceptor();
+ //}
+
+ //public void EjectAll()
+ //{
+ // InnerPolicy.EjectAll();
+ //}
+
+ //#endregion
+ }
+}
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -75,7 +75,7 @@
{
Default = _profileManager.GetDefault(factory.PluginType),
PluginType = factory.PluginType,
- Policy = factory.Policy,
+ Lifecycle = factory.Lifecycle,
Instances = factory.Instances
};
}
Modified: trunk/Source/StructureMap/PluginTypeConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/PluginTypeConfiguration.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/PluginTypeConfiguration.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -20,7 +20,7 @@
/// <summary>
/// The build "policy" for this PluginType. Used by the WhatDoIHave() diagnostics methods
/// </summary>
- public IBuildPolicy Policy { get; set; }
+ public ILifecycle Lifecycle { get; set; }
/// <summary>
/// All of the <see cref="StructureMap.Pipeline.IInstance">IInstance</see>'s registered
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/StructureMap.csproj 2009-04-20 01:47:17 UTC (rev 240)
@@ -157,15 +157,10 @@
<Compile Include="InstanceFamily.cs" />
<Compile Include="Interceptors\MatchedTypeInterceptor.cs" />
<Compile Include="PipelineGraph.cs" />
- <Compile Include="Pipeline\BuildPolicy.cs" />
- <Compile Include="Pipeline\CacheInterceptor.cs" />
<Compile Include="Pipeline\ConfiguredInstance.cs" />
<Compile Include="Pipeline\ConfiguredInstance.Expressions.cs" />
<Compile Include="Pipeline\ConstructorInstance.cs" />
<Compile Include="Pipeline\DefaultInstance.cs" />
- <Compile Include="Pipeline\HybridBuildPolicy.cs" />
- <Compile Include="Pipeline\IBuildInterceptor.cs" />
- <Compile Include="Pipeline\IBuildPolicy.cs" />
<Compile Include="Pipeline\IConfiguredInstance.cs" />
<Compile Include="Pipeline\ILocationPolicy.cs" />
<Compile Include="Pipeline\Instance.cs" />
@@ -175,8 +170,6 @@
<Compile Include="Pipeline\ProfileManager.cs" />
<Compile Include="Pipeline\PrototypeInstance.cs" />
<Compile Include="Pipeline\ReferencedInstance.cs" />
- <Compile Include="Pipeline\SingletonPolicy.cs" />
- <Compile Include="Pipeline\ThreadLocalStoragePolicy.cs" />
<Compile Include="Pipeline\UserControlInstance.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
@@ -409,12 +402,13 @@
<Compile Include="Pipeline\ConditionalInstance.cs" />
<Compile Include="Pipeline\HttpContextLifecycle.cs" />
<Compile Include="Pipeline\HttpLifecycleBase.cs" />
- <Compile Include="Pipeline\HttpSessionBuildPolicy.cs" />
+ <Compile Include="Pipeline\HttpSessionLifecycle.cs" />
+ <Compile Include="Pipeline\HybridSessionLifecycle.cs" />
<Compile Include="Pipeline\Lifecycle.cs" />
<Compile Include="Pipeline\SessionWrapper.cs" />
<Compile Include="Pipeline\SingletonLifecycle.cs" />
<Compile Include="Pipeline\ThreadLocalStorageLifecycle.cs" />
- <Compile Include="Pipeline\UniquePerRequestInterceptor.cs" />
+ <Compile Include="Pipeline\UniquePerRequestLifecycle.cs" />
<Compile Include="TypeExtensions.cs" />
<Compile Include="IBootstrapper.cs" />
<Compile Include="InitializationExpression.cs" />
@@ -422,7 +416,6 @@
<Compile Include="Pipeline\BuildFrame.cs" />
<Compile Include="Pipeline\BuildStack.cs" />
<Compile Include="Pipeline\ConfiguredInstanceBase.cs" />
- <Compile Include="Pipeline\HttpContextBuildPolicy.cs" />
<Compile Include="Pipeline\InstanceKey.cs" />
<Compile Include="Pipeline\IStructuredInstance.cs" />
<Compile Include="Pipeline\PropertyExpression.cs" />
Modified: trunk/Source/StructureMap/SystemRegistry.cs
===================================================================
--- trunk/Source/StructureMap/SystemRegistry.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap/SystemRegistry.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -9,7 +9,7 @@
{
public SystemRegistry()
{
- addExpression(graph => graph.AddType(typeof(MementoSource), typeof(XmlFileMementoSource), "XmlFile"));
+ addExpression(graph => graph.AddType(typeof (MementoSource), typeof (XmlFileMementoSource), "XmlFile"));
ForRequestedType<MementoSource>().TheDefaultIsConcreteType<MemoryMementoSource>();
AddMementoSourceType<DirectoryXmlMementoSource>("DirectoryXml");
@@ -19,23 +19,23 @@
AddMementoSourceType<XmlAttributeFileMementoSource>("XmlAttributeFile");
AddMementoSourceType<XmlFileMementoSource>("XmlFile");
+ AddLifecycleType<SingletonLifecycle>(InstanceScope.Singleton);
+ AddLifecycleType<HttpContextLifecycle>(InstanceScope.HttpContext);
+ AddLifecycleType<HttpSessionLifecycle>(InstanceScope.HttpSession);
+ AddLifecycleType<HybridLifecycle>(InstanceScope.Hybrid);
+ AddLifecycleType<HybridSessionLifecycle>(InstanceScope.HybridHttpSession);
+ AddLifecycleType<ThreadLocalStorageLifecycle>(InstanceScope.ThreadLocal);
+ }
- AddInterceptorType<SingletonPolicy>(InstanceScope.Singleton);
- AddInterceptorType<ThreadLocalStoragePolicy>(InstanceScope.ThreadLocal);
- AddInterceptorType<HttpContextBuildPolicy>(InstanceScope.HttpContext);
- AddInterceptorType<HttpSessionBuildPolicy>(InstanceScope.HttpSession);
- AddInterceptorType<HybridBuildPolicy>(InstanceScope.Hybrid);
+ private void AddLifecycleType<T>(InstanceScope scope) where T : ILifecycle
+ {
+ addExpression(graph => graph.AddType(typeof(ILifecycle), typeof(T), scope.ToString()));
}
private void AddMementoSourceType<T>(string name)
{
- addExpression(graph => graph.AddType(typeof(MementoSource), typeof(T), name));
+ addExpression(graph => graph.AddType(typeof (MementoSource), typeof (T), name));
}
-
- private void AddInterceptorType<T>(InstanceScope scope)
- {
- addExpression(graph => graph.AddType(typeof(IBuildInterceptor), typeof(T), scope.ToString()));
- }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs
===================================================================
--- trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -37,7 +37,7 @@
instances.Add(buildInstanceDetail(instance));
}
- var pluginTypeDetail = new PluginTypeDetail(pluginType.PluginType, pluginType.Policy.GetType(), instances.ToArray());
+ var pluginTypeDetail = new PluginTypeDetail(pluginType.PluginType, pluginType.Lifecycle.GetType(), instances.ToArray());
pluginTypeDetails.Add(pluginTypeDetail);
}
Modified: trunk/Source/StructureMap.DebuggerVisualizers.Testing/VisualizerTests.cs
===================================================================
--- trunk/Source/StructureMap.DebuggerVisualizers.Testing/VisualizerTests.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap.DebuggerVisualizers.Testing/VisualizerTests.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -12,7 +12,7 @@
[Test]
public void can_serialize_container_details()
{
- var pluginTypeDetails = new[]{ new PluginTypeDetail(typeof(string), typeof(BuildPolicy), new[]{ new InstanceDetail("First", "First Instance", typeof(string)), }) };
+ var pluginTypeDetails = new[]{ new PluginTypeDetail(typeof(string), typeof(object), new[]{ new InstanceDetail("First", "First Instance", typeof(string)), }) };
var wrapper = new ContainerDetail(new[]{"config"}, pluginTypeDetails);
var binaryFormatter = new BinaryFormatter();
Stream stream = new MemoryStream();
Modified: trunk/Source/StructureMap.Testing/Attributes/PluginFamilyAttributeTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Attributes/PluginFamilyAttributeTester.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap.Testing/Attributes/PluginFamilyAttributeTester.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -19,7 +19,7 @@
var family = new PluginFamily(typeof (TypeThatDoesNotHaveCustomMementoSource));
att.Configure(family);
- Assert.IsInstanceOfType(interceptorType, family.Policy);
+ Assert.IsInstanceOfType(interceptorType, family.Lifecycle);
}
[PluginFamily]
@@ -120,10 +120,10 @@
[Test]
public void ScopeToInterceptorTypes()
{
- assertScopeLeadsToInterceptor(InstanceScope.HttpContext, typeof (HttpContextBuildPolicy));
- assertScopeLeadsToInterceptor(InstanceScope.Hybrid, typeof (HybridBuildPolicy));
- assertScopeLeadsToInterceptor(InstanceScope.Singleton, typeof (SingletonPolicy));
- assertScopeLeadsToInterceptor(InstanceScope.ThreadLocal, typeof (ThreadLocalStoragePolicy));
+ assertScopeLeadsToInterceptor(InstanceScope.HttpContext, typeof (HttpContextLifecycle));
+ assertScopeLeadsToInterceptor(InstanceScope.Hybrid, typeof (HybridLifecycle));
+ assertScopeLeadsToInterceptor(InstanceScope.Singleton, typeof (SingletonLifecycle));
+ assertScopeLeadsToInterceptor(InstanceScope.ThreadLocal, typeof (ThreadLocalStorageLifecycle));
}
[Test]
Modified: trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -1,25 +1,18 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using NUnit.Framework;
+using NUnit.Framework;
using StructureMap.Attributes;
using StructureMap.Testing.Widget3;
namespace StructureMap.Testing.Bugs
{
- [TestFixture]
- public class SpecifyScopeInConfigureTester
+ [TestFixture] public class SpecifyScopeInConfigureTester
{
- [Test]
- public void specify_the_scope_in_a_Configure_if_it_is_not_already_set()
+ [Test] public void specify_the_scope_in_a_Configure_if_it_is_not_already_set()
{
var container = new Container(x => { });
container.Configure(x =>
{
x.ForRequestedType<IGateway>().CacheBy(InstanceScope.Singleton)
.TheDefaultIsConcreteType<DefaultGateway>();
-
});
var gateway1 = container.GetInstance<IGateway>();
@@ -30,4 +23,4 @@
gateway1.ShouldBeTheSameAs(gateway3);
}
}
-}
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -110,7 +110,8 @@
PluginGraph pluginGraph = registry.Build();
PluginFamily family = pluginGraph.FindFamily(typeof (IGateway));
- Assert.IsInstanceOfType(typeof (ThreadLocalStoragePolicy), family.Policy);
+
+ family.Lifecycle.ShouldBeOfType<ThreadLocalStorageLifecycle>();
}
@@ -136,7 +137,7 @@
PluginGraph pluginGraph = registry.Build();
PluginFamily family = pluginGraph.FindFamily(typeof (IGateway));
- Assert.IsInstanceOfType(typeof (BuildPolicy), family.Policy);
+ family.Lifecycle.ShouldBeNull();
}
[Test]
@@ -149,7 +150,7 @@
PluginGraph pluginGraph = registry.Build();
PluginFamily family = pluginGraph.FindFamily(typeof (IGateway));
- Assert.IsInstanceOfType(typeof (SingletonPolicy), family.Policy);
+ family.Lifecycle.ShouldBeOfType<SingletonLifecycle>();
}
[Test]
@@ -198,14 +199,14 @@
[Test]
public void PutAnInterceptorIntoTheInterceptionChainOfAPluginFamilyInTheDSL()
{
- var factoryInterceptor = new StubbedInstanceFactoryInterceptor();
+ var lifecycle = new StubbedLifecycle();
var registry = new Registry();
- registry.BuildInstancesOf<IGateway>().InterceptConstructionWith(factoryInterceptor);
+ registry.BuildInstancesOf<IGateway>().LifecycleIs(lifecycle);
PluginGraph pluginGraph = registry.Build();
- Assert.AreSame(pluginGraph.FindFamily(typeof (IGateway)).Policy, factoryInterceptor);
+ pluginGraph.FindFamily(typeof (IGateway)).Lifecycle.ShouldBeTheSameAs(lifecycle);
}
[Test]
@@ -270,31 +271,16 @@
}
}
- public class StubbedInstanceFactoryInterceptor : IBuildInterceptor
+ public class StubbedLifecycle : ILifecycle
{
- #region IBuildInterceptor Members
-
- public IBuildPolicy InnerPolicy
+ public void EjectAll()
{
- get { throw new NotImplementedException(); }
- set { }
- }
-
- public object Build(BuildSession buildSession, Type pluginType, Instance instance)
- {
throw new NotImplementedException();
}
- public IBuildPolicy Clone()
+ public IObjectCache FindCache()
{
throw new NotImplementedException();
}
-
- public void EjectAll()
- {
- throw new System.NotImplementedException();
- }
-
- #endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/GenericFamilyExpressionTester.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -41,34 +41,7 @@
}
}
- public class TestingBuildPolicy : IBuildInterceptor
- {
- #region IBuildInterceptor Members
- public IBuildPolicy InnerPolicy
- {
- get { throw new NotImplementedException(); }
- set { }
- }
-
- public object Build(BuildSession buildSession, Type pluginType, Instance instance)
- {
- throw new NotImplementedException();
- }
-
- public IBuildPolicy Clone()
- {
- throw new NotImplementedException();
- }
-
- public void EjectAll()
- {
- throw new System.NotImplementedException();
- }
-
- #endregion
- }
-
public interface IRepository<T>
{
void Save(T subject);
@@ -188,17 +161,6 @@
}
[Test]
- public void Intercept_construction_with()
- {
- var registry = new Registry();
- var policy = new TestingBuildPolicy();
- registry.ForRequestedType(typeof (ITarget)).InterceptConstructionWith(policy);
- PluginGraph graph = registry.Build();
-
- Assert.AreSame(policy, graph.FindFamily(typeof (ITarget)).Policy);
- }
-
- [Test]
public void On_creation()
{
ITarget created = null;
@@ -219,7 +181,7 @@
registry.ForRequestedType(typeof (ITarget)).CacheBy(InstanceScope.ThreadLocal);
PluginGraph graph = registry.Build();
- Assert.IsInstanceOfType(typeof (ThreadLocalStoragePolicy), graph.FindFamily(typeof (ITarget)).Policy);
+ graph.FindFamily(typeof (ITarget)).Lifecycle.ShouldBeOfType<ThreadLocalStorageLifecycle>();
}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Configuration/FamilyParserTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/FamilyParserTester.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap.Testing/Configuration/FamilyParserTester.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -44,19 +44,21 @@
private Type thePluginType;
private PluginGraph _graph;
- private void assertThatTheFamilyPolicyIs<T>()
+ private void assertThatTheFamilyLifecycleIs<T>()
{
_parser.ParseFamily(_familyElement);
PluginFamily family = _graph.FindFamily(thePluginType);
- Assert.IsInstanceOfType(typeof (T), family.Policy);
+ Assert.IsInstanceOfType(typeof (T), family.Lifecycle);
}
[Test]
public void ScopeIsBlank()
{
- assertThatTheFamilyPolicyIs<BuildPolicy>();
+ _parser.ParseFamily(_familyElement);
+
+ _graph.FindFamily(thePluginType).Lifecycle.ShouldBeNull();
}
@@ -64,7 +66,9 @@
public void ScopeIsBlank2()
{
_familyElement.SetAttribute(XmlConstants.SCOPE, "");
- assertThatTheFamilyPolicyIs<BuildPolicy>();
+ _parser.ParseFamily(_familyElement);
+
+ _graph.FindFamily(thePluginType).Lifecycle.ShouldBeNull();
}
@@ -72,7 +76,7 @@
public void ScopeIsSingleton()
{
_familyElement.SetAttribute(XmlConstants.SCOPE, InstanceScope.Singleton.ToString());
- assertThatTheFamilyPolicyIs<SingletonPolicy>();
+ assertThatTheFamilyLifecycleIs<SingletonLifecycle>();
}
@@ -80,7 +84,7 @@
public void ScopeIsThreadLocal()
{
_familyElement.SetAttribute(XmlConstants.SCOPE, InstanceScope.ThreadLocal.ToString());
- assertThatTheFamilyPolicyIs<ThreadLocalStoragePolicy>();
+ assertThatTheFamilyLifecycleIs<ThreadLocalStorageLifecycle>();
}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Configuration/NormalGraphBuilderTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/NormalGraphBuilderTester.cs 2009-04-19 23:48:02 UTC (rev 239)
+++ trunk/Source/StructureMap.Testing/Configuration/NormalGraphBuilderTester.cs 2009-04-20 01:47:17 UTC (rev 240)
@@ -3,6 +3,7 @@
using StructureMap.Configuration.DSL;
using StructureMap.Graph;
using StructureMap.Pipeline;
+using StructureMap.Source;
using StructureMap.Testing.Widget3;
namespace StructureMap.Testing.Configuration
@@ -57,14 +58,18 @@
[Test]
public void Create_system_object_successfully_and_call_the_requested_action()
{
- var memento = new MemoryInstanceMemento("Singleton", "anything");
+ var memento = new MemoryInstanceMemento("XmlFile", "anything");
+ memento.SetProperty("FilePath", "something");
+ memento.SetProperty("XPath", "nodeName");
+ memento.SetProperty("NodeName", "something");
+
bool iWasCalled = false;
var builder = new GraphBuilder(new Registry[0]);
- builder.WithSystemObject<IBuildInterceptor>(memento, "singleton", policy =>
+ builder.WithSystemObject<MementoSource>(memento, "some xml", policy =>
{
- Assert.IsInstanceOfType(typeof (SingletonPolicy), policy);
+ Assert.IsInstanceOfType(typeof(XmlFileMementoSource), policy);
iWasCalled = true;
});
Modified: trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs
===================================================================
--- trunk/Source/StructureMa...
[truncated message content] |