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...> - 2009-12-26 18:39:48
|
Revision: 300
http://structuremap.svn.sourceforge.net/structuremap/?rev=300&view=rev
Author: jeremydmiller
Date: 2009-12-26 18:39:40 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
code cleanup
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/ConfigurationParser.cs
trunk/Source/StructureMap/Configuration/ConfigurationParserBuilder.cs
trunk/Source/StructureMap/Configuration/DictionaryReader.cs
trunk/Source/StructureMap/Configuration/FamilyParser.cs
trunk/Source/StructureMap/Configuration/PrimitiveArrayReader.cs
trunk/Source/StructureMap/Configuration/XmlExtensions.cs
trunk/Source/StructureMap/Construction/BuilderCompiler.cs
trunk/Source/StructureMap/Construction/ConstructorFunctionBuilder.cs
trunk/Source/StructureMap/Construction/SetterBuilder.cs
trunk/Source/StructureMap/Diagnostics/BuildError.cs
trunk/Source/StructureMap/Diagnostics/CharacterWidth.cs
trunk/Source/StructureMap/Diagnostics/DoctorRunner.cs
trunk/Source/StructureMap/Diagnostics/Error.cs
trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs
trunk/Source/StructureMap/Diagnostics/ValidationError.cs
trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs
trunk/Source/StructureMap/Example.cs
trunk/Source/StructureMap/Exceptions/InstancePropertyValueException.cs
trunk/Source/StructureMap/Exceptions/MissingPluginFamilyException.cs
trunk/Source/StructureMap/Exceptions/StructureMapConfigurationException.cs
trunk/Source/StructureMap/Graph/AssemblyScanner.cs
trunk/Source/StructureMap/Graph/ImplementationMap.cs
trunk/Source/StructureMap/Graph/PluginFamilyCollection.cs
trunk/Source/StructureMap/Graph/PluginGraph.cs
trunk/Source/StructureMap/Interceptors/CompoundInterceptor.cs
trunk/Source/StructureMap/Interceptors/Interceptors.cs
trunk/Source/StructureMap/Interceptors/MatchedTypeInterceptor.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs
trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs
trunk/Source/StructureMap/Pipeline/InstanceKey.cs
trunk/Source/StructureMap/Pipeline/Lifecycles.cs
trunk/Source/StructureMap/Pipeline/MainObjectCache.cs
trunk/Source/StructureMap/Pipeline/SessionWrapper.cs
trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs
trunk/Source/StructureMap/Pipeline/UserControlInstance.cs
trunk/Source/StructureMap/Source/BasicXmlMementoSource.cs
trunk/Source/StructureMap/Source/MemoryMementoSource.cs
trunk/Source/StructureMap/SystemRegistry.cs
trunk/Source/StructureMap/TypeExtensions.cs
Modified: trunk/Source/StructureMap/Configuration/ConfigurationParser.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -62,16 +62,12 @@
}
- public string FilePath
- {
- get { return _filePath; }
- set { _filePath = value; }
- }
+ public string FilePath { get { return _filePath; } set { _filePath = value; } }
public void ForEachFile(GraphLog log, Action<string> action)
{
string includePath = getIncludePath();
-
+
// Find the text in every child node of _structureMapNode and
// perform an action with that text
_structureMapNode.ForTextInChild("Include/@File").Do(fileName =>
Modified: trunk/Source/StructureMap/Configuration/ConfigurationParserBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/ConfigurationParserBuilder.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Configuration/ConfigurationParserBuilder.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -17,6 +17,11 @@
public class ConfigurationParserBuilder : IConfigurationParserBuilder
{
+ /// <summary>
+ /// The name of the default configuration file. The value is always <c>StructurMap.config</c>
+ /// </summary>
+ public static readonly string DefaultConfigurationFilename = "StructureMap.config";
+
private readonly GraphLog _log;
private readonly List<string> _otherFiles = new List<string>();
private readonly List<ConfigurationParser> _parsers = new List<ConfigurationParser>();
@@ -32,24 +37,12 @@
#region IConfigurationParserBuilder Members
- public bool UseAndEnforceExistenceOfDefaultFile
- {
- get { return _useAndEnforceExistenceOfDefaultFile; }
- set { _useAndEnforceExistenceOfDefaultFile = value; }
- }
+ public bool UseAndEnforceExistenceOfDefaultFile { get { return _useAndEnforceExistenceOfDefaultFile; } set { _useAndEnforceExistenceOfDefaultFile = value; } }
- public bool IgnoreDefaultFile
- {
- get { return _ignoreDefaultFile; }
- set { _ignoreDefaultFile = value; }
- }
+ public bool IgnoreDefaultFile { get { return _ignoreDefaultFile; } set { _ignoreDefaultFile = value; } }
- public bool PullConfigurationFromAppConfig
- {
- get { return _pullConfigurationFromAppConfig; }
- set { _pullConfigurationFromAppConfig = value; }
- }
+ public bool PullConfigurationFromAppConfig { get { return _pullConfigurationFromAppConfig; } set { _pullConfigurationFromAppConfig = value; } }
public void IncludeFile(string filename)
{
@@ -91,7 +84,7 @@
ConfigurationParser childParser = ConfigurationParser.FromFile(filename);
list.Add(childParser);
})
- .AndReportErrorAs(150, filename));
+ .AndReportErrorAs(150, filename));
}
}
@@ -114,7 +107,7 @@
{
foreach (string filename in _otherFiles)
{
- var absolutePath = locateFileAsAbsolutePath(filename);
+ string absolutePath = locateFileAsAbsolutePath(filename);
_log.Try(() =>
{
ConfigurationParser parser = ConfigurationParser.FromFile(absolutePath);
@@ -128,7 +121,7 @@
{
if (_ignoreDefaultFile) return;
// Pick up the configuration in the default StructureMap.config
- var pathToStructureMapConfig = GetStructureMapConfigurationPath();
+ string pathToStructureMapConfig = GetStructureMapConfigurationPath();
if ((_useAndEnforceExistenceOfDefaultFile || File.Exists(pathToStructureMapConfig)))
{
_log.Try(() =>
@@ -150,11 +143,6 @@
}
/// <summary>
- /// The name of the default configuration file. The value is always <c>StructurMap.config</c>
- /// </summary>
- public static readonly string DefaultConfigurationFilename = "StructureMap.config";
-
- /// <summary>
/// Returns the absolute path to the StructureMap.config file
/// </summary>
/// <returns></returns>
@@ -166,8 +154,8 @@
private static string locateFileAsAbsolutePath(string filename)
{
if (Path.IsPathRooted(filename)) return filename;
- var basePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
- var configPath = Path.Combine(basePath, filename);
+ string basePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
+ string configPath = Path.Combine(basePath, filename);
if (!File.Exists(configPath))
{
Modified: trunk/Source/StructureMap/Configuration/DictionaryReader.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DictionaryReader.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Configuration/DictionaryReader.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -63,10 +63,7 @@
_dictionary.Add(key, theValue);
}
- public object Object
- {
- get { return _dictionary; }
- }
+ public object Object { get { return _dictionary; } }
#endregion
}
@@ -96,10 +93,7 @@
_collection.Add(name, value);
}
- public object Object
- {
- get { return _collection; }
- }
+ public object Object { get { return _collection; } }
#endregion
}
Modified: trunk/Source/StructureMap/Configuration/FamilyParser.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/FamilyParser.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Configuration/FamilyParser.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -121,7 +121,8 @@
private void attachInterceptors(PluginFamily family, XmlElement familyElement)
{
- string contextBase = string.Format("creating an InstanceInterceptor for {0}\n", family.PluginType.AssemblyQualifiedName);
+ string contextBase = string.Format("creating an InstanceInterceptor for {0}\n",
+ family.PluginType.AssemblyQualifiedName);
familyElement.ForEachChild("*/Interceptor").Do(element =>
{
var interceptorMemento = new XmlAttributeInstanceMemento(element);
Modified: trunk/Source/StructureMap/Configuration/PrimitiveArrayReader.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/PrimitiveArrayReader.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Configuration/PrimitiveArrayReader.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -1,6 +1,5 @@
using System;
using System.Xml;
-using StructureMap.Graph;
using StructureMap.Pipeline;
using StructureMap.TypeRules;
Modified: trunk/Source/StructureMap/Configuration/XmlExtensions.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/XmlExtensions.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Configuration/XmlExtensions.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -16,26 +16,6 @@
return new XmlTextExpression(node, xpath);
}
- public class XmlTextExpression
- {
- private readonly XmlNodeList _list;
-
- internal XmlTextExpression(XmlNode parent, string attributePath)
- {
- _list = parent.SelectNodes(attributePath);
- }
-
- public void Do(Action<string> action)
- {
- if (_list == null) return;
-
- foreach (XmlNode node in _list)
- {
- action(node.InnerText);
- }
- }
- }
-
public static XmlNodeExpression ForEachChild(this XmlNode node, string xpath)
{
return new XmlNodeExpression(node, xpath);
@@ -113,8 +93,26 @@
#region Nested type: XmlTextExpression
+ public class XmlTextExpression
+ {
+ private readonly XmlNodeList _list;
+ internal XmlTextExpression(XmlNode parent, string attributePath)
+ {
+ _list = parent.SelectNodes(attributePath);
+ }
+ public void Do(Action<string> action)
+ {
+ if (_list == null) return;
+
+ foreach (XmlNode node in _list)
+ {
+ action(node.InnerText);
+ }
+ }
+ }
+
#endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Construction/BuilderCompiler.cs
===================================================================
--- trunk/Source/StructureMap/Construction/BuilderCompiler.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Construction/BuilderCompiler.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -21,8 +21,8 @@
private static FuncCompiler getCompiler(Plugin plugin)
{
- var compilerType = typeof (FuncCompiler<>).MakeGenericType(plugin.PluggedType);
- return (FuncCompiler)Activator.CreateInstance(compilerType);
+ Type compilerType = typeof (FuncCompiler<>).MakeGenericType(plugin.PluggedType);
+ return (FuncCompiler) Activator.CreateInstance(compilerType);
}
public static Action<IArguments, object> CompileBuildUp(Plugin plugin)
@@ -32,6 +32,8 @@
return compiler.BuildUp(plugin);
}
+ #region Nested type: FuncCompiler
+
public interface FuncCompiler
{
Func<IArguments, object> Compile(Plugin plugin);
@@ -46,12 +48,12 @@
public InstanceBuilder CreateBuilder(Plugin plugin)
{
- var ctor = new ConstructorFunctionBuilder<T>().CreateBuilder(plugin);
- var setters = this.buildUp(plugin);
+ Func<IArguments, T> ctor = new ConstructorFunctionBuilder<T>().CreateBuilder(plugin);
+ Action<IArguments, T> setters = buildUp(plugin);
Func<IArguments, object> creator = args =>
{
- var target = ctor(args);
+ T target = ctor(args);
setters(args, target);
return target;
};
@@ -63,27 +65,33 @@
public Func<IArguments, object> Compile(Plugin plugin)
{
- var ctor = new ConstructorFunctionBuilder<T>().CreateBuilder(plugin);
- var buildUp = this.buildUp(plugin);
+ Func<IArguments, T> ctor = new ConstructorFunctionBuilder<T>().CreateBuilder(plugin);
+ Action<IArguments, T> buildUp = this.buildUp(plugin);
return args =>
{
// Call the constructor
- var target = ctor(args);
+ T target = ctor(args);
buildUp(args, target);
return target;
};
}
+ public Action<IArguments, object> BuildUp(Plugin plugin)
+ {
+ Action<IArguments, T> func = buildUp(plugin);
+ return (args, raw) => func(args, (T) raw);
+ }
+
private Action<IArguments, T> buildUp(Plugin plugin)
{
- var mandatories = plugin.Setters.Where(x => x.IsMandatory)
- .Select(x => _setterBuilder.BuildMandatorySetter((PropertyInfo)x.Property))
+ Action<IArguments, T>[] mandatories = plugin.Setters.Where(x => x.IsMandatory)
+ .Select(x => _setterBuilder.BuildMandatorySetter((PropertyInfo) x.Property))
.ToArray();
- var optionals = plugin.Setters.Where(x => !x.IsMandatory)
+ Action<IArguments, T>[] optionals = plugin.Setters.Where(x => !x.IsMandatory)
.Select(x => _setterBuilder.BuildOptionalSetter(x.Property))
.ToArray();
@@ -102,12 +110,8 @@
}
};
}
+ }
- public Action<IArguments, object> BuildUp(Plugin plugin)
- {
- var func = buildUp(plugin);
- return (args, raw) => func(args, (T)raw);
- }
- }
+ #endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Construction/ConstructorFunctionBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Construction/ConstructorFunctionBuilder.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Construction/ConstructorFunctionBuilder.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
@@ -18,20 +19,22 @@
{
ConstructorInfo constructor = plugin.GetConstructor();
- var args = Expression.Parameter(typeof (IArguments), "x");
+ ParameterExpression args = Expression.Parameter(typeof (IArguments), "x");
-
- var arguments = constructor.GetParameters().Select(param => ToParameterValueGetter(args, param.ParameterType, param.Name));
- var ctorCall = Expression.New(constructor, arguments);
+ IEnumerable<Expression> arguments =
+ constructor.GetParameters().Select(
+ param => ToParameterValueGetter(args, param.ParameterType, param.Name));
- var lambda = Expression.Lambda(typeof (Func<IArguments, T>), ctorCall, args);
+ NewExpression ctorCall = Expression.New(constructor, arguments);
+
+ LambdaExpression lambda = Expression.Lambda(typeof (Func<IArguments, T>), ctorCall, args);
return (Func<IArguments, T>) lambda.Compile();
}
public static Expression ToParameterValueGetter(ParameterExpression args, Type type, string argName)
{
- MethodInfo method = typeof(IArguments).GetMethod("Get").MakeGenericMethod(type);
+ MethodInfo method = typeof (IArguments).GetMethod("Get").MakeGenericMethod(type);
return Expression.Call(args, method, Expression.Constant(argName));
}
}
Modified: trunk/Source/StructureMap/Construction/SetterBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Construction/SetterBuilder.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Construction/SetterBuilder.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -14,33 +14,31 @@
public Action<IArguments, T> BuildMandatorySetter(PropertyInfo property)
{
- var args = Expression.Parameter(typeof (IArguments), "args");
- var target = Expression.Parameter(typeof (T), "target");
+ ParameterExpression args = Expression.Parameter(typeof (IArguments), "args");
+ ParameterExpression target = Expression.Parameter(typeof (T), "target");
- var getValue = ConstructorFunctionBuilder<T>.ToParameterValueGetter(args, property.PropertyType, property.Name);
- var method = property.GetSetMethod();
+ Expression getValue = ConstructorFunctionBuilder<T>.ToParameterValueGetter(args, property.PropertyType,
+ property.Name);
+ MethodInfo method = property.GetSetMethod();
- var callSetMethod = Expression.Call(target, method, getValue);
+ MethodCallExpression callSetMethod = Expression.Call(target, method, getValue);
- var lambda = Expression.Lambda(typeof (Action<IArguments, T>), callSetMethod, args, target);
+ LambdaExpression lambda = Expression.Lambda(typeof (Action<IArguments, T>), callSetMethod, args, target);
return (Action<IArguments, T>) lambda.Compile();
}
public Action<IArguments, T> BuildOptionalSetter(PropertyInfo property)
{
- var name = property.Name;
- var func = BuildMandatorySetter(property);
- return (args, target) =>
- {
- if (args.Has(name)) func(args, target);
- };
+ string name = property.Name;
+ Action<IArguments, T> func = BuildMandatorySetter(property);
+ return (args, target) => { if (args.Has(name)) func(args, target); };
}
public Action<IArguments, T> BuildOptionalSetter(string propertyName)
{
- PropertyInfo property = typeof(T).GetProperty(propertyName);
+ PropertyInfo property = typeof (T).GetProperty(propertyName);
return BuildOptionalSetter(property);
}
}
Modified: trunk/Source/StructureMap/Diagnostics/BuildError.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/BuildError.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Diagnostics/BuildError.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -52,20 +52,11 @@
_pluginType = pluginType;
}
- public List<BuildDependency> Dependencies
- {
- get { return _dependencies; }
- }
+ public List<BuildDependency> Dependencies { get { return _dependencies; } }
- public Instance Instance
- {
- get { return _instance; }
- }
+ public Instance Instance { get { return _instance; } }
- public Type PluginType
- {
- get { return _pluginType; }
- }
+ public Type PluginType { get { return _pluginType; } }
public StructureMapException Exception { get; set; }
Modified: trunk/Source/StructureMap/Diagnostics/CharacterWidth.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/CharacterWidth.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Diagnostics/CharacterWidth.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -4,10 +4,7 @@
{
private int _width;
- internal int Width
- {
- get { return _width; }
- }
+ internal int Width { get { return _width; } }
internal static CharacterWidth[] For(int count)
{
Modified: trunk/Source/StructureMap/Diagnostics/DoctorRunner.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/DoctorRunner.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Diagnostics/DoctorRunner.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -13,7 +13,10 @@
public DoctorReport RunReport(string bootstrapperTypeName)
{
- var report = new DoctorReport {Result = DoctorResult.Success};
+ var report = new DoctorReport
+ {
+ Result = DoctorResult.Success
+ };
IBootstrapper bootstrapper;
Modified: trunk/Source/StructureMap/Diagnostics/Error.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/Error.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Diagnostics/Error.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -24,7 +24,8 @@
_message = ErrorMessages.GetMessage(errorCode, args);
}
- public Error(int errorCode, Exception ex, params object[] args) : this(errorCode, args)
+ public Error(int errorCode, Exception ex, params object[] args)
+ : this(errorCode, args)
{
_message += "\n\n" + ex.Message;
@@ -41,10 +42,7 @@
}
- public int Code
- {
- get { return _code; }
- }
+ public int Code { get { return _code; } }
#region IEquatable<Error> Members
Modified: trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Diagnostics/ValidationBuildSession.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -21,25 +21,17 @@
{
}
- public ValidationBuildSession(PluginGraph graph) : base(graph)
+ public ValidationBuildSession(PluginGraph graph)
+ : base(graph)
{
}
- public bool Success
- {
- get { return _errors.BuildErrors.Length == 0 && _validationErrors.Count == 0; }
- }
+ public bool Success { get { return _errors.BuildErrors.Length == 0 && _validationErrors.Count == 0; } }
- public BuildError[] BuildErrors
- {
- get { return _errors.BuildErrors; }
- }
+ public BuildError[] BuildErrors { get { return _errors.BuildErrors; } }
- public ValidationError[] ValidationErrors
- {
- get { return _validationErrors.ToArray(); }
- }
+ public ValidationError[] ValidationErrors { get { return _validationErrors.ToArray(); } }
public override object CreateInstance(Type pluginType, Instance instance)
{
@@ -133,7 +125,6 @@
writer.WriteLine();
-
writer.WriteLine("StructureMap Failures: {0} Build/Configuration Failures and {1} Validation Errors",
_errors.BuildErrors.Length, _validationErrors.Count);
Modified: trunk/Source/StructureMap/Diagnostics/ValidationError.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/ValidationError.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Diagnostics/ValidationError.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -1,7 +1,6 @@
using System;
using System.IO;
using System.Reflection;
-using StructureMap.Graph;
using StructureMap.Pipeline;
namespace StructureMap.Diagnostics
Modified: trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Diagnostics/WhatDoIHaveWriter.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -67,11 +67,11 @@
{
_writer.AddDivider('-');
var contents = new[]
- {
- "{0} ({1})".ToFormat(pluginType.PluginType.GetName(), pluginType.PluginType.GetFullName()),
- string.Empty,
- string.Empty
- };
+ {
+ "{0} ({1})".ToFormat(pluginType.PluginType.GetName(), pluginType.PluginType.GetFullName()),
+ string.Empty,
+ string.Empty
+ };
if (pluginType.Default != null)
{
Modified: trunk/Source/StructureMap/Example.cs
===================================================================
--- trunk/Source/StructureMap/Example.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Example.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -1,5 +1,3 @@
-using System;
-
namespace StructureMap
{
public interface IMessageSender
@@ -21,10 +19,12 @@
return new SendExpression(text, _messageSender);
}
+ #region Nested type: SendExpression
+
public class SendExpression : ToExpression
{
+ private readonly IMessageSender _messageSender;
private readonly string _text;
- private readonly IMessageSender _messageSender;
private string _sender;
public SendExpression(string text, IMessageSender messageSender)
@@ -33,22 +33,28 @@
_messageSender = messageSender;
}
+ void ToExpression.To(string receiver)
+ {
+ _messageSender.SendMessage(_text, _sender, receiver);
+ }
+
public ToExpression From(string sender)
{
_sender = sender;
return this;
}
-
- void ToExpression.To(string receiver)
- {
- _messageSender.SendMessage(_text, _sender, receiver);
- }
}
+ #endregion
+
+ #region Nested type: ToExpression
+
public interface ToExpression
{
void To(string receiver);
}
+
+ #endregion
}
public class SendMessageRequest
@@ -68,34 +74,34 @@
public class APIConsumer
{
- // Snippet from a class that uses IMessageSender
- public void SendMessage(IMessageSender sender)
- {
- // Is this right?
- sender.SendMessage("the message body", "PARTNER001", "PARTNER002");
+ // Snippet from a class that uses IMessageSender
+ public void SendMessage(IMessageSender sender)
+ {
+ // Is this right?
+ sender.SendMessage("the message body", "PARTNER001", "PARTNER002");
- // or this?
- sender.SendMessage("PARTNER001", "the message body", "PARTNER002");
+ // or this?
+ sender.SendMessage("PARTNER001", "the message body", "PARTNER002");
- // or this?
- sender.SendMessage("PARTNER001", "PARTNER002", "the message body");
- }
+ // or this?
+ sender.SendMessage("PARTNER001", "PARTNER002", "the message body");
+ }
- public void SendMessageFluently(FluentMessageSender sender)
- {
- sender
- .SendText("the message body")
- .From("PARTNER001").To("PARTNER002");
- }
+ public void SendMessageFluently(FluentMessageSender sender)
+ {
+ sender
+ .SendText("the message body")
+ .From("PARTNER001").To("PARTNER002");
+ }
- public void SendMessageAsParameter(ParameterObjectMessageSender sender)
- {
- sender.Send(new SendMessageRequest()
+ public void SendMessageAsParameter(ParameterObjectMessageSender sender)
{
- Text = "the message body",
- Receiver = "PARTNER001",
- Sender = "PARTNER002"
- });
+ sender.Send(new SendMessageRequest
+ {
+ Text = "the message body",
+ Receiver = "PARTNER001",
+ Sender = "PARTNER002"
+ });
+ }
}
- }
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Exceptions/InstancePropertyValueException.cs
===================================================================
--- trunk/Source/StructureMap/Exceptions/InstancePropertyValueException.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Exceptions/InstancePropertyValueException.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -15,8 +15,9 @@
{
}
- protected InstancePropertyValueException(SerializationInfo info, StreamingContext context) :
- base(info, context)
+ protected InstancePropertyValueException(SerializationInfo info, StreamingContext context)
+ :
+ base(info, context)
{
}
}
Modified: trunk/Source/StructureMap/Exceptions/MissingPluginFamilyException.cs
===================================================================
--- trunk/Source/StructureMap/Exceptions/MissingPluginFamilyException.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Exceptions/MissingPluginFamilyException.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -13,16 +13,14 @@
_message = string.Format("Type {0} is not a configured PluginFamily", pluginTypeName);
}
- protected MissingPluginFamilyException(SerializationInfo info, StreamingContext context) :
- base(info, context)
+ protected MissingPluginFamilyException(SerializationInfo info, StreamingContext context)
+ :
+ base(info, context)
{
_message = info.GetString("message");
}
- public override string Message
- {
- get { return _message; }
- }
+ public override string Message { get { return _message; } }
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
Modified: trunk/Source/StructureMap/Exceptions/StructureMapConfigurationException.cs
===================================================================
--- trunk/Source/StructureMap/Exceptions/StructureMapConfigurationException.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Exceptions/StructureMapConfigurationException.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -6,13 +6,15 @@
[Serializable]
public class StructureMapConfigurationException : ApplicationException
{
- public StructureMapConfigurationException(string message) : base(message)
+ public StructureMapConfigurationException(string message)
+ : base(message)
{
}
- protected StructureMapConfigurationException(SerializationInfo info, StreamingContext context) :
- base(info, context)
+ protected StructureMapConfigurationException(SerializationInfo info, StreamingContext context)
+ :
+ base(info, context)
{
}
}
Modified: trunk/Source/StructureMap/Graph/AssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -40,9 +40,10 @@
{
private readonly List<Assembly> _assemblies = new List<Assembly>();
private readonly CompositeFilter<Type> _filter = new CompositeFilter<Type>();
+ private readonly ImplementationMap _implementationMap = new ImplementationMap();
- private readonly List<ITypeScanner> _scanners = new List<ITypeScanner>();
private readonly List<Action<PluginGraph>> _postScanningActions = new List<Action<PluginGraph>>();
+ private readonly List<ITypeScanner> _scanners = new List<ITypeScanner>();
public AssemblyScanner()
{
@@ -174,8 +175,6 @@
With(new GenericConnectionScanner(openGenericType));
}
-
- private readonly ImplementationMap _implementationMap = new ImplementationMap();
public void SingleImplementationsOfInterface()
{
@@ -232,10 +231,8 @@
internal void ScanForAll(PluginGraph pluginGraph)
{
- pluginGraph.Types.For(_assemblies, _filter).Each(type =>
- {
- _scanners.Each(x => x.Process(type, pluginGraph));
- });
+ pluginGraph.Types.For(_assemblies, _filter).Each(
+ type => { _scanners.Each(x => x.Process(type, pluginGraph)); });
_postScanningActions.Each(x => x(pluginGraph));
}
Modified: trunk/Source/StructureMap/Graph/ImplementationMap.cs
===================================================================
--- trunk/Source/StructureMap/Graph/ImplementationMap.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Graph/ImplementationMap.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -10,6 +10,11 @@
{
private readonly Cache<Type, List<Type>> _types = new Cache<Type, List<Type>>(t => new List<Type>());
+ public void Process(Type type, PluginGraph graph)
+ {
+ RegisterType(type);
+ }
+
public void Register(Type interfaceType, Type concreteType)
{
_types[interfaceType].Add(concreteType);
@@ -22,11 +27,6 @@
type.GetInterfaces().Where(i => i.IsVisible).Each(i => Register(i, type));
}
- public void Process(Type type, PluginGraph graph)
- {
- RegisterType(type);
- }
-
public void RegisterSingleImplementations(PluginGraph graph)
{
_types.Each((pluginType, types) =>
Modified: trunk/Source/StructureMap/Graph/PluginFamilyCollection.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamilyCollection.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Graph/PluginFamilyCollection.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -32,10 +32,7 @@
}
}
- public int Count
- {
- get { return _pluginFamilies.Count; }
- }
+ public int Count { get { return _pluginFamilies.Count; } }
public IEnumerable<PluginFamily> All
{
Modified: trunk/Source/StructureMap/Graph/PluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginGraph.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Graph/PluginGraph.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -54,7 +54,7 @@
_reference.Target = _builder();
}
- return (T)_reference.Target;
+ return (T) _reference.Target;
}
}
}
@@ -72,9 +72,9 @@
private readonly ProfileManager _profileManager = new ProfileManager();
private readonly List<Registry> _registries = new List<Registry>();
private readonly List<AssemblyScanner> _scanners = new List<AssemblyScanner>();
+ private readonly WeakReference<TypePool> _types;
private GraphLog _log = new GraphLog();
private bool _sealed;
- private readonly WeakReference<TypePool> _types;
public PluginGraph()
@@ -83,13 +83,7 @@
_types = new WeakReference<TypePool>(() => new TypePool(this));
}
- public TypePool Types
- {
- get
- {
- return _types.Value;
- }
- }
+ public TypePool Types { get { return _types.Value; } }
public List<Registry> Registries { get { return _registries; } }
Modified: trunk/Source/StructureMap/Interceptors/CompoundInterceptor.cs
===================================================================
--- trunk/Source/StructureMap/Interceptors/CompoundInterceptor.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Interceptors/CompoundInterceptor.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -10,10 +10,7 @@
}
- public InstanceInterceptor[] Interceptors
- {
- get { return _interceptors; }
- }
+ public InstanceInterceptor[] Interceptors { get { return _interceptors; } }
#region InstanceInterceptor Members
Modified: trunk/Source/StructureMap/Interceptors/Interceptors.cs
===================================================================
--- trunk/Source/StructureMap/Interceptors/Interceptors.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Interceptors/Interceptors.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -1,5 +1,6 @@
namespace StructureMap.Interceptors
{
public delegate object EnrichmentHandler<T>(T target);
+
public delegate object ContextEnrichmentHandler<T>(IContext context, T target);
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Interceptors/MatchedTypeInterceptor.cs
===================================================================
--- trunk/Source/StructureMap/Interceptors/MatchedTypeInterceptor.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Interceptors/MatchedTypeInterceptor.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -45,6 +45,5 @@
{
_interception = interception;
}
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
-using StructureMap.Graph;
-using StructureMap.TypeRules;
namespace StructureMap.Pipeline
{
@@ -213,7 +211,7 @@
// _children.Add(name, instance);
// }
-
+
// }
// protected void setChildArray(string name, Instance[] array)
@@ -224,7 +222,7 @@
// {
// throw new ApplicationException("There is a null value in the array of child Instances");
// }
-
+
// }
// _arrays.Add(name, array);
Modified: trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Pipeline/HttpContextLifecycle.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -8,16 +8,6 @@
public static readonly string ITEM_NAME = "STRUCTUREMAP-INSTANCES";
- public static bool HasContext()
- {
- return HttpContext.Current != null;
- }
-
- public static void DisposeAndClearAll()
- {
- new HttpContextLifecycle().FindCache().DisposeAndClear();
- }
-
public void EjectAll()
{
FindCache().DisposeAndClear();
@@ -33,7 +23,7 @@
{
if (!items.Contains(ITEM_NAME))
{
- MainObjectCache cache = new MainObjectCache();
+ var cache = new MainObjectCache();
items.Add(ITEM_NAME, cache);
return cache;
@@ -41,10 +31,20 @@
}
}
- return (IObjectCache)items[ITEM_NAME];
+ return (IObjectCache) items[ITEM_NAME];
}
+ public static bool HasContext()
+ {
+ return HttpContext.Current != null;
+ }
+ public static void DisposeAndClearAll()
+ {
+ new HttpContextLifecycle().FindCache().DisposeAndClear();
+ }
+
+
protected virtual IDictionary findHttpDictionary()
{
return HttpContext.Current.Items;
Modified: trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Pipeline/HybridSessionLifecycle.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -2,6 +2,5 @@
{
public class HybridSessionLifecycle : HttpLifecycleBase<HttpSessionLifecycle, ThreadLocalStorageLifecycle>
{
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/InstanceKey.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/InstanceKey.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Pipeline/InstanceKey.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -4,12 +4,8 @@
{
public class InstanceKey
{
- public string Name { get; set; }
- public Type PluginType { get; set; }
- [Obsolete("Kill!")]
- private WeakReference _session;
- [Obsolete("Kill!")]
- private WeakReference _instance;
+ [Obsolete("Kill!")] private WeakReference _instance;
+ [Obsolete("Kill!")] private WeakReference _session;
public InstanceKey()
{
@@ -21,20 +17,16 @@
PluginType = pluginType;
}
+ public string Name { get; set; }
+ public Type PluginType { get; set; }
+
[Obsolete("Kill!")]
- public BuildSession Session
- {
- get { return (BuildSession) _session.Target; }
- set { _session = new WeakReference(value); }
- }
+ public BuildSession Session { get { return (BuildSession) _session.Target; } set { _session = new WeakReference(value); } }
[Obsolete("Kill!")]
public Instance Instance
{
- get
- {
- return (Instance) _instance.Target;
- }
+ get { return (Instance) _instance.Target; }
set
{
Name = value.Name;
@@ -53,15 +45,16 @@
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
- if (obj.GetType() != typeof(InstanceKey)) return false;
- return Equals((InstanceKey)obj);
+ if (obj.GetType() != typeof (InstanceKey)) return false;
+ return Equals((InstanceKey) obj);
}
public override int GetHashCode()
{
unchecked
{
- return ((Name != null ? Name.GetHashCode() : 0) * 397) ^ (PluginType != null ? PluginType.GetHashCode() : 0);
+ return ((Name != null ? Name.GetHashCode() : 0)*397) ^
+ (PluginType != null ? PluginType.GetHashCode() : 0);
}
}
}
Modified: trunk/Source/StructureMap/Pipeline/Lifecycles.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Lifecycles.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Pipeline/Lifecycles.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -30,7 +30,7 @@
case InstanceScope.HybridHttpSession:
return new HybridSessionLifecycle();
}
-
+
throw new ArgumentOutOfRangeException("scope");
}
}
Modified: trunk/Source/StructureMap/Pipeline/MainObjectCache.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/MainObjectCache.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Pipeline/MainObjectCache.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -5,18 +5,12 @@
{
public class MainObjectCache : IObjectCache
{
- private readonly IDictionary<InstanceKey, object> _objects = new Dictionary<InstanceKey,object>();
private readonly object _locker = new object();
+ private readonly IDictionary<InstanceKey, object> _objects = new Dictionary<InstanceKey, object>();
- public object Locker
- {
- get { return _locker; }
- }
+ public object Locker { get { return _locker; } }
- public int Count
- {
- get { return _objects.Count; }
- }
+ public int Count { get { return _objects.Count; } }
public object Get(Type pluginType, Instance instance)
{
@@ -45,21 +39,23 @@
{
lock (Locker)
{
- foreach (var @object in _objects.Values)
+ foreach (object @object in _objects.Values)
{
if (@object is Container) continue;
- IDisposable disposable = @object as IDisposable;
+ var disposable = @object as IDisposable;
if (disposable != null)
{
try
{
disposable.Dispose();
}
- catch (Exception) { }
+ catch (Exception)
+ {
+ }
}
}
-
+
_objects.Clear();
}
}
Modified: trunk/Source/StructureMap/Pipeline/SessionWrapper.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/SessionWrapper.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Pipeline/SessionWrapper.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -25,20 +25,11 @@
_session.CopyTo(array, index);
}
- public int Count
- {
- get { return _session.Count; }
- }
+ public int Count { get { return _session.Count; } }
- public object SyncRoot
- {
- get { return _session.SyncRoot; }
- }
+ public object SyncRoot { get { return _session.SyncRoot; } }
- public bool IsSynchronized
- {
- get { return _session.IsSynchronized; }
- }
+ public bool IsSynchronized { get { return _session.IsSynchronized; } }
public bool Contains(object key)
{
@@ -65,31 +56,15 @@
_session.Remove(key.ToString());
}
- public object this[object key]
- {
- get { return _session[key.ToString()]; }
- set { _session[key.ToString()] = value; }
- }
+ public object this[object key] { get { return _session[key.ToString()]; } set { _session[key.ToString()] = value; } }
- public ICollection Keys
- {
- get { return _session.Keys; }
- }
+ public ICollection Keys { get { return _session.Keys; } }
- public ICollection Values
- {
- get { throw new NotImplementedException(); }
- }
+ public ICollection Values { get { throw new NotImplementedException(); } }
- public bool IsReadOnly
- {
- get { return _session.IsReadOnly; }
- }
+ public bool IsReadOnly { get { return _session.IsReadOnly; } }
- public bool IsFixedSize
- {
- get { return false; }
- }
+ public bool IsFixedSize { get { return false; } }
#endregion
}
Modified: trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Pipeline/UniquePerRequestLifecycle.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -1,5 +1,3 @@
-using System;
-
namespace StructureMap.Pipeline
{
/// <summary>
@@ -9,7 +7,6 @@
{
public void EjectAll()
{
-
}
public IObjectCache FindCache()
@@ -18,9 +15,9 @@
}
//#region IBuildInterceptor Members
-
+
//private IBuildPolicy _innerPolicy = new BuildPolicy();
-
+
//public IBuildPolicy InnerPolicy
//{
// get { return _innerPolicy; }
@@ -52,4 +49,4 @@
//#endregion
}
-}
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/UserControlInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/UserControlInstance.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Pipeline/UserControlInstance.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -1,6 +1,5 @@
using System;
using System.Web.UI;
-using StructureMap.Graph;
using StructureMap.TypeRules;
namespace StructureMap.Pipeline
@@ -14,16 +13,10 @@
_url = url;
}
- protected override UserControlInstance thisInstance
- {
- get { return this; }
- }
+ protected override UserControlInstance thisInstance { get { return this; } }
- public string Url
- {
- get { return _url; }
- }
+ public string Url { get { return _url; } }
protected override object build(Type pluginType, BuildSession session)
{
Modified: trunk/Source/StructureMap/Source/BasicXmlMementoSource.cs
===================================================================
--- trunk/Source/StructureMap/Source/BasicXmlMementoSource.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Source/BasicXmlMementoSource.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -15,10 +15,7 @@
_node = Node;
}
- public override string Description
- {
- get { return "BasicXmlMementoSource"; }
- }
+ public override string Description { get { return "BasicXmlMementoSource"; } }
protected override XmlNode getRootNode()
{
Modified: trunk/Source/StructureMap/Source/MemoryMementoSource.cs
===================================================================
--- trunk/Source/StructureMap/Source/MemoryMementoSource.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/Source/MemoryMementoSource.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -14,10 +14,7 @@
_mementos = new Hashtable();
}
- public override string Description
- {
- get { return "DefaultMementoSource"; }
- }
+ public override string Description { get { return "DefaultMementoSource"; } }
protected override InstanceMemento[] fetchInternalMementos()
{
Modified: trunk/Source/StructureMap/SystemRegistry.cs
===================================================================
--- trunk/Source/StructureMap/SystemRegistry.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/SystemRegistry.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -30,7 +30,7 @@
private void AddLifecycleType<T>(InstanceScope scope) where T : ILifecycle
{
- addExpression(graph => graph.AddType(typeof(ILifecycle), typeof(T), scope.ToString()));
+ addExpression(graph => graph.AddType(typeof (ILifecycle), typeof (T), scope.ToString()));
}
private void AddMementoSourceType<T>(string name)
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-26 18:26:08 UTC (rev 299)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-26 18:39:40 UTC (rev 300)
@@ -153,7 +153,7 @@
public static IEnumerable<Type> AllInterfaces(this Type type)
{
- foreach (var @interface in type.GetInterfaces())
+ foreach (Type @interface in type.GetInterfaces())
{
yield return @interface;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 18:26:14
|
Revision: 299
http://structuremap.svn.sourceforge.net/structuremap/?rev=299&view=rev
Author: jeremydmiller
Date: 2009-12-26 18:26:08 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
eliminating an old file
Removed Paths:
-------------
trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs
Deleted: trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs 2009-12-26 18:18:44 UTC (rev 298)
+++ trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs 2009-12-26 18:26:08 UTC (rev 299)
@@ -1,64 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
-using StructureMap.TypeRules;
-using StructureMap.Util;
-
-namespace StructureMap.Graph
-{
- [Obsolete]
- public interface IHeavyweightTypeScanner
- {
- void Process(PluginGraph graph, IEnumerable<TypeMap> typeMaps);
- }
-
-
- public class TypeMap
- {
- internal TypeMap(Type pluginType, IList<Type> concreteTypes)
- {
- PluginType = pluginType;
- ConcreteTypes = new ReadOnlyCollection<Type>(concreteTypes);
- }
-
- public IList<Type> ConcreteTypes { get; private set; }
- public Type PluginType { get; private set; }
- }
-
- internal class TypeMapBuilder : ITypeScanner, IDisposable
- {
- private readonly Cache<Type, List<Type>> _implementations = new Cache<Type, List<Type>>(t => new List<Type>());
-
- public void Dispose()
- {
- //throw new NotImplementedException();
- //_implementations.Clear();
- }
-
- public void Process(Type type, PluginGraph graph)
- {
- if (!type.IsConcrete() || !Constructor.HasConstructors(type)) return;
- IEnumerable<Type> pluginTypes = FindPluginTypes(type);
-
- foreach (Type pluginType in pluginTypes)
- {
- _implementations[pluginType].Add(type);
- }
- }
-
- private IEnumerable<Type> FindPluginTypes(Type type)
- {
- return new Type[0];
- // lets not worry about abstract base classes for now
- return type.GetInterfaces().Where(t => t.IsPublic);
- }
-
- public IEnumerable<TypeMap> GetTypeMaps()
- {
- return new TypeMap[0];
- throw new NotImplementedException();
- //return _implementations.Contents().Select(pair => new TypeMap(pair.Key, pair.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...> - 2009-12-26 18:18:54
|
Revision: 298
http://structuremap.svn.sourceforge.net/structuremap/?rev=298&view=rev
Author: jeremydmiller
Date: 2009-12-26 18:18:44 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
Overhaul of the "single implementation scanning" feature
Modified Paths:
--------------
trunk/Source/StructureMap/Graph/AssemblyScanner.cs
trunk/Source/StructureMap/Graph/IAssemblyScanner.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap.Testing/Graph/SingleImplementationScannerTester.cs
trunk/Source/StructureMap.Testing/TypeExtensionsTester.cs
Added Paths:
-----------
trunk/Source/StructureMap/Graph/ImplementationMap.cs
Removed Paths:
-------------
trunk/Source/StructureMap/Graph/SingleImplementationScanner.cs
Modified: trunk/Source/StructureMap/Graph/AssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 17:37:30 UTC (rev 297)
+++ trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 18:18:44 UTC (rev 298)
@@ -41,9 +41,8 @@
private readonly List<Assembly> _assemblies = new List<Assembly>();
private readonly CompositeFilter<Type> _filter = new CompositeFilter<Type>();
- private readonly List<IHeavyweightTypeScanner> _heavyweightScanners = new List<IHeavyweightTypeScanner>();
-
private readonly List<ITypeScanner> _scanners = new List<ITypeScanner>();
+ private readonly List<Action<PluginGraph>> _postScanningActions = new List<Action<PluginGraph>>();
public AssemblyScanner()
{
@@ -74,13 +73,6 @@
_scanners.Add(scanner);
}
- public void With(IHeavyweightTypeScanner heavyweightScanner)
- {
- if (_heavyweightScanners.Contains(heavyweightScanner)) return;
-
- _heavyweightScanners.Add(heavyweightScanner);
- }
-
public void WithDefaultConventions()
{
With<DefaultConventionScanner>();
@@ -182,6 +174,15 @@
With(new GenericConnectionScanner(openGenericType));
}
+
+ private readonly ImplementationMap _implementationMap = new ImplementationMap();
+
+ public void SingleImplementationsOfInterface()
+ {
+ _scanners.Fill(_implementationMap);
+ _postScanningActions.Add(graph => _implementationMap.RegisterSingleImplementations(graph));
+ }
+
public void AssembliesFromApplicationBaseDirectory()
{
AssembliesFromApplicationBaseDirectory(a => true);
@@ -231,35 +232,15 @@
internal void ScanForAll(PluginGraph pluginGraph)
{
- //TypeMapBuilder heavyweightScan = configureHeavyweightScan();
-
pluginGraph.Types.For(_assemblies, _filter).Each(type =>
{
_scanners.Each(x => x.Process(type, pluginGraph));
});
- //performHeavyweightScan(pluginGraph, heavyweightScan);
+ _postScanningActions.Each(x => x(pluginGraph));
}
- private TypeMapBuilder configureHeavyweightScan()
- {
- var typeMapBuilder = new TypeMapBuilder();
- if (_heavyweightScanners.Count > 0)
- {
- With(typeMapBuilder);
- }
- return typeMapBuilder;
- }
-
- [Obsolete]
- private void performHeavyweightScan(PluginGraph pluginGraph, TypeMapBuilder typeMapBuilder)
- {
- IEnumerable<TypeMap> typeMaps = typeMapBuilder.GetTypeMaps();
- _heavyweightScanners.ForEach(scanner => scanner.Process(pluginGraph, typeMaps));
- typeMapBuilder.Dispose();
- }
-
public bool Contains(string assemblyName)
{
foreach (Assembly assembly in _assemblies)
Modified: trunk/Source/StructureMap/Graph/IAssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/IAssemblyScanner.cs 2009-12-26 17:37:30 UTC (rev 297)
+++ trunk/Source/StructureMap/Graph/IAssemblyScanner.cs 2009-12-26 18:18:44 UTC (rev 298)
@@ -75,8 +75,6 @@
/// <param name="scanner"></param>
void With(ITypeScanner scanner);
- void With(IHeavyweightTypeScanner heavyweightScanner);
-
/// <summary>
/// Adds the DefaultConventionScanner to the scanning operations. I.e., a concrete
/// class named "Something" that implements "ISomething" will be automatically
@@ -180,5 +178,12 @@
/// </example>
/// <param name="openGenericType"></param>
void ConnectImplementationsToTypesClosing(Type openGenericType);
+
+ /// <summary>
+ /// Directs the scanning to automatically register any type that is the single
+ /// implementation of an interface against that interface.
+ /// The filters apply
+ /// </summary>
+ void SingleImplementationsOfInterface();
}
}
\ No newline at end of file
Added: trunk/Source/StructureMap/Graph/ImplementationMap.cs
===================================================================
--- trunk/Source/StructureMap/Graph/ImplementationMap.cs (rev 0)
+++ trunk/Source/StructureMap/Graph/ImplementationMap.cs 2009-12-26 18:18:44 UTC (rev 298)
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using StructureMap.TypeRules;
+using StructureMap.Util;
+
+namespace StructureMap.Graph
+{
+ public class ImplementationMap : ITypeScanner
+ {
+ private readonly Cache<Type, List<Type>> _types = new Cache<Type, List<Type>>(t => new List<Type>());
+
+ public void Register(Type interfaceType, Type concreteType)
+ {
+ _types[interfaceType].Add(concreteType);
+ }
+
+ public void RegisterType(Type type)
+ {
+ if (!type.CanBeCreated()) return;
+
+ type.GetInterfaces().Where(i => i.IsVisible).Each(i => Register(i, type));
+ }
+
+ public void Process(Type type, PluginGraph graph)
+ {
+ RegisterType(type);
+ }
+
+ public void RegisterSingleImplementations(PluginGraph graph)
+ {
+ _types.Each((pluginType, types) =>
+ {
+ if (types.Count == 1)
+ {
+ graph.AddType(pluginType, types[0]);
+ }
+ });
+ }
+ }
+}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Graph/SingleImplementationScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/SingleImplementationScanner.cs 2009-12-26 17:37:30 UTC (rev 297)
+++ trunk/Source/StructureMap/Graph/SingleImplementationScanner.cs 2009-12-26 18:18:44 UTC (rev 298)
@@ -1,16 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-
-namespace StructureMap.Graph
-{
- public class SingleImplementationScanner : IHeavyweightTypeScanner
- {
- public void Process(PluginGraph graph, IEnumerable<TypeMap> typeMaps)
- {
- foreach (TypeMap map in typeMaps.Where(map => map.ConcreteTypes.Count == 1))
- {
- graph.AddType(map.PluginType, map.ConcreteTypes[0]);
- }
- }
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-12-26 17:37:30 UTC (rev 297)
+++ trunk/Source/StructureMap/StructureMap.csproj 2009-12-26 18:18:44 UTC (rev 298)
@@ -362,11 +362,10 @@
<Compile Include="Graph\FindAllTypesFilter.cs" />
<Compile Include="Graph\FindRegistriesScanner.cs" />
<Compile Include="Graph\IAssemblyScanner.cs" />
- <Compile Include="Graph\IHeavyweightTypeScanner.cs" />
+ <Compile Include="Graph\ImplementationMap.cs" />
<Compile Include="Graph\ITypeScanner.cs" />
<Compile Include="Graph\PluggableAttributeScanner.cs" />
<Compile Include="Graph\PluginCache.cs" />
- <Compile Include="Graph\SingleImplementationScanner.cs" />
<Compile Include="IContext.cs" />
<Compile Include="Pipeline\Arguments.cs" />
<Compile Include="Pipeline\ArrayCoercion.cs" />
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-26 17:37:30 UTC (rev 297)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-26 18:18:44 UTC (rev 298)
@@ -7,6 +7,13 @@
{
public static class BasicExtensions
{
+ public static void Fill<T>(this IList<T> list, T value)
+ {
+ if (list.Contains(value)) return;
+ list.Add(value);
+ }
+
+
public static void TryGet<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key,
Action<TValue> action)
{
@@ -139,6 +146,19 @@
return type.FullName;
}
+ public static bool CanBeCreated(this Type type)
+ {
+ return type.IsConcrete() && Constructor.HasConstructors(type);
+ }
+
+ public static IEnumerable<Type> AllInterfaces(this Type type)
+ {
+ foreach (var @interface in type.GetInterfaces())
+ {
+ yield return @interface;
+ }
+ }
+
/// <summary>
/// Determines if the pluggedType can be upcast to the pluginType
/// </summary>
Modified: trunk/Source/StructureMap.Testing/Graph/SingleImplementationScannerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/SingleImplementationScannerTester.cs 2009-12-26 17:37:30 UTC (rev 297)
+++ trunk/Source/StructureMap.Testing/Graph/SingleImplementationScannerTester.cs 2009-12-26 18:18:44 UTC (rev 298)
@@ -13,7 +13,7 @@
typeof (Type).IsValueType.ShouldBeFalse();
}
- [Test, Ignore("Come back to this")]
+ [Test]
public void registers_plugins_that_only_have_a_single_implementation()
{
var container = new Container(registry =>
@@ -22,7 +22,7 @@
{
x.TheCallingAssembly();
x.IncludeNamespaceContainingType<SingleImplementationScannerTester>();
- x.With(new SingleImplementationScanner());
+ x.SingleImplementationsOfInterface();
});
});
Modified: trunk/Source/StructureMap.Testing/TypeExtensionsTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/TypeExtensionsTester.cs 2009-12-26 17:37:30 UTC (rev 297)
+++ trunk/Source/StructureMap.Testing/TypeExtensionsTester.cs 2009-12-26 18:18:44 UTC (rev 298)
@@ -102,5 +102,22 @@
Assert.IsTrue(typeof (string).IsString());
Assert.IsFalse(typeof (int).IsString());
}
+
+ [Test]
+ public void get_all_interfaces()
+ {
+ typeof(C3).AllInterfaces().ShouldHaveTheSameElementsAs(typeof(I1), typeof(I2), typeof(I3));
+ typeof(C2).AllInterfaces().ShouldHaveTheSameElementsAs(typeof(I1), typeof(I2));
+ typeof(C1).AllInterfaces().ShouldHaveTheSameElementsAs(typeof(I1));
+ }
}
+
+
+ public interface I1{}
+ public interface I2{}
+ public interface I3{}
+
+ public class C1 : I1{}
+ public class C2 : C1, I2{}
+ public class C3 : C2, I3{}
}
\ 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...> - 2009-12-26 17:37:37
|
Revision: 297
http://structuremap.svn.sourceforge.net/structuremap/?rev=297&view=rev
Author: jeremydmiller
Date: 2009-12-26 17:37:30 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
Redo of the assembly scanning. Mild optimization
Modified Paths:
--------------
trunk/Source/StructureMap/Graph/AssemblyScanner.cs
trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs
trunk/Source/StructureMap/Graph/PluginGraph.cs
trunk/Source/StructureMap/StructureMap.csproj
Added Paths:
-----------
trunk/Source/StructureMap/Graph/CompositeFilter.cs
trunk/Source/StructureMap/Graph/CompositePredicate.cs
trunk/Source/StructureMap/Graph/IAssemblyScanner.cs
Modified: trunk/Source/StructureMap/Graph/AssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 05:45:56 UTC (rev 296)
+++ trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 17:37:30 UTC (rev 297)
@@ -5,194 +5,44 @@
using System.Linq;
using System.Reflection;
using StructureMap.TypeRules;
+using StructureMap.Util;
namespace StructureMap.Graph
{
- public interface IAssemblyScanner
+ public class TypePool
{
- #region Designating Assemblies
+ private readonly Cache<Assembly, Type[]> _types = new Cache<Assembly, Type[]>();
- /// <summary>
- /// Add an Assembly to the scanning operation
- /// </summary>
- /// <param name="assembly"></param>
- void Assembly(Assembly assembly);
+ public TypePool(PluginGraph graph)
+ {
+ _types.OnMissing = assembly =>
+ {
+ try
+ {
+ return assembly.GetExportedTypes();
+ }
+ catch (Exception ex)
+ {
+ graph.Log.RegisterError(170, ex, assembly.FullName);
+ return new Type[0];
+ }
+ };
+ }
- /// <summary>
- /// Add an Assembly by name to the scanning operation
- /// </summary>
- /// <param name="assemblyName"></param>
- void Assembly(string assemblyName);
-
- /// <summary>
- /// Add the currently executing Assembly to the scanning operation
- /// </summary>
- void TheCallingAssembly();
-
- /// <summary>
- /// Add the Assembly that contains type T to the scanning operation
- /// </summary>
- /// <typeparam name="T"></typeparam>
- void AssemblyContainingType<T>();
-
- /// <summary>
- /// Add the Assembly that contains type to the scanning operation
- /// </summary>
- /// <param name="type"></param>
- void AssemblyContainingType(Type type);
-
- /// <summary>
- /// Sweep the designated path and add any Assembly's found in this folder to the
- /// scanning operation
- /// </summary>
- /// <param name="path"></param>
- void AssembliesFromPath(string path);
-
- /// <summary>
- /// Sweep the designated path and add any Assembly's found in this folder to the
- /// scanning operation. The assemblyFilter can be used to filter or limit the
- /// Assembly's that are picked up.
- /// </summary>
- /// <param name="path"></param>
- /// <param name="assemblyFilter"></param>
- void AssembliesFromPath(string path, Predicate<Assembly> assemblyFilter);
-
- /// <summary>
- /// Sweep the application base directory of current app domain and add any Assembly's
- /// found to the scanning operation.
- /// </summary>
- void AssembliesFromApplicationBaseDirectory();
-
- /// <summary>
- /// Sweep the application base directory of current app domain and add any Assembly's
- /// found to the scanning operation. The assemblyFilter can be used to filter or limit the
- /// Assembly's that are picked up.
- /// </summary>
- void AssembliesFromApplicationBaseDirectory(Predicate<Assembly> assemblyFilter);
-
- #endregion
-
- #region Adding TypeScanners
-
- /// <summary>
- /// Adds an ITypeScanner object to the scanning operation
- /// </summary>
- /// <param name="scanner"></param>
- void With(ITypeScanner scanner);
-
- void With(IHeavyweightTypeScanner heavyweightScanner);
-
- /// <summary>
- /// Adds the DefaultConventionScanner to the scanning operations. I.e., a concrete
- /// class named "Something" that implements "ISomething" will be automatically
- /// added to PluginType "ISomething"
- /// </summary>
- void WithDefaultConventions();
-
- /// <summary>
- /// Creates and adds a new ITypeScanner of type T to this scanning operation
- /// </summary>
- /// <typeparam name="T"></typeparam>
- void With<T>() where T : ITypeScanner, new();
-
- #endregion
-
- #region Other options
-
- /// <summary>
- /// Directs the scanning operation to automatically detect and include any Registry
- /// classes found in the Assembly's being scanned
- /// </summary>
- void LookForRegistries();
-
- /// <summary>
- /// Add all concrete types of the Plugin Type as Instances of Plugin Type
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- FindAllTypesFilter AddAllTypesOf<PLUGINTYPE>();
-
- /// <summary>
- /// Add all concrete types of the Plugin Type as Instances of Plugin Type
- /// </summary>
- /// <param name="pluginType"></param>
- FindAllTypesFilter AddAllTypesOf(Type pluginType);
-
- /// <summary>
- /// Makes this scanning operation ignore all [PluginFamily] and [Pluggable] attributes
- /// </summary>
- void IgnoreStructureMapAttributes();
-
- #endregion
-
- #region Filtering types
-
- /// <summary>
- /// Exclude types that match the Predicate from being scanned
- /// </summary>
- /// <param name="exclude"></param>
- void Exclude(Predicate<Type> exclude);
-
- /// <summary>
- /// Exclude all types in this nameSpace or its children from the scanning operation
- /// </summary>
- /// <param name="nameSpace"></param>
- void ExcludeNamespace(string nameSpace);
-
- /// <summary>
- /// Exclude all types in this nameSpace or its children from the scanning operation
- /// </summary>
- /// <typeparam name="T"></typeparam>
- void ExcludeNamespaceContainingType<T>();
-
- /// <summary>
- /// Only include types matching the Predicate in the scanning operation. You can
- /// use multiple Include() calls in a single scanning operation
- /// </summary>
- /// <param name="predicate"></param>
- void Include(Predicate<Type> predicate);
-
- /// <summary>
- /// Only include types from this nameSpace or its children in the scanning operation. You can
- /// use multiple Include() calls in a single scanning operation
- /// </summary>
- /// <param name="nameSpace"></param>
- void IncludeNamespace(string nameSpace);
-
- /// <summary>
- /// Only include types from this nameSpace or its children in the scanning operation. You can
- /// use multiple Include() calls in a single scanning operation
- /// </summary>
- /// <typeparam name="T"></typeparam>
- void IncludeNamespaceContainingType<T>();
-
- /// <summary>
- /// Exclude this specific type from the scanning operation
- /// </summary>
- /// <typeparam name="T"></typeparam>
- void ExcludeType<T>();
-
- // ... Other methods
-
- #endregion
-
- // ... Other methods
-
- /// <summary>
- /// Scans for PluginType's and Concrete Types that close the given open generic type
- /// </summary>
- /// <example>
- ///
- /// </example>
- /// <param name="openGenericType"></param>
- void ConnectImplementationsToTypesClosing(Type openGenericType);
+ public IEnumerable<Type> For(IEnumerable<Assembly> assemblies, CompositeFilter<Type> filter)
+ {
+ return assemblies.SelectMany(x => _types[x].Where(filter.Matches));
+ }
}
+
public class AssemblyScanner : IAssemblyScanner
{
private readonly List<Assembly> _assemblies = new List<Assembly>();
- private readonly List<Predicate<Type>> _excludes = new List<Predicate<Type>>();
+ private readonly CompositeFilter<Type> _filter = new CompositeFilter<Type>();
+
private readonly List<IHeavyweightTypeScanner> _heavyweightScanners = new List<IHeavyweightTypeScanner>();
- private readonly List<Predicate<Type>> _includes = new List<Predicate<Type>>();
+
private readonly List<ITypeScanner> _scanners = new List<ITypeScanner>();
public AssemblyScanner()
@@ -292,9 +142,9 @@
}
- public void Exclude(Predicate<Type> exclude)
+ public void Exclude(Func<Type, bool> exclude)
{
- _excludes.Add(exclude);
+ _filter.Excludes += exclude;
}
public void ExcludeNamespace(string nameSpace)
@@ -307,9 +157,9 @@
ExcludeNamespace(typeof (T).Namespace);
}
- public void Include(Predicate<Type> predicate)
+ public void Include(Func<Type, bool> predicate)
{
- _includes.Add(predicate);
+ _filter.Includes += predicate;
}
public void IncludeNamespace(string nameSpace)
@@ -381,31 +231,17 @@
internal void ScanForAll(PluginGraph pluginGraph)
{
- TypeMapBuilder heavyweightScan = configureHeavyweightScan();
+ //TypeMapBuilder heavyweightScan = configureHeavyweightScan();
- _assemblies.ForEach(assem => scanTypesInAssembly(assem, pluginGraph));
-
- performHeavyweightScan(pluginGraph, heavyweightScan);
- }
-
- private void scanTypesInAssembly(Assembly assembly, PluginGraph graph)
- {
- try
+ pluginGraph.Types.For(_assemblies, _filter).Each(type =>
{
- foreach (Type type in assembly.GetExportedTypes())
- {
- if (!isInTheIncludes(type)) continue;
- if (isInTheExcludes(type)) continue;
+ _scanners.Each(x => x.Process(type, pluginGraph));
+ });
- _scanners.ForEach(scanner => scanner.Process(type, graph));
- }
- }
- catch (Exception ex)
- {
- graph.Log.RegisterError(170, ex, assembly.FullName);
- }
+ //performHeavyweightScan(pluginGraph, heavyweightScan);
}
+
private TypeMapBuilder configureHeavyweightScan()
{
var typeMapBuilder = new TypeMapBuilder();
@@ -416,6 +252,7 @@
return typeMapBuilder;
}
+ [Obsolete]
private void performHeavyweightScan(PluginGraph pluginGraph, TypeMapBuilder typeMapBuilder)
{
IEnumerable<TypeMap> typeMaps = typeMapBuilder.GetTypeMaps();
@@ -423,31 +260,6 @@
typeMapBuilder.Dispose();
}
- private bool isInTheExcludes(Type type)
- {
- if (_excludes.Count == 0) return false;
-
- foreach (var exclude in _excludes)
- {
- if (exclude(type)) return true;
- }
-
- return false;
- }
-
- private bool isInTheIncludes(Type type)
- {
- if (_includes.Count == 0) return true;
-
-
- foreach (var include in _includes)
- {
- if (include(type)) return true;
- }
-
- return false;
- }
-
public bool Contains(string assemblyName)
{
foreach (Assembly assembly in _assemblies)
Added: trunk/Source/StructureMap/Graph/CompositeFilter.cs
===================================================================
--- trunk/Source/StructureMap/Graph/CompositeFilter.cs (rev 0)
+++ trunk/Source/StructureMap/Graph/CompositeFilter.cs 2009-12-26 17:37:30 UTC (rev 297)
@@ -0,0 +1,16 @@
+namespace StructureMap.Graph
+{
+ public class CompositeFilter<T>
+ {
+ private readonly CompositePredicate<T> _excludes = new CompositePredicate<T>();
+ private readonly CompositePredicate<T> _includes = new CompositePredicate<T>();
+
+ public CompositePredicate<T> Includes { get { return _includes; } set { } }
+ public CompositePredicate<T> Excludes { get { return _excludes; } set { } }
+
+ public bool Matches(T target)
+ {
+ return Includes.MatchesAny(target) && Excludes.DoesNotMatcheAny(target);
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap/Graph/CompositePredicate.cs
===================================================================
--- trunk/Source/StructureMap/Graph/CompositePredicate.cs (rev 0)
+++ trunk/Source/StructureMap/Graph/CompositePredicate.cs 2009-12-26 17:37:30 UTC (rev 297)
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace StructureMap.Graph
+{
+ public class CompositePredicate<T>
+ {
+ private readonly List<Func<T, bool>> _list = new List<Func<T, bool>>();
+ private Func<T, bool> _matchesAll = x => true;
+ private Func<T, bool> _matchesAny = x => true;
+ private Func<T, bool> _matchesNone = x => false;
+
+ public void Add(Func<T, bool> filter)
+ {
+ _matchesAll = x => _list.All(predicate => predicate(x));
+ _matchesAny = x => _list.Any(predicate => predicate(x));
+ _matchesNone = x => !MatchesAny(x);
+
+ _list.Add(filter);
+ }
+
+ public static CompositePredicate<T> operator +(CompositePredicate<T> invokes, Func<T, bool> filter)
+ {
+ invokes.Add(filter);
+ return invokes;
+ }
+
+ public bool MatchesAll(T target)
+ {
+ return _matchesAll(target);
+ }
+
+ public bool MatchesAny(T target)
+ {
+ return _matchesAny(target);
+ }
+
+ public bool MatchesNone(T target)
+ {
+ return _matchesNone(target);
+ }
+
+ public bool DoesNotMatcheAny(T target)
+ {
+ return _list.Count == 0 ? true : !MatchesAny(target);
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap/Graph/IAssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/IAssemblyScanner.cs (rev 0)
+++ trunk/Source/StructureMap/Graph/IAssemblyScanner.cs 2009-12-26 17:37:30 UTC (rev 297)
@@ -0,0 +1,184 @@
+using System;
+using System.Reflection;
+
+namespace StructureMap.Graph
+{
+ public interface IAssemblyScanner
+ {
+ #region Designating Assemblies
+
+ /// <summary>
+ /// Add an Assembly to the scanning operation
+ /// </summary>
+ /// <param name="assembly"></param>
+ void Assembly(Assembly assembly);
+
+ /// <summary>
+ /// Add an Assembly by name to the scanning operation
+ /// </summary>
+ /// <param name="assemblyName"></param>
+ void Assembly(string assemblyName);
+
+ /// <summary>
+ /// Add the currently executing Assembly to the scanning operation
+ /// </summary>
+ void TheCallingAssembly();
+
+ /// <summary>
+ /// Add the Assembly that contains type T to the scanning operation
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void AssemblyContainingType<T>();
+
+ /// <summary>
+ /// Add the Assembly that contains type to the scanning operation
+ /// </summary>
+ /// <param name="type"></param>
+ void AssemblyContainingType(Type type);
+
+ /// <summary>
+ /// Sweep the designated path and add any Assembly's found in this folder to the
+ /// scanning operation
+ /// </summary>
+ /// <param name="path"></param>
+ void AssembliesFromPath(string path);
+
+ /// <summary>
+ /// Sweep the designated path and add any Assembly's found in this folder to the
+ /// scanning operation. The assemblyFilter can be used to filter or limit the
+ /// Assembly's that are picked up.
+ /// </summary>
+ /// <param name="path"></param>
+ /// <param name="assemblyFilter"></param>
+ void AssembliesFromPath(string path, Predicate<Assembly> assemblyFilter);
+
+ /// <summary>
+ /// Sweep the application base directory of current app domain and add any Assembly's
+ /// found to the scanning operation.
+ /// </summary>
+ void AssembliesFromApplicationBaseDirectory();
+
+ /// <summary>
+ /// Sweep the application base directory of current app domain and add any Assembly's
+ /// found to the scanning operation. The assemblyFilter can be used to filter or limit the
+ /// Assembly's that are picked up.
+ /// </summary>
+ void AssembliesFromApplicationBaseDirectory(Predicate<Assembly> assemblyFilter);
+
+ #endregion
+
+ #region Adding TypeScanners
+
+ /// <summary>
+ /// Adds an ITypeScanner object to the scanning operation
+ /// </summary>
+ /// <param name="scanner"></param>
+ void With(ITypeScanner scanner);
+
+ void With(IHeavyweightTypeScanner heavyweightScanner);
+
+ /// <summary>
+ /// Adds the DefaultConventionScanner to the scanning operations. I.e., a concrete
+ /// class named "Something" that implements "ISomething" will be automatically
+ /// added to PluginType "ISomething"
+ /// </summary>
+ void WithDefaultConventions();
+
+ /// <summary>
+ /// Creates and adds a new ITypeScanner of type T to this scanning operation
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void With<T>() where T : ITypeScanner, new();
+
+ #endregion
+
+ #region Other options
+
+ /// <summary>
+ /// Directs the scanning operation to automatically detect and include any Registry
+ /// classes found in the Assembly's being scanned
+ /// </summary>
+ void LookForRegistries();
+
+ /// <summary>
+ /// Add all concrete types of the Plugin Type as Instances of Plugin Type
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ FindAllTypesFilter AddAllTypesOf<PLUGINTYPE>();
+
+ /// <summary>
+ /// Add all concrete types of the Plugin Type as Instances of Plugin Type
+ /// </summary>
+ /// <param name="pluginType"></param>
+ FindAllTypesFilter AddAllTypesOf(Type pluginType);
+
+ /// <summary>
+ /// Makes this scanning operation ignore all [PluginFamily] and [Pluggable] attributes
+ /// </summary>
+ void IgnoreStructureMapAttributes();
+
+ #endregion
+
+ #region Filtering types
+
+ /// <summary>
+ /// Exclude types that match the Predicate from being scanned
+ /// </summary>
+ /// <param name="exclude"></param>
+ void Exclude(Func<Type, bool> exclude);
+
+ /// <summary>
+ /// Exclude all types in this nameSpace or its children from the scanning operation
+ /// </summary>
+ /// <param name="nameSpace"></param>
+ void ExcludeNamespace(string nameSpace);
+
+ /// <summary>
+ /// Exclude all types in this nameSpace or its children from the scanning operation
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void ExcludeNamespaceContainingType<T>();
+
+ /// <summary>
+ /// Only include types matching the Predicate in the scanning operation. You can
+ /// use multiple Include() calls in a single scanning operation
+ /// </summary>
+ /// <param name="predicate"></param>
+ void Include(Func<Type, bool> predicate);
+
+ /// <summary>
+ /// Only include types from this nameSpace or its children in the scanning operation. You can
+ /// use multiple Include() calls in a single scanning operation
+ /// </summary>
+ /// <param name="nameSpace"></param>
+ void IncludeNamespace(string nameSpace);
+
+ /// <summary>
+ /// Only include types from this nameSpace or its children in the scanning operation. You can
+ /// use multiple Include() calls in a single scanning operation
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void IncludeNamespaceContainingType<T>();
+
+ /// <summary>
+ /// Exclude this specific type from the scanning operation
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void ExcludeType<T>();
+
+ // ... Other methods
+
+ #endregion
+
+ // ... Other methods
+
+ /// <summary>
+ /// Scans for PluginType's and Concrete Types that close the given open generic type
+ /// </summary>
+ /// <example>
+ ///
+ /// </example>
+ /// <param name="openGenericType"></param>
+ void ConnectImplementationsToTypesClosing(Type openGenericType);
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs 2009-12-26 05:45:56 UTC (rev 296)
+++ trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs 2009-12-26 17:37:30 UTC (rev 297)
@@ -7,6 +7,7 @@
namespace StructureMap.Graph
{
+ [Obsolete]
public interface IHeavyweightTypeScanner
{
void Process(PluginGraph graph, IEnumerable<TypeMap> typeMaps);
Modified: trunk/Source/StructureMap/Graph/PluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginGraph.cs 2009-12-26 05:45:56 UTC (rev 296)
+++ trunk/Source/StructureMap/Graph/PluginGraph.cs 2009-12-26 17:37:30 UTC (rev 297)
@@ -33,6 +33,33 @@
void AddType(Type pluggedType);
}
+
+ public class WeakReference<T>
+ {
+ private readonly Func<T> _builder;
+ private readonly WeakReference _reference;
+
+ public WeakReference(Func<T> builder)
+ {
+ _builder = builder;
+ _reference = new WeakReference(_builder());
+ }
+
+ public T Value
+ {
+ get
+ {
+ if (!_reference.IsAlive)
+ {
+ _reference.Target = _builder();
+ }
+
+ return (T)_reference.Target;
+ }
+ }
+ }
+
+
/// <summary>
/// Models the runtime configuration of a StructureMap Container
/// </summary>
@@ -47,17 +74,21 @@
private readonly List<AssemblyScanner> _scanners = new List<AssemblyScanner>();
private GraphLog _log = new GraphLog();
private bool _sealed;
+ private readonly WeakReference<TypePool> _types;
public PluginGraph()
{
_pluginFamilies = new PluginFamilyCollection(this);
+ _types = new WeakReference<TypePool>(() => new TypePool(this));
}
- public PluginGraph(AssemblyScanner assemblies)
+ public TypePool Types
{
- _pluginFamilies = new PluginFamilyCollection(this);
- _scanners.Add(assemblies);
+ get
+ {
+ return _types.Value;
+ }
}
public List<Registry> Registries { get { return _registries; } }
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-12-26 05:45:56 UTC (rev 296)
+++ trunk/Source/StructureMap/StructureMap.csproj 2009-12-26 17:37:30 UTC (rev 297)
@@ -356,9 +356,12 @@
<Compile Include="ErrorMessages.cs" />
<Compile Include="Example.cs" />
<Compile Include="Extensions.cs" />
+ <Compile Include="Graph\CompositeFilter.cs" />
+ <Compile Include="Graph\CompositePredicate.cs" />
<Compile Include="Graph\FamilyAttributeScanner.cs" />
<Compile Include="Graph\FindAllTypesFilter.cs" />
<Compile Include="Graph\FindRegistriesScanner.cs" />
+ <Compile Include="Graph\IAssemblyScanner.cs" />
<Compile Include="Graph\IHeavyweightTypeScanner.cs" />
<Compile Include="Graph\ITypeScanner.cs" />
<Compile Include="Graph\PluggableAttributeScanner.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 05:46:06
|
Revision: 296
http://structuremap.svn.sourceforge.net/structuremap/?rev=296&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:45:56 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
Big R# code cleanup after the big re-architecture
Modified Paths:
--------------
trunk/Source/StructureMap/Attributes/PluggableAttribute.cs
trunk/Source/StructureMap/Attributes/PluginFamilyAttribute.cs
trunk/Source/StructureMap/BuildSession.cs
trunk/Source/StructureMap/CloseGenericTypeExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/Configuration/DSL/SetterConvention.cs
trunk/Source/StructureMap/Configuration/GraphBuilder.cs
trunk/Source/StructureMap/Configuration/XmlConstants.cs
trunk/Source/StructureMap/ConfigurationExpression.cs
trunk/Source/StructureMap/Construction/InstanceBuilder.cs
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Diagnostics/Doctor.cs
trunk/Source/StructureMap/Diagnostics/GraphLog.cs
trunk/Source/StructureMap/Diagnostics/InstanceToken.cs
trunk/Source/StructureMap/Exceptions/StructureMapException.cs
trunk/Source/StructureMap/ExplicitArgsExpression.cs
trunk/Source/StructureMap/Extensions.cs
trunk/Source/StructureMap/Graph/AssemblyScanner.cs
trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs
trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs
trunk/Source/StructureMap/Graph/IPluginFamily.cs
trunk/Source/StructureMap/Graph/Plugin.cs
trunk/Source/StructureMap/Graph/PluginCache.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/Graph/PluginGraph.cs
trunk/Source/StructureMap/Graph/SetterProperty.cs
trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs
trunk/Source/StructureMap/Graph/SingleImplementationScanner.cs
trunk/Source/StructureMap/Graph/TypePath.cs
trunk/Source/StructureMap/IContainer.cs
trunk/Source/StructureMap/IContext.cs
trunk/Source/StructureMap/IInstanceFactory.cs
trunk/Source/StructureMap/InitializationExpression.cs
trunk/Source/StructureMap/InstanceCache.cs
trunk/Source/StructureMap/InstanceFactory.cs
trunk/Source/StructureMap/InstanceMemento.cs
trunk/Source/StructureMap/Interceptors/FilteredInstanceInterceptor.cs
trunk/Source/StructureMap/MementoSource.cs
trunk/Source/StructureMap/MemoryInstanceMemento.cs
trunk/Source/StructureMap/Model.cs
trunk/Source/StructureMap/ObjectFactory.cs
trunk/Source/StructureMap/Pipeline/BuildFrame.cs
trunk/Source/StructureMap/Pipeline/BuildStack.cs
trunk/Source/StructureMap/Pipeline/ConditionalInstance.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs
trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
trunk/Source/StructureMap/Pipeline/DefaultInstance.cs
trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs
trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs
trunk/Source/StructureMap/Pipeline/IEnumerableCoercion.cs
trunk/Source/StructureMap/Pipeline/IObjectCache.cs
trunk/Source/StructureMap/Pipeline/Instance.cs
trunk/Source/StructureMap/Pipeline/LambdaInstance.cs
trunk/Source/StructureMap/Pipeline/NulloObjectCache.cs
trunk/Source/StructureMap/Pipeline/ObjectBuilder.cs
trunk/Source/StructureMap/Pipeline/ObjectInstance.cs
trunk/Source/StructureMap/Pipeline/Profile.cs
trunk/Source/StructureMap/Pipeline/ProfileManager.cs
trunk/Source/StructureMap/Pipeline/PropertyExpression.cs
trunk/Source/StructureMap/Pipeline/PrototypeInstance.cs
trunk/Source/StructureMap/Pipeline/ReferencedInstance.cs
trunk/Source/StructureMap/Pipeline/SerializedInstance.cs
trunk/Source/StructureMap/Pipeline/SmartInstance.cs
trunk/Source/StructureMap/Pipeline/ThreadLocalStorageLifecycle.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/Properties/AssemblyInfo.cs
trunk/Source/StructureMap/ReflectionHelper.cs
trunk/Source/StructureMap/Source/DirectoryXmlMementoSource.cs
trunk/Source/StructureMap/Source/SingleEmbeddedXmlMementoSource.cs
trunk/Source/StructureMap/Source/TemplatedMementoSource.cs
trunk/Source/StructureMap/Source/XmlAttributeInstanceMemento.cs
trunk/Source/StructureMap/Source/XmlFileMementoSource.cs
trunk/Source/StructureMap/Source/XmlMementoSource.cs
trunk/Source/StructureMap/Source/XmlNodeInstanceMemento.cs
trunk/Source/StructureMap/Source/XmlTemplater.cs
trunk/Source/StructureMap/StructureMapConfiguration.cs
trunk/Source/StructureMap/SystemRegistry.cs
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap/Util/Cache.cs
trunk/Source/StructureMap.AutoMocking/AutoMockedContainer.cs
trunk/Source/StructureMap.AutoMocking/AutoMocker.cs
trunk/Source/StructureMap.AutoMocking/MoqFactory.cs
trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs
trunk/Source/StructureMap.AutoMocking/RhinoMockRepositoryProxy.cs
trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs
trunk/Source/StructureMap.DebuggerVisualizers/ContainerDetail.cs
trunk/Source/StructureMap.DebuggerVisualizers/ContainerForm.cs
trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizer.cs
trunk/Source/StructureMap.DebuggerVisualizers/ContainerVisualizerObjectSource.cs
trunk/Source/StructureMap.DebuggerVisualizers/DisplayHelper.cs
trunk/Source/StructureMap.DebuggerVisualizers/Properties/AssemblyInfo.cs
trunk/Source/StructureMap.DebuggerVisualizers.Testing/Program.cs
trunk/Source/StructureMap.DebuggerVisualizers.Testing/Properties/AssemblyInfo.cs
trunk/Source/StructureMap.DebuggerVisualizers.Testing/SampleTypes.cs
trunk/Source/StructureMap.DebuggerVisualizers.Testing/VisualizerTests.cs
trunk/Source/StructureMap.DeploymentTasks/AddAssembly.cs
trunk/Source/StructureMap.DeploymentTasks/SetOverrideTask.cs
trunk/Source/StructureMap.DeploymentTasks/SubstitutionTask.cs
trunk/Source/StructureMap.DeploymentTasks/Versioning/CheckVersionTask.cs
trunk/Source/StructureMap.DeploymentTasks/Versioning/DeployedDirectory.cs
trunk/Source/StructureMap.DeploymentTasks/Versioning/DeployedFile.cs
trunk/Source/StructureMap.DeploymentTasks/Versioning/DotNetAssembly.cs
trunk/Source/StructureMap.DeploymentTasks/Versioning/GenerateVersionReport.cs
trunk/Source/StructureMap.Testing/AutoMocking/MoqAutoMockerTester.cs
trunk/Source/StructureMap.Testing/AutoWiringExamples.cs
trunk/Source/StructureMap.Testing/Bugs/BuildUpBug.cs
trunk/Source/StructureMap.Testing/Bugs/IDictionaryAndXmlBugTester.cs
trunk/Source/StructureMap.Testing/Bugs/SingletonShouldBeLazy.cs
trunk/Source/StructureMap.Testing/Bugs/SpecifyScopeInConfigureTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs
trunk/Source/StructureMap.Testing/Configuration/DictionaryAndArrayArgumentTester.cs
trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs
trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs
trunk/Source/StructureMap.Testing/Examples/BuildUp.cs
trunk/Source/StructureMap.Testing/Examples/Interception.cs
trunk/Source/StructureMap.Testing/Examples/RegisteringWithTheAPI.cs
trunk/Source/StructureMap.Testing/Examples.cs
trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs
trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs
trunk/Source/StructureMap.Testing/Graph/ArrayConstructorTester.cs
trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs
trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs
trunk/Source/StructureMap.Testing/Graph/ConventionBasedSetterInjectionTester.cs
trunk/Source/StructureMap.Testing/Graph/DefaultConventionScanningTester.cs
trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs
trunk/Source/StructureMap.Testing/Graph/FillDependenciesTester.cs
trunk/Source/StructureMap.Testing/Graph/FullStackFacadeTester.cs
trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
trunk/Source/StructureMap.Testing/Graph/InstanceFactoryTester.cs
trunk/Source/StructureMap.Testing/Graph/InstanceTarget.cs
trunk/Source/StructureMap.Testing/Graph/Interceptors/CompoundInterceptorTester.cs
trunk/Source/StructureMap.Testing/Graph/Interceptors/TypeInterceptionTester.cs
trunk/Source/StructureMap.Testing/Graph/ParameterInfoCollection.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginTester.cs
trunk/Source/StructureMap.Testing/Graph/SetterInjectionEmittingTester.cs
trunk/Source/StructureMap.Testing/Graph/SingleImplementationScannerTester.cs
trunk/Source/StructureMap.Testing/Graph/Source/XmlMementoSourceTester.cs
trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs
trunk/Source/StructureMap.Testing/Graph/TypeFindingTester.cs
trunk/Source/StructureMap.Testing/Graph/TypePathTester.cs
trunk/Source/StructureMap.Testing/InstanceCacheTester.cs
trunk/Source/StructureMap.Testing/InstanceMementoInstanceCreationTester.cs
trunk/Source/StructureMap.Testing/MementoTester.cs
trunk/Source/StructureMap.Testing/ModelQueryTester.cs
trunk/Source/StructureMap.Testing/ObjectFactoryInitializeTester.cs
trunk/Source/StructureMap.Testing/ObjectFactoryTester.cs
trunk/Source/StructureMap.Testing/PerRequestInterceptorTester.cs
trunk/Source/StructureMap.Testing/Pipeline/BuildStackTester.cs
trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ConditionalInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ConstructorInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ContainerDisposalTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ContainerIsInTheContainerTester.cs
trunk/Source/StructureMap.Testing/Pipeline/DefaultInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/EnumerableInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/GenericsHelperExpressionTester.cs
trunk/Source/StructureMap.Testing/Pipeline/HybridBuildLifecycleTester.cs
trunk/Source/StructureMap.Testing/Pipeline/MissingInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ObjectBuilderTester.cs
trunk/Source/StructureMap.Testing/Pipeline/OptionalSetterInjectionTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileManagerTester.cs
trunk/Source/StructureMap.Testing/Pipeline/PrototypeInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/RedirectTester.cs
trunk/Source/StructureMap.Testing/Pipeline/RedirectingTester.cs
trunk/Source/StructureMap.Testing/Pipeline/SmartInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/StubBuildSession.cs
trunk/Source/StructureMap.Testing/Pipeline/ThreadLocalStorageLifecycleTester.cs
trunk/Source/StructureMap.Testing/PrimitiveArrayTester.cs
trunk/Source/StructureMap.Testing/ReadingRegistriesFromXmlTester.cs
trunk/Source/StructureMap.Testing/SpecificationExtensions.cs
trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs
trunk/Source/StructureMap.Testing/TestData/DataMother.cs
trunk/Source/StructureMap.Testing/TypeExtensionsTester.cs
trunk/Source/StructureMap.Testing/Util/CacheTester.cs
trunk/Source/StructureMap.Testing/XmlWriting/ElementChecker.cs
trunk/Source/StructureMap.Testing.GenericWidgets/Widgets.cs
trunk/Source/StructureMap.Testing.Widget/ArrayConstruction.cs
trunk/Source/StructureMap.Testing.Widget/Columns.cs
trunk/Source/StructureMap.Testing.Widget/Hierarchy.cs
trunk/Source/StructureMap.Testing.Widget/IWidget.cs
trunk/Source/StructureMap.Testing.Widget/Rule.cs
trunk/Source/StructureMap.Testing.Widget/WidgetMaker.cs
trunk/Source/StructureMap.Testing.Widget3/Gateways.cs
trunk/Source/StructureMap.Testing.Widget3/IService.cs
trunk/Source/StructureMap.Testing.Widget5/AutoFilledGridColumn.cs
trunk/Source/StructureMap.Testing.Widget5/BasicGridColumn.cs
trunk/Source/StructureMap.Testing.Widget5/CannotBeAutoFilledGridColumn.cs
trunk/Source/StructureMap.Testing.Widget5/OtherGridColumn.cs
trunk/Source/StructureMapDoctor/Program.cs
trunk/Source/TableOfContentsBuilder/Program.cs
trunk/Source/TableOfContentsBuilder/Properties/AssemblyInfo.cs
Modified: trunk/Source/StructureMap/Attributes/PluggableAttribute.cs
===================================================================
--- trunk/Source/StructureMap/Attributes/PluggableAttribute.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Attributes/PluggableAttribute.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -26,7 +26,7 @@
/// <returns></returns>
public static bool MarkedAsPluggable(Type objectType)
{
- PluggableAttribute att = GetCustomAttribute(objectType, typeof (PluggableAttribute), false) as PluggableAttribute;
+ var att = GetCustomAttribute(objectType, typeof (PluggableAttribute), false) as PluggableAttribute;
return (att != null);
}
}
Modified: trunk/Source/StructureMap/Attributes/PluginFamilyAttribute.cs
===================================================================
--- trunk/Source/StructureMap/Attributes/PluginFamilyAttribute.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Attributes/PluginFamilyAttribute.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -26,11 +26,7 @@
/// If set, determines the shared "scope" of the instance -- PerRequest, Singleton, ThreadLocal,
/// HttpContext, etc.
/// </summary>
- public InstanceScope Scope
- {
- get { return _scope; }
- set { _scope = value; }
- }
+ public InstanceScope Scope { get { return _scope; } set { _scope = value; } }
public Type SourceType { get; set; }
@@ -38,20 +34,13 @@
/// InstanceKey of the default instance. Used to implicitly define the default without
/// declaring the instance in StructureMap.config
/// </summary>
- public string DefaultKey
- {
- get { return _default; }
- }
+ public string DefaultKey { get { return _default; } }
/// <summary>
/// Declares the target to be built by StructureMap as a Singleton. One object instance will
/// be created for each named instance
/// </summary>
- public bool IsSingleton
- {
- get { return _scope == InstanceScope.Singleton; }
- set { _scope = value ? InstanceScope.Singleton : InstanceScope.PerRequest; }
- }
+ public bool IsSingleton { get { return _scope == InstanceScope.Singleton; } set { _scope = value ? InstanceScope.Singleton : InstanceScope.PerRequest; } }
/// <summary>
Modified: trunk/Source/StructureMap/BuildSession.cs
===================================================================
--- trunk/Source/StructureMap/BuildSession.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/BuildSession.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -1,21 +1,20 @@
using System;
-using System.Collections;
using System.Collections.Generic;
+using System.Linq;
using StructureMap.Graph;
using StructureMap.Interceptors;
using StructureMap.Pipeline;
using StructureMap.Util;
-using System.Linq;
namespace StructureMap
{
public class BuildSession : IContext
{
- protected BuildStack _buildStack = new BuildStack();
+ private readonly ObjectBuilder _builder;
private readonly InstanceCache _cache = new InstanceCache();
private readonly Cache<Type, Func<object>> _defaults;
private readonly PipelineGraph _pipelineGraph;
- private readonly ObjectBuilder _builder;
+ protected BuildStack _buildStack = new BuildStack();
public BuildSession(PipelineGraph pipelineGraph, InterceptorLibrary interceptorLibrary, IObjectCache cache)
{
@@ -45,28 +44,13 @@
{
}
- protected void clearBuildStack()
- {
- _buildStack = new BuildStack();
- }
+ protected PipelineGraph pipelineGraph { get { return _pipelineGraph; } }
- protected PipelineGraph pipelineGraph
- {
- get { return _pipelineGraph; }
- }
-
#region IContext Members
- public string RequestedName
- {
- get;
- set;
- }
+ public string RequestedName { get; set; }
- public BuildStack BuildStack
- {
- get { return _buildStack; }
- }
+ public BuildStack BuildStack { get { return _buildStack; } }
public Type ParentType
{
@@ -87,10 +71,7 @@
return (T) CreateInstance(typeof (T), name);
}
- BuildFrame IContext.Root
- {
- get { return _buildStack.Root; }
- }
+ BuildFrame IContext.Root { get { return _buildStack.Root; } }
public virtual void RegisterDefault(Type pluginType, object defaultObject)
{
@@ -122,9 +103,17 @@
return list;
}
+ #endregion
+ public IEnumerable<T> GetAllInstances<T>()
+ {
+ return forType(typeof (T)).AllInstances.Select(x => GetInstance<T>());
+ }
- #endregion
+ protected void clearBuildStack()
+ {
+ _buildStack = new BuildStack();
+ }
public virtual object CreateInstance(Type pluginType, string name)
{
@@ -147,7 +136,7 @@
result = _builder.Resolve(pluginType, instance, this);
// TODO: HACK ATTACK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- var isUnique = forType(pluginType).Lifecycle is UniquePerRequestLifecycle;
+ bool isUnique = forType(pluginType).Lifecycle is UniquePerRequestLifecycle;
if (!isUnique)
{
_cache.Set(pluginType, instance, result);
@@ -176,11 +165,6 @@
return array;
}
- public IEnumerable<T> GetAllInstances<T>()
- {
- return forType(typeof (T)).AllInstances.Select(x => GetInstance<T>());
- }
-
public IEnumerable<object> GetAllInstances(Type pluginType)
{
return forType(pluginType).AllInstances.Select(x => CreateInstance(pluginType, x));
Modified: trunk/Source/StructureMap/CloseGenericTypeExpression.cs
===================================================================
--- trunk/Source/StructureMap/CloseGenericTypeExpression.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/CloseGenericTypeExpression.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -15,10 +15,11 @@
IList<T> As<T>();
}
- public class CloseGenericTypeExpression : OpenGenericTypeSpecificationExpression, OpenGenericTypeListSpecificationExpression
+ public class CloseGenericTypeExpression : OpenGenericTypeSpecificationExpression,
+ OpenGenericTypeListSpecificationExpression
{
+ private readonly IContainer _container;
private readonly object _subject;
- private readonly IContainer _container;
private Type _pluginType;
public CloseGenericTypeExpression(object subject, IContainer container)
@@ -27,7 +28,29 @@
_container = container;
}
+ IList<T> OpenGenericTypeListSpecificationExpression.As<T>()
+ {
+ IList list = _container.With(_subject.GetType(), _subject).GetAllInstances(_pluginType);
+ var returnValue = new List<T>();
+ foreach (object o in list)
+ {
+ returnValue.Add((T) o);
+ }
+
+ return returnValue;
+ }
+
/// <summary>
+ /// specify what type you'd like the service returned as
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ T OpenGenericTypeSpecificationExpression.As<T>()
+ {
+ return (T) _container.With(_subject.GetType(), _subject).GetInstance(_pluginType);
+ }
+
+ /// <summary>
/// Specify the open generic type that should have a single generic parameter
/// </summary>
/// <param name="type"></param>
@@ -48,32 +71,10 @@
_pluginType = type.MakeGenericType(_subject.GetType());
}
- /// <summary>
- /// specify what type you'd like the service returned as
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- T OpenGenericTypeSpecificationExpression.As<T>()
- {
- return (T) _container.With(_subject.GetType(), _subject).GetInstance(_pluginType);
- }
-
public OpenGenericTypeListSpecificationExpression GetAllClosedTypesOf(Type type)
{
closeType(type);
return this;
}
-
- IList<T> OpenGenericTypeListSpecificationExpression.As<T>()
- {
- IList list = _container.With(_subject.GetType(), _subject).GetAllInstances(_pluginType);
- var returnValue = new List<T>();
- foreach (var o in list)
- {
- returnValue.Add((T) o);
- }
-
- return returnValue;
- }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -33,18 +33,9 @@
/// <summary>
/// Define the Default Instance for this PluginType
/// </summary>
- public IsExpression<PLUGINTYPE> TheDefault
- {
- get { return new InstanceExpression<PLUGINTYPE>(i => registerDefault(i)); }
- }
+ public IsExpression<PLUGINTYPE> TheDefault { get { return new InstanceExpression<PLUGINTYPE>(i => registerDefault(i)); } }
- public InstanceExpression<PLUGINTYPE> MissingNamedInstanceIs
- {
- get
- {
- return new InstanceExpression<PLUGINTYPE>(i => _alterations.Add(family => family.MissingInstance = i));
- }
- }
+ public InstanceExpression<PLUGINTYPE> MissingNamedInstanceIs { get { return new InstanceExpression<PLUGINTYPE>(i => _alterations.Add(family => family.MissingInstance = i)); } }
/// <summary>
/// Add multiple Instance's to this PluginType
@@ -93,7 +84,7 @@
{
throw new StructureMapException(231);
}
-
+
return alterAndContinue(family =>
{
ConfiguredInstance instance =
@@ -113,9 +104,9 @@
// This is *my* team's naming convention for generic parameters
// I know you may not like it, but it's my article so there
var instance = new SmartInstance<CONCRETETYPE>();
-
+
registerDefault(instance);
-
+
return instance;
}
@@ -223,7 +214,8 @@
_children.Add(
graph =>
{
- var typeInterceptor = new PluginTypeInterceptor(typeof(PLUGINTYPE), (c, o) => interceptor.Process(o, c));
+ var typeInterceptor = new PluginTypeInterceptor(typeof (PLUGINTYPE),
+ (c, o) => interceptor.Process(o, c));
graph.InterceptorLibrary.AddInterceptor(typeInterceptor);
});
@@ -243,11 +235,11 @@
{
Func<IContext, object, object> function = (c, o) =>
{
- handler(c, (PLUGINTYPE)o);
+ handler(c, (PLUGINTYPE) o);
return o;
};
- var interceptor = new PluginTypeInterceptor(typeof(PLUGINTYPE), function);
+ var interceptor = new PluginTypeInterceptor(typeof (PLUGINTYPE), function);
graph.InterceptorLibrary.AddInterceptor(interceptor);
});
@@ -290,7 +282,8 @@
_children.Add(
graph =>
{
- var interceptor = new PluginTypeInterceptor(typeof(PLUGINTYPE), (c, o) => handler(c, (PLUGINTYPE)o));
+ var interceptor = new PluginTypeInterceptor(typeof (PLUGINTYPE),
+ (c, o) => handler(c, (PLUGINTYPE) o));
graph.InterceptorLibrary.AddInterceptor(interceptor);
});
@@ -306,7 +299,7 @@
/// <returns></returns>
public CreatePluginFamilyExpression<PLUGINTYPE> AddConcreteType<PLUGGEDTYPE>()
{
- if (!PluginCache.GetPlugin(typeof(PLUGGEDTYPE)).CanBeAutoFilled)
+ if (!PluginCache.GetPlugin(typeof (PLUGGEDTYPE)).CanBeAutoFilled)
{
throw new StructureMapException(231);
}
@@ -363,7 +356,7 @@
/// <returns></returns>
public CreatePluginFamilyExpression<PLUGINTYPE> AlwaysUnique()
{
- return this.LifecycleIs(new UniquePerRequestLifecycle());
+ return 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-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -80,7 +80,7 @@
return instance;
}
-
+
/// <summary>
/// Shortcut method to add an additional Instance to this Plugin Type
/// as just a Concrete Type. This will only work if the Concrete Type
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -166,7 +166,7 @@
/// <param name="template"></param>
/// <returns></returns>
SerializedInstance SerializedCopyOf(T template);
-
+
/// <summary>
/// Creates an Instance that will load an ASCX user control from the url
/// </summary>
@@ -183,7 +183,7 @@
ConditionalInstance<T> Conditional(Action<ConditionalInstance<T>.ConditionalInstanceExpression> configuration);
}
- public class InstanceExpression<T> : IInstanceExpression<T>, ThenItExpression<T>
+ public class InstanceExpression<T> : IInstanceExpression<T>, ThenItExpression<T>
{
private readonly Action<Instance> _action;
@@ -194,10 +194,7 @@
#region IsExpression<T> Members
- IInstanceExpression<T> IsExpression<T>.Is
- {
- get { return this; }
- }
+ IInstanceExpression<T> IsExpression<T>.Is { get { return this; } }
public void IsThis(Instance instance)
{
@@ -216,12 +213,6 @@
_action(instance);
}
- private INSTANCE returnInstance<INSTANCE>(INSTANCE instance) where INSTANCE : Instance
- {
- Instance(instance);
- return instance;
- }
-
public SmartInstance<PLUGGEDTYPE> OfConcreteType<PLUGGEDTYPE>() where PLUGGEDTYPE : T
{
return returnInstance(new SmartInstance<PLUGGEDTYPE>());
@@ -272,15 +263,19 @@
return returnInstance(new UserControlInstance(url));
}
- public ConditionalInstance<T> Conditional(Action<ConditionalInstance<T>.ConditionalInstanceExpression> configuration)
+ public ConditionalInstance<T> Conditional(
+ Action<ConditionalInstance<T>.ConditionalInstanceExpression> configuration)
{
return returnInstance(new ConditionalInstance<T>(configuration));
}
- IsExpression<T> ThenItExpression<T>.ThenIt
+ IsExpression<T> ThenItExpression<T>.ThenIt { get { return this; } }
+
+ private INSTANCE returnInstance<INSTANCE>(INSTANCE instance) where INSTANCE : Instance
{
- get { return this; }
+ Instance(instance);
+ return instance;
}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -3,8 +3,6 @@
namespace StructureMap.Configuration.DSL.Expressions
{
-
-
/// <summary>
/// Expression class to help define a runtime Profile
/// </summary>
@@ -39,13 +37,9 @@
/// <returns></returns>
public IsExpression<T> Type<T>()
{
- return new InstanceExpression<T>(instance =>
- {
- _registry.addExpression(graph =>
- {
- graph.SetDefault(_profileName, typeof(T), instance);
- });
- });
+ return
+ new InstanceExpression<T>(
+ instance => { _registry.addExpression(graph => { graph.SetDefault(_profileName, typeof (T), instance); }); });
}
/// <summary>
@@ -117,7 +111,6 @@
#region Nested type: InstanceDefaultExpression
-
/// <summary>
/// Expression Builder within defining a Profile
/// </summary>
@@ -194,7 +187,6 @@
var instance = new ConfiguredInstance(typeof (CONCRETETYPE));
return Use(instance);
}
-
}
#endregion
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -8,8 +8,6 @@
namespace StructureMap.Configuration.DSL
{
-
-
/// <summary>
/// A Registry class provides methods and grammars for configuring a Container or ObjectFactory.
/// Using a Registry subclass is the recommended way of configuring a StructureMap Container.
@@ -203,7 +201,7 @@
internal static bool IsPublicRegistry(Type type)
{
- if (type.Assembly == typeof(Registry).Assembly)
+ if (type.Assembly == typeof (Registry).Assembly)
{
return false;
}
@@ -295,30 +293,7 @@
return ForRequestedType<PLUGINTYPE>();
}
- #region Nested type: BuildWithExpression
-
/// <summary>
- /// Define the constructor and setter arguments for the default T
- /// </summary>
- /// <typeparam name="T"></typeparam>
- public class BuildWithExpression<T>
- {
- private readonly SmartInstance<T> _instance;
-
- public BuildWithExpression(SmartInstance<T> instance)
- {
- _instance = instance;
- }
-
- public SmartInstance<T> Configure
- {
- get { return _instance; }
- }
- }
-
- #endregion
-
- /// <summary>
/// Creates automatic "policies" for which public setters are considered mandatory
/// properties by StructureMap that will be "setter injected" as part of the
/// construction process.
@@ -337,7 +312,7 @@
/// <param name="expression"></param>
public void SelectConstructor<T>(Expression<Func<T>> expression)
{
- PluginCache.GetPlugin(typeof(T)).UseConstructor(expression);
+ PluginCache.GetPlugin(typeof (T)).UseConstructor(expression);
}
public void Forward<FROM, TO>() where FROM : class where TO : class
@@ -401,10 +376,32 @@
{
var raw = c.GetInstance<U>();
var t = raw as T;
- if (t == null) throw new ApplicationException(raw.GetType().AssemblyQualifiedName + " could not be cast to " + typeof(T).AssemblyQualifiedName);
+ if (t == null)
+ throw new ApplicationException(raw.GetType().AssemblyQualifiedName + " could not be cast to " +
+ typeof (T).AssemblyQualifiedName);
return t;
- });
+ });
}
+
+ #region Nested type: BuildWithExpression
+
+ /// <summary>
+ /// Define the constructor and setter arguments for the default T
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ public class BuildWithExpression<T>
+ {
+ private readonly SmartInstance<T> _instance;
+
+ public BuildWithExpression(SmartInstance<T> instance)
+ {
+ _instance = instance;
+ }
+
+ public SmartInstance<T> Configure { get { return _instance; } }
+ }
+
+ #endregion
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/DSL/SetterConvention.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/SetterConvention.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Configuration/DSL/SetterConvention.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -1,7 +1,6 @@
using System;
using System.Reflection;
using StructureMap.Graph;
-using StructureMap;
using StructureMap.TypeRules;
namespace StructureMap.Configuration.DSL
@@ -20,7 +19,7 @@
{
Matching(prop => prop.PropertyType == typeof (T));
}
-
+
/// <summary>
/// Directs StructureMap to tread all public setters with
/// a PropertyType that matches the predicate as a
@@ -59,7 +58,7 @@
/// <typeparam name="T"></typeparam>
public void WithAnyTypeFromNamespaceContainingType<T>()
{
- WithAnyTypeFromNamespace(typeof(T).Namespace);
+ WithAnyTypeFromNamespace(typeof (T).Namespace);
}
/// <summary>
Modified: trunk/Source/StructureMap/Configuration/GraphBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/GraphBuilder.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Configuration/GraphBuilder.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -14,7 +14,8 @@
private readonly PluginGraph _systemGraph;
- public GraphBuilder(Registry[] registries) : this(registries, new PluginGraph())
+ public GraphBuilder(Registry[] registries)
+ : this(registries, new PluginGraph())
{
}
@@ -40,10 +41,7 @@
_pluginGraph.Seal();
}
- public PluginGraph PluginGraph
- {
- get { return _pluginGraph; }
- }
+ public PluginGraph PluginGraph { get { return _pluginGraph; } }
public void AddAssembly(string assemblyName)
{
@@ -60,10 +58,10 @@
public void AddRegistry(string registryTypeName)
{
- _pluginGraph.Log.Try(()=>
+ _pluginGraph.Log.Try(() =>
{
- var type = new TypePath(registryTypeName).FindType();
- Registry registry = (Registry) Activator.CreateInstance(type);
+ Type type = new TypePath(registryTypeName).FindType();
+ var registry = (Registry) Activator.CreateInstance(type);
registry.ConfigurePluginGraph(_pluginGraph);
}).AndReportErrorAs(290, registryTypeName);
}
Modified: trunk/Source/StructureMap/Configuration/XmlConstants.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/XmlConstants.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Configuration/XmlConstants.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -29,9 +29,9 @@
public const string PLUGIN_NODE = "Plugin";
public const string PLUGIN_TYPE = "PluginType";
public const string PROFILE_NODE = "Profile";
+ public const string REGISTRY = "Registry";
public const string SCOPE = "Scope";
public const string STRUCTUREMAP = "StructureMap";
public const string TYPE_ATTRIBUTE = "Type";
- public const string REGISTRY = "Registry";
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/ConfigurationExpression.cs
===================================================================
--- trunk/Source/StructureMap/ConfigurationExpression.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/ConfigurationExpression.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -1,6 +1,4 @@
-using System;
using System.Collections.Generic;
-using System.Linq.Expressions;
using System.Xml;
using StructureMap.Configuration;
using StructureMap.Configuration.DSL;
@@ -33,10 +31,7 @@
/// If true, directs StructureMap to look for configuration in the App.config.
/// The default value is false.
/// </summary>
- public bool IncludeConfigurationFromConfigFile
- {
- set { _parserBuilder.UseAndEnforceExistenceOfDefaultFile = value; }
- }
+ public bool IncludeConfigurationFromConfigFile { set { _parserBuilder.UseAndEnforceExistenceOfDefaultFile = value; } }
/// <summary>
/// Creates and adds a Registry object of type T.
@@ -85,11 +80,5 @@
return builder.Build();
}
-
-
}
-
-
-
-
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Construction/InstanceBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Construction/InstanceBuilder.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Construction/InstanceBuilder.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -1,5 +1,4 @@
using System;
-using StructureMap.Pipeline;
namespace StructureMap.Construction
{
@@ -16,22 +15,19 @@
/// </summary>
public class InstanceBuilder : IInstanceBuilder
{
- private readonly Type _pluggedType;
- private readonly Func<IArguments, object> _constructor;
private readonly Action<IArguments, object> _buildUp;
+ private readonly Func<IArguments, object> _constructor;
+ private readonly Type _pluggedType;
- public InstanceBuilder(Type pluggedType, Func<IArguments, object> constructor, Action<IArguments, object> buildUp)
+ public InstanceBuilder(Type pluggedType, Func<IArguments, object> constructor,
+ Action<IArguments, object> buildUp)
{
_pluggedType = pluggedType;
_constructor = constructor;
_buildUp = buildUp;
}
- public Type PluggedType { get
- {
- return _pluggedType;
- }
- }
+ public Type PluggedType { get { return _pluggedType; } }
public virtual object BuildInstance(IArguments args)
{
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Container.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -145,7 +145,6 @@
}
-
/// <summary>
/// Creates or finds the default instance of type T
/// </summary>
@@ -163,7 +162,6 @@
}
-
/// <summary>
/// Creates or resolves all registered instances of type T
/// </summary>
@@ -302,7 +300,6 @@
}
-
/// <summary>
/// Creates or resolves all registered instances of the pluginType
/// </summary>
@@ -475,6 +472,55 @@
#endregion
+ /// <summary>
+ /// Injects the given object into a Container by name for the designated
+ /// pluginType. Mostly used for temporarily setting up return values of the Container
+ /// to introduce mocks or stubs during automated testing scenarios
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="name"></param>
+ /// <param name="object"></param>
+ public void Inject<T>(string name, T @object)
+ {
+ ObjectInstance instance = new ObjectInstance(@object).WithName(name);
+ _transientCache.Set(typeof (T), instance, @object);
+ _pipelineGraph.AddInstance<T>(instance);
+ }
+
+ /// <summary>
+ /// Injects the given object into a Container as the default for the designated
+ /// pluginType. Mostly used for temporarily setting up return values of the Container
+ /// to introduce mocks or stubs during automated testing scenarios
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="object"></param>
+ public void Inject(Type pluginType, object @object)
+ {
+ if (!@object.GetType().CanBeCastTo(pluginType))
+ {
+ throw new StructureMapException(220, pluginType.FullName,
+ @object.GetType().FullName);
+ }
+
+
+ var instance = new ObjectInstance(@object);
+ _transientCache.Set(pluginType, instance, @object);
+ _pipelineGraph.SetDefault(pluginType, instance);
+ }
+
+ /// <summary>
+ /// Injects the given object into a Container as the default for the designated
+ /// PLUGINTYPE. Mostly used for temporarily setting up return values of the Container
+ /// to introduce mocks or stubs during automated testing scenarios
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <param name="object"></param>
+ public void Inject<PLUGINTYPE>(PLUGINTYPE @object)
+ {
+ Instance instance = _pipelineGraph.Inject(@object);
+ _transientCache.Set(typeof (PLUGINTYPE), instance, @object);
+ }
+
private object buildInstanceWithArgs(Type pluginType, Instance defaultInstance, ExplicitArguments args,
string requestedName)
{
@@ -534,7 +580,6 @@
}
-
private BuildSession withNewSession(string name)
{
return new BuildSession(_pipelineGraph, _interceptorLibrary, _transientCache)
@@ -543,6 +588,16 @@
};
}
+ /// <summary>
+ /// Sets the default instance for the PluginType
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="instance"></param>
+ public void Inject(Type pluginType, Instance instance)
+ {
+ _pipelineGraph.SetDefault(pluginType, instance);
+ }
+
#region Nested type: GetInstanceAsExpression
public interface GetInstanceAsExpression
@@ -588,65 +643,5 @@
}
#endregion
-
-
- /// <summary>
- /// Injects the given object into a Container by name for the designated
- /// pluginType. Mostly used for temporarily setting up return values of the Container
- /// to introduce mocks or stubs during automated testing scenarios
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="name"></param>
- /// <param name="object"></param>
- public void Inject<T>(string name, T @object)
- {
- ObjectInstance instance = new ObjectInstance(@object).WithName(name);
- _transientCache.Set(typeof(T), instance, @object);
- _pipelineGraph.AddInstance<T>(instance);
- }
-
- /// <summary>
- /// Sets the default instance for the PluginType
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="instance"></param>
- public void Inject(Type pluginType, Instance instance)
- {
- _pipelineGraph.SetDefault(pluginType, instance);
- }
-
- /// <summary>
- /// Injects the given object into a Container as the default for the designated
- /// pluginType. Mostly used for temporarily setting up return values of the Container
- /// to introduce mocks or stubs during automated testing scenarios
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="object"></param>
- public void Inject(Type pluginType, object @object)
- {
- if (!@object.GetType().CanBeCastTo(pluginType))
- {
- throw new StructureMapException(220, pluginType.FullName,
- @object.GetType().FullName);
- }
-
-
- var instance = new ObjectInstance(@object);
- _transientCache.Set(pluginType, instance, @object);
- _pipelineGraph.SetDefault(pluginType, instance);
- }
-
- /// <summary>
- /// Injects the given object into a Container as the default for the designated
- /// PLUGINTYPE. Mostly used for temporarily setting up return values of the Container
- /// to introduce mocks or stubs during automated testing scenarios
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <param name="object"></param>
- public void Inject<PLUGINTYPE>(PLUGINTYPE @object)
- {
- var instance = _pipelineGraph.Inject(@object);
- _transientCache.Set(typeof(PLUGINTYPE), instance, @object);
- }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Diagnostics/Doctor.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/Doctor.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Diagnostics/Doctor.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -21,7 +21,11 @@
try
{
- var setup = new AppDomainSetup {ApplicationBase = BinaryPath, ConfigurationFile = ConfigFile};
+ var setup = new AppDomainSetup
+ {
+ ApplicationBase = BinaryPath,
+ ConfigurationFile = ConfigFile
+ };
if (BinaryPath != null) setup.PrivateBinPath = BinaryPath;
domain = AppDomain.CreateDomain("StructureMap-Diagnostics", null, setup);
var doctor =
Modified: trunk/Source/StructureMap/Diagnostics/GraphLog.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/GraphLog.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Diagnostics/GraphLog.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -14,15 +14,9 @@
private readonly List<string> _sources = new List<string>();
private string _currentSource;
- public int ErrorCount
- {
- get { return _errors.Count; }
- }
+ public int ErrorCount { get { return _errors.Count; } }
- public string[] Sources
- {
- get { return _sources.ToArray(); }
- }
+ public string[] Sources { get { return _sources.ToArray(); } }
public void StartSource(string description)
{
Modified: trunk/Source/StructureMap/Diagnostics/InstanceToken.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/InstanceToken.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Diagnostics/InstanceToken.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -14,15 +14,9 @@
}
- public string Name
- {
- get { return _name; }
- }
+ public string Name { get { return _name; } }
- public string Description
- {
- get { return _description; }
- }
+ public string Description { get { return _description; } }
#region IEquatable<InstanceToken> Members
Modified: trunk/Source/StructureMap/Exceptions/StructureMapException.cs
===================================================================
--- trunk/Source/StructureMap/Exceptions/StructureMapException.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Exceptions/StructureMapException.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -14,8 +14,9 @@
private readonly string _msg;
- protected StructureMapException(SerializationInfo info, StreamingContext context) :
- base(info, context)
+ protected StructureMapException(SerializationInfo info, StreamingContext context)
+ :
+ base(info, context)
{
_errorCode = info.GetInt32("errorCode");
_msg = info.GetString("msg");
@@ -37,15 +38,9 @@
_msg += ErrorMessages.GetMessage(ErrorCode, args);
}
- public override string Message
- {
- get { return _msg; }
- }
+ public override string Message { get { return _msg; } }
- public int ErrorCode
- {
- get { return _errorCode; }
- }
+ public int ErrorCode { get { return _errorCode; } }
public override void GetObjectData(SerializationInfo info, StreamingContext context)
Modified: trunk/Source/StructureMap/ExplicitArgsExpression.cs
===================================================================
--- trunk/Source/StructureMap/ExplicitArgsExpression.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/ExplicitArgsExpression.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -116,6 +116,5 @@
{
return _container.GetAllInstances(type, _args);
}
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Extensions.cs
===================================================================
--- trunk/Source/StructureMap/Extensions.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Extensions.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -1,7 +1,5 @@
-using System;
+using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
namespace StructureMap
{
@@ -33,4 +31,4 @@
return array;
}
}
-}
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/AssemblyScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 05:37:13 UTC (rev 295)
+++ trunk/Source/StructureMap/Graph/AssemblyScanner.cs 2009-12-26 05:45:56 UTC (rev 296)
@@ -47,7 +47,7 @@
/// </summary>
/// <param name="path"></param>
void AssembliesFromPath(string path);
-
+
/// <summary>
/// Sweep the designated path and add any Assembly's found in this folder to the
/// scanning operation. The assemblyFilter can be used to filter or limit the
@@ -72,8 +72,6 @@
#endregion
- // ... Other methods
-
#region Adding TypeScanners
/// <summary>
@@ -83,6 +81,7 @@
void With(ITypeScanner scanner);
void With(IHeavyweightTypeScanner heavyweightScanner);
+
/// <summary>
/// Adds the DefaultConventionScanner to the scanning operations. I.e., a concrete
/// class named "Something" that implements "ISomething" will be automatically
@@ -173,8 +172,11 @@
void ExcludeType<T>();
// ... Other methods
+
#endregion
+ // ... Other methods
+
/// <summary>
/// Scans for PluginType's and Concrete Types that close the given open generic type
/// </summary>
@@ -189,9 +191,9 @@
{
private readonly List<Assembly> _assemblies = new List<Assembly>();
private readonly List<Predicate<Type>> _excludes = new List<Predicate<Type>>();
+ private readonly List<IHeavyweightTypeScanner> _heavyweightScanners = new List<IHeavyweightTypeScanner>();
private readonly List<Predicate<Type>> _includes = new List<Predicate<Type>>();
private readonly List<ITypeScanner> _scanners = new List<ITypeScanner>();
- private readonly List<IHeavyweightTypeScanner> _heavyweightScanners = new List<IHeavyweightTypeScanner>();
public AssemblyScanner()
{
@@ -199,81 +201,9 @@
With<PluggableAttributeScanner>();
}
- public int Count
- {
- get { return _assemblies.Count; }
- }
+ public int Count { get { return _assemblies.Count; } }
- internal void ScanForAll(PluginGraph pluginGraph)
- {
- var heavyweightScan = configureHeavyweightScan();
-
- _assemblies.ForEach(assem => scanTypesInAssembly(assem, pluginGraph));
-
- performHeavyweightScan(pluginGraph, heavyweightScan);
- }
-
- private void scanTypesInAssembly(Assembly assembly, PluginGraph graph)
- {
- try
- {
- foreach (var type in assembly.GetExportedTypes())
- {
- if (!isInTheIncludes(type)) continue;
- if (isInTheExcludes(type)) continue;
-
- _scanners.ForEach(scanner => scanner.Process(type, graph));
- }
- }
- catch (Exception ex)
- {
- graph.Log.RegisterError(170, ex, assembly.FullName);
- }
- }
-
- private TypeMapBuilder configureHeavyweightScan()
- {
- var typeMapBuilder = new TypeMapBuilder();
- if (_heavyweightScanners.Count > 0)
- {
- With(typeMapBuilder);
- }
- return typeMapBuilder;
- }
-
- private void performHeavyweightScan(PluginGraph pluginGraph, TypeMapBuilder typeMapBuilder)
- {
- var typeMaps = typeMapBuilder.GetTypeMaps();
- _heavyweightScanners.ForEach(scanner => scanner.Process(pluginGraph, typeMaps));
- typeMapBuilder.Dispose();
- }
-
- private bool isInTheExcludes(Type type)
- {
- if (_excludes.Count == 0) return false;
-
- foreach (var exclude in _excludes)
- {
- if (exclude(type)) return true;
- }
-
- return false;
- }
-
- private bool isInTheIncludes(Type type)
- {
- if (_includes.Count == 0) return true;
-
-
- foreach (var include in _includes)
- {
- if (include(type)) return true;
- }
-
- return false;
- }
-
public void Assembly(Assembly assembly)
{
if (!_assemblies.Contains(assembly))
@@ -287,26 +217,13 @@
Assembly(AppDomain.CurrentDomain.Load(assemblyName));
}
- public bool Contains(string assemblyName)
- {
- foreach (Assembly assembly in _assemblies)
- {
- if (assembly.GetName().Name == assemblyName)
- {
- return true;
- }
- }
-
- return false;
- }
-
public void With(ITypeScanner scanner)
{
if (_scanners.Contains(scanner)) return;
_scanners.Add(scanner);
}
-
+
public void With(IHeavyweightTypeScanner heavyweightScanner)
{
if (_heavyweightScanners.Contains(heavyweightScanner)) return;
@@ -345,25 +262,6 @@
}
}
- private static Assembly findTheCallingAssembly()
- {
- var trace = new StackTrace(false);
-
- Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
- Assembly callingAssembly = null;
- for (int i = 0; i < trace.FrameCount; i++)
- {
- StackFrame frame = trace.GetFrame(i);
- Assembly assembly = frame.GetMethod().DeclaringType.Assembly;
- if (assembly != thisAssembly)
- {
- callingAssembly = assembly;
- break;
- }
- }
- return callingAssembly;
- }
-
public void AssemblyContainingType<T>()
{
_assemblies.Add(typeof (T).Assembly);
@@ -441,16 +339,14 @@
public void AssembliesFromApplicationBaseDirectory(Predicate<Assembly> assemblyFilter)
{
- var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
+ string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
AssembliesFromPath(baseDirectory, assemblyFilter);
- var binPath = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath;
+ string binPath = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath;
if (Directory.Exists(binPath))
{
AssembliesFromPath(binPath, assemblyFilter);
}
-
-
}
public void AssembliesFromPath(string path)
@@ -460,14 +356,16 @@
public void AssembliesFromPath(string path, Predicate<Assembly> assemblyFilter)
{
- var assemblyPaths = System.IO.Directory.GetFiles(path).Where(file =>
- System.IO.Path.GetExtension(file).Equals(
- ".exe", StringComparison.OrdinalIgnoreCase)
- ||
- System.IO.Path.GetExtension(file).Equals(
- ".dll", StringComparison.OrdinalIgnoreCase));
+ IEnumerable<string> assemblyPaths = Directory.GetFiles(path).Where(file =>
+ Path.GetExtension(file).Equals(
+ ".exe",
+ StringComparison.OrdinalIgnoreCase)
+ ||
+ Path.GetExtension(file).Equals(
+ ".dll",
+ StringComparison.OrdinalIgnoreCase));
- foreach (var assemblyPath in assemblyPaths)
+ foreach (string assemblyPath in assemblyPaths)
{
...
[truncated message content] |
|
From: <jer...@us...> - 2009-12-26 05:37:20
|
Revision: 295
http://structuremap.svn.sourceforge.net/structuremap/?rev=295&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:37:13 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
The big, big, big switch from IL generation to dynamic Func's. Ding dong, the witch is dead.
Modified Paths:
--------------
trunk/Source/StructureMap/BuildSession.cs
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/IContext.cs
trunk/Source/StructureMap/InstanceMemento.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap/TypeExtensions.cs
Removed Paths:
-------------
trunk/Source/StructureMap/InstanceBuilder.cs
trunk/Source/StructureMap/InstanceBuilderList.cs
trunk/Source/StructureMap/InstanceFamily.cs
Modified: trunk/Source/StructureMap/BuildSession.cs
===================================================================
--- trunk/Source/StructureMap/BuildSession.cs 2009-12-26 05:36:53 UTC (rev 294)
+++ trunk/Source/StructureMap/BuildSession.cs 2009-12-26 05:37:13 UTC (rev 295)
@@ -1,9 +1,11 @@
using System;
+using System.Collections;
using System.Collections.Generic;
using StructureMap.Graph;
using StructureMap.Interceptors;
using StructureMap.Pipeline;
using StructureMap.Util;
+using System.Linq;
namespace StructureMap
{
@@ -75,7 +77,7 @@
}
}
- T IContext.GetInstance<T>()
+ public T GetInstance<T>()
{
return (T) CreateInstance(typeof (T));
}
@@ -120,6 +122,8 @@
return list;
}
+
+
#endregion
public virtual object CreateInstance(Type pluginType, string name)
@@ -172,6 +176,16 @@
return array;
}
+ public IEnumerable<T> GetAllInstances<T>()
+ {
+ return forType(typeof (T)).AllInstances.Select(x => GetInstance<T>());
+ }
+
+ public IEnumerable<object> GetAllInstances(Type pluginType)
+ {
+ return forType(pluginType).AllInstances.Select(x => CreateInstance(pluginType, x));
+ }
+
public virtual object CreateInstance(Type pluginType)
{
return _defaults[pluginType]();
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-26 05:36:53 UTC (rev 294)
+++ trunk/Source/StructureMap/Container.cs 2009-12-26 05:37:13 UTC (rev 295)
@@ -2,6 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using StructureMap.Configuration.DSL;
+using StructureMap.Construction;
using StructureMap.Diagnostics;
using StructureMap.Exceptions;
using StructureMap.Graph;
@@ -241,8 +242,9 @@
IConfiguredInstance instance = _pipelineGraph.GetDefault(pluggedType) as IConfiguredInstance
?? new ConfiguredInstance(pluggedType);
- InstanceBuilder builder = PluginCache.FindBuilder(pluggedType);
- builder.BuildUp(instance, withNewSession(Plugin.DEFAULT), target);
+ IInstanceBuilder builder = PluginCache.FindBuilder(pluggedType);
+ var arguments = new Arguments(instance, withNewSession(Plugin.DEFAULT));
+ builder.BuildUp(arguments, target);
}
/// <summary>
@@ -481,11 +483,11 @@
defaultInstance = new ConfiguredInstance(pluginType);
}
- var basicInstance = defaultInstance as BasicInstance;
+ var basicInstance = defaultInstance as ConstructorInstance;
Instance instance = basicInstance == null
? defaultInstance
- : new ExplicitInstance(pluginType, args, basicInstance);
+ : basicInstance.Override(args);
BuildSession session = withNewSession(requestedName);
@@ -516,11 +518,10 @@
_pipelineGraph = new PipelineGraph(pluginGraph);
- PluginCache.Compile();
-
_pipelineGraph.Inject<IContainer>(this);
}
+ [Obsolete("delegate to something cleaner in BuildSession")]
private IList<T> getListOfTypeWithSession<T>(BuildSession session)
{
var list = new List<T>();
Modified: trunk/Source/StructureMap/IContext.cs
===================================================================
--- trunk/Source/StructureMap/IContext.cs 2009-12-26 05:36:53 UTC (rev 294)
+++ trunk/Source/StructureMap/IContext.cs 2009-12-26 05:37:13 UTC (rev 295)
@@ -67,10 +67,18 @@
/// <summary>
/// Gets all objects in the current object graph that can be cast
- /// to T
+ /// to T that have already been created
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
IEnumerable<T> All<T>() where T : class;
+
+
+ /// <summary>
+ /// Creates/Resolves every configured instance of PlutinType T
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ IEnumerable<T> GetAllInstances<T>();
}
}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/InstanceBuilder.cs
===================================================================
--- trunk/Source/StructureMap/InstanceBuilder.cs 2009-12-26 05:36:53 UTC (rev 294)
+++ trunk/Source/StructureMap/InstanceBuilder.cs 2009-12-26 05:37:13 UTC (rev 295)
@@ -1,25 +0,0 @@
-using System;
-using StructureMap.Pipeline;
-
-namespace StructureMap
-{
-#pragma warning disable 169
- /// <summary>
- /// Base class for creating an object instance from an InstanceMemento. SubClasses are
- /// emitted for each concrete Plugin with constructor parameters.
- /// </summary>
- public abstract class InstanceBuilder
- {
- private Container _manager;
-
- // DO NOT ELIMINATE THIS METHOD
- public InstanceBuilder(){}
-
- public abstract Type PluggedType { get; }
-
- public abstract object BuildInstance(IConfiguredInstance instance, BuildSession session);
-
- public virtual void BuildUp(IConfiguredInstance instance, BuildSession session, object target) { }
- }
-#pragma warning restore 169
-}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/InstanceBuilderList.cs
===================================================================
--- trunk/Source/StructureMap/InstanceBuilderList.cs 2009-12-26 05:36:53 UTC (rev 294)
+++ trunk/Source/StructureMap/InstanceBuilderList.cs 2009-12-26 05:37:13 UTC (rev 295)
@@ -1,117 +0,0 @@
-using System;
-using System.Collections.Generic;
-using StructureMap.Emitting;
-using StructureMap.Graph;
-using StructureMap.TypeRules;
-
-namespace StructureMap
-{
- public class InstanceBuilderList
- {
- private readonly Dictionary<string, Type> _aliases = new Dictionary<string, Type>();
- private readonly Dictionary<Type, InstanceBuilder> _builders = new Dictionary<Type, InstanceBuilder>();
- private readonly Type _pluginType;
-
-
- public InstanceBuilderList(Type pluginType, IEnumerable<Plugin> plugins)
- {
- _pluginType = pluginType;
- processPlugins(plugins);
- }
-
- public InstanceBuilderList(Type pluginType)
- {
- _pluginType = pluginType;
- }
-
- public int BuilderCount
- {
- get { return _builders.Count; }
- }
-
-
- public InstanceBuilder FindByType(Type pluggedType)
- {
- if (pluggedType == null)
- {
- return null;
- }
-
- if (_builders.ContainsKey(pluggedType))
- {
- return _builders[pluggedType];
- }
-
- // Add a missing PluggedType if we can
- if (pluggedType.CanBeCastTo(_pluginType) && Constructor.HasConstructors(pluggedType))
- {
- var plugin = new Plugin(pluggedType);
- processPlugin(plugin);
-
- return _builders[pluggedType];
- }
-
- return null;
- }
-
- public InstanceBuilder FindByConcreteKey(string concreteKey)
- {
- if (_aliases.ContainsKey(concreteKey))
- {
- Type pluggedType = _aliases[concreteKey];
- return FindByType(pluggedType);
- }
-
- return null;
- }
-
- private void processPlugin(Plugin plugin)
- {
- processPlugins(new[] {plugin});
- }
-
- private void processPlugins(IEnumerable<Plugin> plugins)
- {
- foreach (Plugin plugin in plugins)
- {
- if (_aliases.ContainsKey(plugin.ConcreteKey))
- {
- continue;
- }
-
- _aliases.Add(plugin.ConcreteKey, plugin.PluggedType);
- }
-
- List<InstanceBuilder> list = createInstanceBuilders(plugins);
- foreach (InstanceBuilder builder in list)
- {
- _builders.Add(builder.PluggedType, builder);
- }
- }
-
- private List<InstanceBuilder> createInstanceBuilders(IEnumerable<Plugin> plugins)
- {
- var list = new List<Plugin>();
- foreach (Plugin plugin in plugins)
- {
- if (!_builders.ContainsKey(plugin.PluggedType))
- {
- list.Add(plugin);
- }
- }
-
- var builderAssembly = new InstanceBuilderAssembly(list);
- return builderAssembly.Compile();
- }
-
- public void Add(Plugin plugin)
- {
- Add(new[] {plugin});
- }
-
- public void Add(IEnumerable<Plugin> plugins)
- {
- processPlugins(plugins);
- }
- }
-}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/InstanceFamily.cs
===================================================================
--- trunk/Source/StructureMap/InstanceFamily.cs 2009-12-26 05:36:53 UTC (rev 294)
+++ trunk/Source/StructureMap/InstanceFamily.cs 2009-12-26 05:37:13 UTC (rev 295)
@@ -1,6 +0,0 @@
-namespace StructureMap
-{
- public class InstanceFamily
- {
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap/InstanceMemento.cs
===================================================================
--- trunk/Source/StructureMap/InstanceMemento.cs 2009-12-26 05:36:53 UTC (rev 294)
+++ trunk/Source/StructureMap/InstanceMemento.cs 2009-12-26 05:37:13 UTC (rev 295)
@@ -193,7 +193,6 @@
return getPropertyValue(XmlConstants.PLUGGED_TYPE);
}
- // TODO -- this is where we can read other types
public Instance ReadInstance(PluginGraph pluginGraph, Type pluginType)
{
try
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-12-26 05:36:53 UTC (rev 294)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-12-26 05:37:13 UTC (rev 295)
@@ -132,6 +132,7 @@
return _factories[pluginType];
}
+ [Obsolete("Replace this with a Cache")]
private void createFactoryIfMissing(Type pluginType)
{
if (!_factories.ContainsKey(pluginType))
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-12-26 05:36:53 UTC (rev 294)
+++ trunk/Source/StructureMap/StructureMap.csproj 2009-12-26 05:37:13 UTC (rev 295)
@@ -144,16 +144,13 @@
<Compile Include="Diagnostics\TextLine.cs" />
<Compile Include="Diagnostics\TextReportWriter.cs" />
<Compile Include="Diagnostics\WhatDoIHaveWriter.cs" />
- <Compile Include="Emitting\ArgumentEmitter.cs" />
<Compile Include="Exceptions\StructureMapConfigurationException.cs" />
<Compile Include="ExplicitArgsExpression.cs" />
<Compile Include="Graph\Constructor.cs" />
<Compile Include="Graph\IArgumentVisitor.cs" />
<Compile Include="Graph\IPluginFamily.cs" />
<Compile Include="Graph\AssemblyScanner.cs" />
- <Compile Include="InstanceBuilderList.cs" />
<Compile Include="InstanceCache.cs" />
- <Compile Include="InstanceFamily.cs" />
<Compile Include="Interceptors\MatchedTypeInterceptor.cs" />
<Compile Include="PipelineGraph.cs" />
<Compile Include="Pipeline\ConfiguredInstance.cs" />
@@ -217,39 +214,6 @@
<Compile Include="Configuration\XmlConstants.cs">
<SubType>Code</SubType>
</Compile>
- <Compile Include="Emitting\BuildInstanceMethod.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="Emitting\ClassBuilder.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="Emitting\DynamicAssembly.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="Emitting\InstanceBuilderAssembly.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="Emitting\Method.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="Emitting\Parameters\ChildArrayParameterEmitter.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="Emitting\Parameters\ChildParameterEmitter.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="Emitting\Parameters\EnumParameterEmitter.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="Emitting\Parameters\ParameterEmitter.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="Emitting\Parameters\PrimitiveParameterEmitter.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="Emitting\Parameters\StringParameterEmitter.cs">
- <SubType>Code</SubType>
- </Compile>
<Compile Include="Exceptions\InstancePropertyValueException.cs">
<SubType>Code</SubType>
</Compile>
@@ -285,9 +249,6 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="IContainer.cs" />
- <Compile Include="InstanceBuilder.cs">
- <SubType>Code</SubType>
- </Compile>
<Compile Include="InstanceFactory.cs">
<SubType>Code</SubType>
</Compile>
@@ -382,13 +343,16 @@
<Compile Include="Configuration\PrimitiveArrayReader.cs" />
<Compile Include="Configuration\TypeReaderFactory.cs" />
<Compile Include="Configuration\XmlExtensions.cs" />
+ <Compile Include="Construction\BuilderCompiler.cs" />
+ <Compile Include="Construction\ConstructorFunctionBuilder.cs" />
+ <Compile Include="Construction\IArguments.cs" />
+ <Compile Include="Construction\InstanceBuilder.cs" />
+ <Compile Include="Construction\SetterBuilder.cs" />
<Compile Include="Diagnostics\Doctor.cs" />
<Compile Include="Diagnostics\DoctorReport.cs" />
<Compile Include="Diagnostics\DoctorResult.cs" />
<Compile Include="Diagnostics\DoctorRunner.cs" />
<Compile Include="Diagnostics\ValidationError.cs" />
- <Compile Include="Emitting\BuildUpMethod.cs" />
- <Compile Include="Emitting\Parameters\Methods.cs" />
<Compile Include="ErrorMessages.cs" />
<Compile Include="Example.cs" />
<Compile Include="Extensions.cs" />
@@ -401,6 +365,7 @@
<Compile Include="Graph\PluginCache.cs" />
<Compile Include="Graph\SingleImplementationScanner.cs" />
<Compile Include="IContext.cs" />
+ <Compile Include="Pipeline\Arguments.cs" />
<Compile Include="Pipeline\ArrayCoercion.cs" />
<Compile Include="Pipeline\ConditionalInstance.cs" />
<Compile Include="Pipeline\ConstructorInstance.cs" />
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-26 05:36:53 UTC (rev 294)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-26 05:37:13 UTC (rev 295)
@@ -1,13 +1,41 @@
using System;
+using System.Collections.Generic;
using StructureMap.Graph;
using StructureMap.Pipeline;
namespace StructureMap
{
+ public static class BasicExtensions
+ {
+ public static void TryGet<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key,
+ Action<TValue> action)
+ {
+ TValue value;
+ if (dictionary.TryGetValue(key, out value))
+ {
+ action(value);
+ }
+ }
+
+ public static T As<T>(this object target) where T : class
+ {
+ return target as T;
+ }
+
+ public static bool IsIn<T>(this T target, IList<T> list)
+ {
+ return list.Contains(target);
+ }
+ }
+
namespace TypeRules
{
public static class TypeExtensions
{
+
+
+
+
public static bool Closes(this Type type, Type openType)
{
var baseType = type.BaseType;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 05:37:01
|
Revision: 294
http://structuremap.svn.sourceforge.net/structuremap/?rev=294&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:36:53 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
The big, big, big switch from IL generation to dynamic Func's. Ding dong, the witch is dead.
Modified Paths:
--------------
trunk/Source/StructureMap/Util/Cache.cs
Modified: trunk/Source/StructureMap/Util/Cache.cs
===================================================================
--- trunk/Source/StructureMap/Util/Cache.cs 2009-12-26 05:36:06 UTC (rev 293)
+++ trunk/Source/StructureMap/Util/Cache.cs 2009-12-26 05:36:53 UTC (rev 294)
@@ -1,90 +1,100 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Threading;
+using StructureMap.Graph;
namespace StructureMap.Util
{
- public class Cache<KEY, VALUE> : IEnumerable<VALUE> where VALUE : class
+ [Serializable]
+ public class Cache<TKey, TValue> where TValue : class
{
- private readonly object _locker = new object();
- private readonly IDictionary<KEY, VALUE> _values;
+ readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
+ readonly IDictionary<TKey, TValue> _values;
+ Func<TValue, TKey> _getKey = delegate { throw new NotImplementedException(); };
- private Func<KEY, VALUE> _onMissing = delegate(KEY key)
+ Action<TValue> _onAddition = x => { };
+
+ Func<TKey, TValue> _onMissing = delegate(TKey key)
{
string message = string.Format("Key '{0}' could not be found", key);
throw new KeyNotFoundException(message);
};
public Cache()
- : this(new Dictionary<KEY, VALUE>())
+ : this(new Dictionary<TKey, TValue>())
{
}
- public Cache(Func<KEY, VALUE> onMissing)
- : this(new Dictionary<KEY, VALUE>(), onMissing)
+ public Cache(Func<TKey, TValue> onMissing)
+ : this(new Dictionary<TKey, TValue>(), onMissing)
{
}
- public Cache(IDictionary<KEY, VALUE> dictionary, Func<KEY, VALUE> onMissing)
+ public Cache(IDictionary<TKey, TValue> dictionary, Func<TKey, TValue> onMissing)
: this(dictionary)
{
_onMissing = onMissing;
}
- public Cache(IDictionary<KEY, VALUE> dictionary)
+ public Cache(IDictionary<TKey, TValue> dictionary)
{
_values = dictionary;
}
- public Func<KEY, VALUE> OnMissing
- {
- set { _onMissing = value; }
- }
+ public Func<TKey, TValue> OnMissing { set { _onMissing = value; } }
+ public Action<TValue> OnAddition { set { _onAddition = value; } }
+
+ public Func<TValue, TKey> GetKey { get { return _getKey; } set { _getKey = value; } }
+
public int Count
{
- get { return _values.Count; }
+ get
+ {
+ using (ReadLock())
+ return _values.Count;
+ }
}
- public VALUE First
+ public TValue First
{
get
{
- foreach (var pair in _values)
- {
- return pair.Value;
- }
+ using (ReadLock())
+ foreach (var pair in _values)
+ {
+ return pair.Value;
+ }
return null;
}
}
-
- public VALUE this[KEY key]
+ public TValue this[TKey key]
{
get
{
- if (!_values.ContainsKey(key))
+ using (var @lock = ReadLock())
{
- lock (_locker)
+ if (!_values.ContainsKey(key))
{
+ @lock.Upgrade();
if (!_values.ContainsKey(key))
{
- VALUE value = _onMissing(key);
- //Check to make sure that the onMissing didn't cache this already
- if(!_values.ContainsKey(key))
- {
- _values.Add(key, value);
- }
+ TValue value = _onMissing(key);
+ _values.Add(key, value);
}
}
+
+ return _values[key];
}
-
- return _values[key];
}
set
{
- lock (_locker)
+ _onAddition(value);
+
+ using (var @lock = WriteLock())
{
if (_values.ContainsKey(key))
{
@@ -98,33 +108,22 @@
}
}
- #region IEnumerable<VALUE> Members
-
- IEnumerator IEnumerable.GetEnumerator()
+ public void Fill(TKey key, TValue value)
{
- return ((IEnumerable<VALUE>)this).GetEnumerator();
- }
+ using (WriteLock())
+ {
+ if (_values.ContainsKey(key))
+ {
+ return;
+ }
- public IEnumerator<VALUE> GetEnumerator()
- {
- return _values.Values.GetEnumerator();
- }
-
- #endregion
-
- public void Fill(KEY key, VALUE value)
- {
- if (_values.ContainsKey(key))
- {
- return;
+ _values.Add(key, value);
}
-
- _values.Add(key, value);
}
- public void Each(Action<VALUE> action)
+ public void Each(Action<TValue> action)
{
- lock (_locker)
+ using (ReadLock())
{
foreach (var pair in _values)
{
@@ -133,73 +132,150 @@
}
}
- public void Each(Action<KEY, VALUE> action)
+ public void Each(Action<TKey, TValue> action)
{
- foreach (var pair in _values)
+ using (ReadLock())
{
- action(pair.Key, pair.Value);
+ foreach (var pair in _values)
+ {
+ action(pair.Key, pair.Value);
+ }
}
}
- public bool Has(KEY key)
+ public bool Has(TKey key)
{
- return _values.ContainsKey(key);
+ using (ReadLock())
+ return _values.ContainsKey(key);
}
- public bool Exists(Predicate<VALUE> predicate)
+ public bool Exists(Predicate<TValue> predicate)
{
bool returnValue = false;
- Each(delegate(VALUE value) { returnValue |= predicate(value); });
+ Each(delegate(TValue value) { returnValue |= predicate(value); });
return returnValue;
}
- public VALUE Find(Predicate<VALUE> predicate)
+ public TValue Find(Predicate<TValue> predicate)
{
- foreach (var pair in _values)
- {
- if (predicate(pair.Value))
+ using (ReadLock())
+ foreach (var pair in _values)
{
- return pair.Value;
+ if (predicate(pair.Value))
+ {
+ return pair.Value;
+ }
}
- }
return null;
}
- public VALUE[] GetAll()
+ public TKey Find(TValue value)
{
- var returnValue = new VALUE[Count];
- _values.Values.CopyTo(returnValue, 0);
+ using (ReadLock())
+ foreach (KeyValuePair<TKey, TValue> pair in _values)
+ {
+ if (pair.Value == value)
+ {
+ return pair.Key;
+ }
+ }
+ return default(TKey);
+ }
+
+ public TValue[] GetAll()
+ {
+ var returnValue = new TValue[Count];
+ using (ReadLock())
+ _values.Values.CopyTo(returnValue, 0);
+
return returnValue;
}
- public IDictionary<KEY, VALUE> Contents()
+ public void Remove(TKey key)
{
- return _values;
+ using (ReadLock())
+ if (_values.ContainsKey(key))
+ {
+ _values.Remove(key);
+ }
}
- public void Remove(KEY key)
+ public void Clear()
{
- if (_values.ContainsKey(key))
+ using (WriteLock())
+ _values.Clear();
+ }
+
+ public void WithValue(TKey key, Action<TValue> callback)
+ {
+ using (ReadLock())
+ _values.TryGet(key, callback);
+ }
+
+ ReadLockToken ReadLock()
+ {
+ return new ReadLockToken(_lock);
+ }
+
+ WriteLockToken WriteLock()
+ {
+ return new WriteLockToken(_lock);
+ }
+
+ class ReadLockToken : IDisposable
+ {
+ readonly ReaderWriterLockSlim _lock;
+ bool upgraded;
+
+ public ReadLockToken(ReaderWriterLockSlim @lock)
{
- _values.Remove(key);
+ _lock = @lock;
+ _lock.EnterReadLock();
}
+
+ public void Upgrade()
+ {
+ _lock.ExitReadLock();
+ _lock.EnterWriteLock();
+ upgraded = true;
+ }
+
+ public void Dispose()
+ {
+ if (upgraded)
+ _lock.ExitWriteLock();
+ else
+ _lock.ExitReadLock();
+ }
}
- public void Clear()
+ class WriteLockToken : IDisposable
{
- _values.Clear();
+ readonly ReaderWriterLockSlim _lock;
+ public WriteLockToken(ReaderWriterLockSlim @lock)
+ {
+ _lock = @lock;
+ _lock.EnterWriteLock();
+ }
+
+ public void Dispose()
+ {
+ _lock.EnterWriteLock();
+ }
}
- public Cache<KEY, VALUE> Clone()
+ public Cache<TKey, TValue> Clone()
{
- var clone = new Cache<KEY, VALUE>(_onMissing);
- Each((k, v) => clone[k] = v);
+ var cache = new Cache<TKey, TValue>();
+ cache._onMissing = _onMissing;
+
+ Each((key, value) => cache[key] = value);
- return clone;
+ return cache;
}
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 05:36:13
|
Revision: 293
http://structuremap.svn.sourceforge.net/structuremap/?rev=293&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:36:06 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
The big, big, big switch from IL generation to dynamic Func's. Ding dong, the witch is dead.
Modified Paths:
--------------
trunk/Source/StructureMap/Pipeline/ArrayCoercion.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
trunk/Source/StructureMap/Pipeline/DefaultInstance.cs
trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs
trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs
trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs
trunk/Source/StructureMap/Pipeline/IEnumerableCoercion.cs
trunk/Source/StructureMap/Pipeline/Instance.cs
trunk/Source/StructureMap/Pipeline/InstanceMementoPropertyReader.cs
trunk/Source/StructureMap/Pipeline/ListCoercion.cs
trunk/Source/StructureMap/Pipeline/ObjectInstance.cs
trunk/Source/StructureMap/Pipeline/Profile.cs
trunk/Source/StructureMap/Pipeline/PropertyExpression.cs
trunk/Source/StructureMap/Pipeline/ReferencedInstance.cs
trunk/Source/StructureMap/Pipeline/SmartInstance.cs
Added Paths:
-----------
trunk/Source/StructureMap/Pipeline/Arguments.cs
Added: trunk/Source/StructureMap/Pipeline/Arguments.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Arguments.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/Arguments.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -0,0 +1,26 @@
+using StructureMap.Construction;
+
+namespace StructureMap.Pipeline
+{
+ public class Arguments : IArguments
+ {
+ private readonly IConfiguredInstance _instance;
+ private readonly BuildSession _session;
+
+ public Arguments(IConfiguredInstance instance, BuildSession session)
+ {
+ _instance = instance;
+ _session = session;
+ }
+
+ public T Get<T>(string propertyName)
+ {
+ return _instance.Get<T>(propertyName, _session);
+ }
+
+ public bool Has(string propertyName)
+ {
+ return _instance.HasProperty(propertyName, _session);
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ArrayCoercion.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ArrayCoercion.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/ArrayCoercion.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.Linq;
@@ -9,5 +10,7 @@
{
return enumerable.Select(x => x as T).ToArray();
}
+
+ public Type ElementType { get { return typeof (T); } }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -78,8 +78,6 @@
/// <returns></returns>
public ChildArrayExpression ChildArray<PLUGINTYPE>(string propertyName)
{
- validateTypeIsArray<PLUGINTYPE>();
-
var expression =
new ChildArrayExpression(this, propertyName);
@@ -98,8 +96,6 @@
public ChildArrayExpression ChildArray(Type pluginType)
{
- //TODO: add validation check
- validateTypeIsArray(pluginType);
var propertyName = findPropertyName(pluginType);
return ChildArray(propertyName);
}
@@ -231,7 +227,7 @@
/// <returns></returns>
public ConfiguredInstance Contains(params Instance[] instances)
{
- _instance.setChildArray(_propertyName, instances);
+ _instance.SetCollection(_propertyName, instances);
return _instance;
}
@@ -278,7 +274,7 @@
public ConfiguredInstance IsNamedInstance(string instanceKey)
{
var instance = new ReferencedInstance(instanceKey);
- _instance.setChild(_propertyName, instance);
+ _instance.SetChild(_propertyName, instance);
return _instance;
}
@@ -303,7 +299,7 @@
ExpressionValidator.ValidatePluggabilityOf(pluggedType).IntoPluginType(_childType);
var childInstance = new ConfiguredInstance(pluggedType);
- _instance.setChild(_propertyName, childInstance);
+ _instance.SetChild(_propertyName, childInstance);
return _instance;
}
@@ -316,7 +312,7 @@
/// <returns></returns>
public ConfiguredInstance Is(Instance child)
{
- _instance.setChild(_propertyName, child);
+ _instance.SetChild(_propertyName, child);
return _instance;
}
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -9,69 +9,31 @@
/// and filling setter properties. ConfiguredInstance should only be used for open generic types.
/// Favor <see cref="SmartInstance{T}">SmartInstance{T}</see> for all other usages.
/// </summary>
- public partial class ConfiguredInstance : ConfiguredInstanceBase<ConfiguredInstance>
+ public partial class ConfiguredInstance : ConstructorInstance
{
- public ConfiguredInstance(InstanceMemento memento, PluginGraph graph, Type pluginType)
- : base(memento, graph, pluginType)
+ public ConfiguredInstance(InstanceMemento memento, PluginGraph graph, Type pluginType) : base(memento.FindPlugin(graph.FindFamily(pluginType)))
{
+ read(memento, graph, pluginType);
}
- public ConfiguredInstance(Type pluggedType, string name) : base(pluggedType, name)
+ private void read(InstanceMemento memento, PluginGraph graph, Type pluginType)
{
+ var reader = new InstanceMementoPropertyReader(this, memento, graph, pluginType);
+ plugin.VisitArguments(reader);
}
-
- public ConfiguredInstance(Type pluggedType) : base(pluggedType)
+ public ConfiguredInstance(Type pluggedType, string name) : base(pluggedType, name)
{
}
- public ConfiguredInstance(Type templateType, params Type[] types) : base(GetGenericType(templateType, types))
- {
- }
- public static Type GetGenericType(Type templateType, params Type[] types)
+ public ConfiguredInstance(Type pluggedType) : base(pluggedType)
{
- return templateType.MakeGenericType(types);
- }
- protected void setPluggedType(Type pluggedType)
- {
- _pluggedType = pluggedType;
}
-
- protected override void preprocess(PluginFamily family)
+ public ConfiguredInstance(Type templateType, params Type[] types) : base(templateType.MakeGenericType(types))
{
}
-
- protected override string getDescription()
- {
- string typeName = _pluggedType.AssemblyQualifiedName;
- var ctor = new Constructor(_pluggedType);
- if (ctor.HasArguments())
- {
- return "Configured " + typeName;
- }
- else
- {
- return typeName;
- }
- }
-
- protected override void addTemplatedInstanceTo(PluginFamily family, Type[] templateTypes)
- {
- Type specificType = _pluggedType.IsGenericTypeDefinition
- ? _pluggedType.MakeGenericType(templateTypes)
- : _pluggedType;
- if (specificType.CanBeCastTo(family.PluginType))
- {
- var instance = new ConfiguredInstance(specificType);
- instance._arrays = _arrays;
- instance._children = _children;
- instance._properties = _properties;
- instance.Name = Name;
- family.AddInstance(instance);
- }
- }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -8,291 +8,293 @@
public interface BasicInstance
{
Type PluggedType { get; }
+
+
Dictionary<string, string> Properties { get; }
Dictionary<string, Instance> Children { get; }
Dictionary<string, Instance[]> Arrays { get; }
}
- public abstract class ConfiguredInstanceBase<T> : Instance, IConfiguredInstance, IStructuredInstance, BasicInstance
- {
- protected Dictionary<string, Instance[]> _arrays = new Dictionary<string, Instance[]>();
- protected Dictionary<string, Instance> _children = new Dictionary<string, Instance>();
- protected Type _pluggedType;
- protected Dictionary<string, string> _properties = new Dictionary<string, string>();
+ //public abstract class ConfiguredInstanceBase<T> : Instance, IConfiguredInstance, IStructuredInstance, BasicInstance
+ //{
+ // protected Dictionary<string, Instance[]> _arrays = new Dictionary<string, Instance[]>();
+ // protected Dictionary<string, Instance> _children = new Dictionary<string, Instance>();
+ // protected Type _pluggedType;
+ // protected Dictionary<string, string> _properties = new Dictionary<string, string>();
- protected ConfiguredInstanceBase(InstanceMemento memento, PluginGraph graph, Type pluginType)
- {
- read(memento, graph, pluginType);
- }
+ // protected ConfiguredInstanceBase(InstanceMemento memento, PluginGraph graph, Type pluginType)
+ // {
+ // read(memento, graph, pluginType);
+ // }
- protected ConfiguredInstanceBase(Type pluggedType, string name)
- {
- _pluggedType = pluggedType;
- Name = name;
- }
+ // protected ConfiguredInstanceBase(Type pluggedType, string name)
+ // {
+ // _pluggedType = pluggedType;
+ // Name = name;
+ // }
- protected ConfiguredInstanceBase(Type pluggedType) : this(pluggedType, Guid.NewGuid().ToString())
- {
- if (pluggedType != null)
- if (pluggedType.IsAbstract || pluggedType.IsInterface)
- {
- throw new StructureMapException(25);
- }
- }
+ // protected ConfiguredInstanceBase(Type pluggedType) : this(pluggedType, Guid.NewGuid().ToString())
+ // {
+ // if (pluggedType != null)
+ // if (pluggedType.IsAbstract || pluggedType.IsInterface)
+ // {
+ // throw new StructureMapException(25);
+ // }
+ // }
- #region Copyable Members
+ // #region Copyable Members
- Type BasicInstance.PluggedType
- {
- get { return _pluggedType; }
- }
+ // Type BasicInstance.PluggedType
+ // {
+ // get { return _pluggedType; }
+ // }
- Dictionary<string, string> BasicInstance.Properties
- {
- get { return _properties; }
- }
+ // Dictionary<string, string> BasicInstance.Properties
+ // {
+ // get { return _properties; }
+ // }
- Dictionary<string, Instance> BasicInstance.Children
- {
- get { return _children; }
- }
+ // Dictionary<string, Instance> BasicInstance.Children
+ // {
+ // get { return _children; }
+ // }
- Dictionary<string, Instance[]> BasicInstance.Arrays
- {
- get { return _arrays; }
- }
+ // Dictionary<string, Instance[]> BasicInstance.Arrays
+ // {
+ // get { return _arrays; }
+ // }
- #endregion
+ // #endregion
- #region IConfiguredInstance Members
+ // //#region IConfiguredInstance Members
- Type IConfiguredInstance.PluggedType
- {
- get { return _pluggedType; }
- }
+ // //Type IConfiguredInstance.PluggedType
+ // //{
+ // // get { return _pluggedType; }
+ // //}
- Instance[] IConfiguredInstance.GetChildrenArray(string propertyName)
- {
- return _arrays.ContainsKey(propertyName) ? _arrays[propertyName] : null;
- }
+ // //Instance[] IConfiguredInstance.GetChildrenArray(string propertyName)
+ // //{
+ // // return _arrays.ContainsKey(propertyName) ? _arrays[propertyName] : null;
+ // //}
- string IConfiguredInstance.GetProperty(string propertyName)
- {
- if (!_properties.ContainsKey(propertyName))
- {
- throw new StructureMapException(205, propertyName, Name);
- }
+ // //string IConfiguredInstance.GetProperty(string propertyName)
+ // //{
+ // // if (!_properties.ContainsKey(propertyName))
+ // // {
+ // // throw new StructureMapException(205, propertyName, Name);
+ // // }
- return _properties[propertyName];
- }
+ // // return _properties[propertyName];
+ // //}
- object IConfiguredInstance.Get(string propertyName, Type pluginType, BuildSession buildSession)
- {
- return getChild(propertyName, pluginType, buildSession);
- }
+ // //object IConfiguredInstance.Get(string propertyName, Type pluginType, BuildSession buildSession)
+ // //{
+ // // return getChild(propertyName, pluginType, buildSession);
+ // //}
- object IConfiguredInstance.Build(Type pluginType, BuildSession session, InstanceBuilder builder)
- {
- if (builder == null)
- {
- throw new StructureMapException(
- 201, _pluggedType.FullName, Name, pluginType);
- }
+ // //object IConfiguredInstance.Build(Type pluginType, BuildSession session, InstanceBuilder builder)
+ // //{
+ // // if (builder == null)
+ // // {
+ // // throw new StructureMapException(
+ // // 201, _pluggedType.FullName, Name, pluginType);
+ // // }
- try
- {
- return builder.BuildInstance(this, session);
- }
- catch (StructureMapException)
- {
- throw;
- }
- catch (InvalidCastException ex)
- {
- throw new StructureMapException(206, ex, Name);
- }
- catch (Exception ex)
- {
- throw new StructureMapException(207, ex, Name, pluginType.FullName);
- }
- }
+ // // try
+ // // {
+ // // return builder.BuildInstance(this, session);
+ // // }
+ // // catch (StructureMapException)
+ // // {
+ // // throw;
+ // // }
+ // // catch (InvalidCastException ex)
+ // // {
+ // // throw new StructureMapException(206, ex, Name);
+ // // }
+ // // catch (Exception ex)
+ // // {
+ // // throw new StructureMapException(207, ex, Name, pluginType.FullName);
+ // // }
+ // //}
- bool IConfiguredInstance.HasProperty(string propertyName)
- {
- return _properties.ContainsKey(propertyName) || _children.ContainsKey(propertyName) ||
- _arrays.ContainsKey(propertyName);
- }
+ // //bool IConfiguredInstance.HasProperty(string propertyName, BuildSession session)
+ // //{
+ // // return _properties.ContainsKey(propertyName) || _children.ContainsKey(propertyName) ||
+ // // _arrays.ContainsKey(propertyName);
+ // //}
- void IConfiguredInstance.SetProperty(string propertyName, string propertyValue)
- {
- setProperty(propertyName, propertyValue);
- }
+ // //void IConfiguredInstance.SetProperty(string propertyName, string propertyValue)
+ // //{
+ // // setProperty(propertyName, propertyValue);
+ // //}
- void IConfiguredInstance.Set(string name, Instance instance)
- {
- setChild(name, instance);
- }
+ // //void IConfiguredInstance.SetChild(string name, Instance instance)
+ // //{
+ // // setChild(name, instance);
+ // //}
- void IConfiguredInstance.SetChildArray(string name, Type type, Instance[] children)
- {
- setChildArray(name, children);
- }
+ // //void IConfiguredInstance.SetChildArray(string name, Type type, Instance[] children)
+ // //{
+ // // setChildArray(name, children);
+ // //}
- #endregion
+ // //#endregion
- #region IStructuredInstance Members
+ // #region IStructuredInstance Members
- Instance IStructuredInstance.GetChild(string name)
- {
- return _children[name];
- }
+ // Instance IStructuredInstance.GetChild(string name)
+ // {
+ // return _children[name];
+ // }
- Instance[] IStructuredInstance.GetChildArray(string name)
- {
- return _arrays[name];
- }
+ // Instance[] IStructuredInstance.GetChildArray(string name)
+ // {
+ // return _arrays[name];
+ // }
- void IStructuredInstance.RemoveKey(string name)
- {
- _properties.Remove(name);
- }
+ // void IStructuredInstance.RemoveKey(string name)
+ // {
+ // _properties.Remove(name);
+ // }
- #endregion
+ // #endregion
- protected override object build(Type pluginType, BuildSession session)
- {
- InstanceBuilder builder = PluginCache.FindBuilder(_pluggedType);
- return ((IConfiguredInstance) this).Build(pluginType, session, builder);
- }
+ // protected override object build(Type pluginType, BuildSession session)
+ // {
+ // InstanceBuilder builder = PluginCache.FindBuilder(_pluggedType);
+ // return ((IConfiguredInstance) this).Build(pluginType, session, builder);
+ // }
- protected virtual object getChild(string propertyName, Type pluginType, BuildSession buildSession)
- {
- Instance childInstance = _children.ContainsKey(propertyName)
- ? _children[propertyName]
- : new DefaultInstance();
+ // protected virtual object getChild(string propertyName, Type pluginType, BuildSession buildSession)
+ // {
+ // Instance childInstance = _children.ContainsKey(propertyName)
+ // ? _children[propertyName]
+ // : new DefaultInstance();
- return childInstance.Build(pluginType, buildSession);
- }
+ // return childInstance.Build(pluginType, buildSession);
+ // }
- protected override bool canBePartOfPluginFamily(PluginFamily family)
- {
- return _pluggedType.CanBeCastTo(family.PluginType) && Constructor.HasConstructors(_pluggedType);
- }
+ // protected override bool canBePartOfPluginFamily(PluginFamily family)
+ // {
+ // return _pluggedType.CanBeCastTo(family.PluginType) && Constructor.HasConstructors(_pluggedType);
+ // }
- internal override bool Matches(Plugin plugin)
- {
- return plugin.PluggedType == _pluggedType;
- }
+ // internal override bool Matches(Plugin plugin)
+ // {
+ // return plugin.PluggedType == _pluggedType;
+ // }
- private void read(InstanceMemento memento, PluginGraph graph, Type pluginType)
- {
- PluginFamily family = graph.FindFamily(pluginType);
- Plugin plugin = memento.FindPlugin(family);
+ // private void read(InstanceMemento memento, PluginGraph graph, Type pluginType)
+ // {
+ // PluginFamily family = graph.FindFamily(pluginType);
+ // Plugin plugin = memento.FindPlugin(family);
- _pluggedType = plugin.PluggedType;
+ // _pluggedType = plugin.PluggedType;
- var reader = new InstanceMementoPropertyReader(this, memento, graph, pluginType);
- plugin.VisitArguments(reader);
- }
+ // var reader = new InstanceMementoPropertyReader(this, memento, graph, pluginType);
+ // plugin.VisitArguments(reader);
+ // }
- protected void setChild(string name, Instance instance)
- {
- if (instance == null) return;
+ // protected void setChild(string name, Instance instance)
+ // {
+ // if (instance == null) return;
- if (_children.ContainsKey(name))
- {
- _children[name] = instance;
- }
- else
- {
- _children.Add(name, instance);
- }
+ // if (_children.ContainsKey(name))
+ // {
+ // _children[name] = instance;
+ // }
+ // else
+ // {
+ // _children.Add(name, instance);
+ // }
- }
+ // }
- protected void setChildArray(string name, Instance[] array)
- {
- for (int i = 0; i < array.Length; i++)
- {
- if (array[i] == null)
- {
- throw new ApplicationException("There is a null value in the array of child Instances");
- }
+ // protected void setChildArray(string name, Instance[] array)
+ // {
+ // for (int i = 0; i < array.Length; i++)
+ // {
+ // if (array[i] == null)
+ // {
+ // throw new ApplicationException("There is a null value in the array of child Instances");
+ // }
- }
+ // }
- _arrays.Add(name, array);
- }
+ // _arrays.Add(name, array);
+ // }
- protected override Type getConcreteType(Type pluginType)
- {
- return _pluggedType;
- }
+ // protected override Type getConcreteType(Type pluginType)
+ // {
+ // return _pluggedType;
+ // }
- protected string findPropertyName<PLUGINTYPE>()
- {
- Type dependencyType = typeof(PLUGINTYPE);
+ // protected string findPropertyName<PLUGINTYPE>()
+ // {
+ // Type dependencyType = typeof(PLUGINTYPE);
- return findPropertyName(dependencyType);
- }
+ // return findPropertyName(dependencyType);
+ // }
- protected string findPropertyName(Type dependencyType)
- {
- var plugin = new Plugin(_pluggedType);
- string propertyName = plugin.FindArgumentNameForType(dependencyType);
+ // protected string findPropertyName(Type dependencyType)
+ // {
+ // var plugin = new Plugin(_pluggedType);
+ // string propertyName = plugin.FindArgumentNameForType(dependencyType);
- if (string.IsNullOrEmpty(propertyName))
- {
- throw new StructureMapException(305, dependencyType);
- }
+ // if (string.IsNullOrEmpty(propertyName))
+ // {
+ // throw new StructureMapException(305, dependencyType);
+ // }
- return propertyName;
- }
+ // return propertyName;
+ // }
- protected static void validateTypeIsArray<PLUGINTYPE>()
- {
- validateTypeIsArray(typeof(PLUGINTYPE));
- }
+ // protected static void validateTypeIsArray<PLUGINTYPE>()
+ // {
+ // validateTypeIsArray(typeof(PLUGINTYPE));
+ // }
- protected static void validateTypeIsArray(Type pluginType)
- {
- if (!pluginType.IsArray)
- {
- throw new StructureMapException(307);
- }
- }
+ // protected static void validateTypeIsArray(Type pluginType)
+ // {
+ // if (!pluginType.IsArray)
+ // {
+ // throw new StructureMapException(307);
+ // }
+ // }
- protected void setProperty(string propertyName, string propertyValue)
- {
- if (string.IsNullOrEmpty(propertyValue)) return;
- _properties[propertyName] = propertyValue;
- }
+ // protected void setProperty(string propertyName, string propertyValue)
+ // {
+ // if (string.IsNullOrEmpty(propertyValue)) return;
+ // _properties[propertyName] = propertyValue;
+ // }
- protected void mergeIntoThis(BasicInstance instance)
- {
- _pluggedType = instance.PluggedType;
+ // protected void mergeIntoThis(BasicInstance instance)
+ // {
+ // _pluggedType = instance.PluggedType;
- foreach (var pair in instance.Properties)
- {
- if (!_properties.ContainsKey(pair.Key))
- {
- _properties.Add(pair.Key, pair.Value);
- }
- }
+ // foreach (var pair in instance.Properties)
+ // {
+ // if (!_properties.ContainsKey(pair.Key))
+ // {
+ // _properties.Add(pair.Key, pair.Value);
+ // }
+ // }
- foreach (var pair in instance.Children)
- {
- if (!_children.ContainsKey(pair.Key))
- {
- _children.Add(pair.Key, pair.Value);
- }
- }
+ // foreach (var pair in instance.Children)
+ // {
+ // if (!_children.ContainsKey(pair.Key))
+ // {
+ // _children.Add(pair.Key, pair.Value);
+ // }
+ // }
- _arrays = instance.Arrays;
- }
- }
+ // _arrays = instance.Arrays;
+ // }
+ //}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -1,56 +1,179 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
+using StructureMap.Construction;
using StructureMap.Graph;
using StructureMap.TypeRules;
using StructureMap.Util;
+using System.Linq;
namespace StructureMap.Pipeline
{
- public class ConstructorInstance : Instance
+
+
+ public class ConstructorInstance : Instance, IConfiguredInstance, IStructuredInstance
{
private readonly Cache<string, Instance> _dependencies = new Cache<string, Instance>();
private readonly Plugin _plugin;
- public ConstructorInstance(Type pluggedType)
+ public ConstructorInstance(Type pluggedType) : this(PluginCache.GetPlugin(pluggedType))
{
- _plugin = PluginCache.GetPlugin(pluggedType);
+
}
- protected override string getDescription()
+ protected override bool canBePartOfPluginFamily(PluginFamily family)
{
+ return _plugin.PluggedType.CanBeCastTo(family.PluginType);
+ }
+
+ public ConstructorInstance(Plugin plugin)
+ {
+ _plugin = plugin;
+
+ _dependencies.OnMissing = key =>
+ {
+ if (_plugin.FindArgumentType(key).IsSimple())
+ {
+ throw new StructureMapException(205, key, Name);
+ }
+
+ return new DefaultInstance();
+ };
+ }
+
+ public ConstructorInstance Override(ExplicitArguments arguments)
+ {
+ var instance = new ConstructorInstance(_plugin);
+ _dependencies.Each((key, i) => instance.SetChild(key, i));
+
+ arguments.Configure(instance);
+
+ return instance;
+ }
+
+ public ConstructorInstance(Type pluggedType, string name) : this(pluggedType)
+ {
+ Name = name;
+ }
+
+ protected override void addTemplatedInstanceTo(PluginFamily family, Type[] templateTypes)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected Plugin plugin { get { return _plugin; } }
+
+ protected sealed override string getDescription()
+ {
return "Configured Instance of " + _plugin.PluggedType.AssemblyQualifiedName;
}
- public void SetChild(string name, Instance instance)
+ protected sealed override Type getConcreteType(Type pluginType)
{
+ return _plugin.PluggedType;
+ }
+
+ void IConfiguredInstance.SetChild(string name, Instance instance)
+ {
+ SetChild(name, instance);
+ }
+
+ public void SetValue(Type type, object value)
+ {
+ var name = _plugin.FindArgumentNameForType(type);
+ SetValue(name, value);
+ }
+
+ void IConfiguredInstance.SetValue(string name, object value)
+ {
+ SetValue(name, value);
+ }
+
+ void IConfiguredInstance.SetCollection(string name, IEnumerable<Instance> children)
+ {
+ SetCollection(name, children);
+ }
+
+ public string GetProperty(string propertyName)
+ {
+ return _dependencies[propertyName].As<ObjectInstance>().Object.ToString();
+ }
+
+ internal void SetChild(string name, Instance instance)
+ {
+ if (instance == null)
+ {
+ throw new ArgumentNullException("instance", "Instance for {0} was null".ToFormat(name));
+ }
+
_dependencies[name] = instance;
}
- public void SetValue(string name, object value)
+ internal void SetValue(string name, object value)
{
- var dependencyType = _plugin.FindArgumentType(name);
+ Type dependencyType = getDependencyType(name);
+
var instance = buildInstanceForType(dependencyType, value);
- _dependencies[name] = instance;
+ SetChild(name, instance);
}
- public void SetCollection(string name, IEnumerable<Instance> children)
+ private Type getDependencyType(string name)
{
var dependencyType = _plugin.FindArgumentType(name);
+ if (dependencyType == null)
+ {
+ throw new ArgumentOutOfRangeException("name",
+ "Could not find a constructor parameter or property for {0} named {1}"
+ .ToFormat(_plugin.PluggedType.AssemblyQualifiedName, name));
+ }
+ return dependencyType;
+ }
+
+ internal void SetCollection(string name, IEnumerable<Instance> children)
+ {
+ Type dependencyType = getDependencyType(name);
var instance = new EnumerableInstance(dependencyType, children);
- _dependencies[name] = instance;
+ SetChild(name, instance);
}
- private static Instance buildInstanceForType(Type dependencyType, object value)
+ protected string findPropertyName<PLUGINTYPE>()
{
+ Type dependencyType = typeof(PLUGINTYPE);
+
+ return findPropertyName(dependencyType);
+ }
+
+ protected string findPropertyName(Type dependencyType)
+ {
+ string propertyName = _plugin.FindArgumentNameForType(dependencyType);
+
+ if (string.IsNullOrEmpty(propertyName))
+ {
+ throw new StructureMapException(305, dependencyType);
+ }
+
+ return propertyName;
+ }
+
+ private Instance buildInstanceForType(Type dependencyType, object value)
+ {
if (value == null) return new NullInstance();
if (dependencyType.IsSimple() || dependencyType.IsNullable() || dependencyType == typeof(Guid) || dependencyType == typeof(DateTime))
{
- var converter = TypeDescriptor.GetConverter(dependencyType);
- var convertedValue = converter.ConvertFrom(value);
- return new ObjectInstance(convertedValue);
+ try
+ {
+ if (value.GetType() == dependencyType) return new ObjectInstance(value);
+
+ var converter = TypeDescriptor.GetConverter(dependencyType);
+ var convertedValue = converter.ConvertFrom(value);
+ return new ObjectInstance(convertedValue);
+ }
+ catch (Exception e)
+ {
+ throw new StructureMapException(206, e, Name);
+ }
}
@@ -62,19 +185,103 @@
return _dependencies[propertyName].Build(pluginType, session);
}
+ public T Get<T>(string propertyName, BuildSession session)
+ {
+ object o = Get(propertyName, typeof (T), session);
+ if (o == null) return default(T);
+
+ return (T)o;
+ }
+
protected override object build(Type pluginType, BuildSession session)
{
- throw new NotImplementedException();
+ IInstanceBuilder builder = PluginCache.FindBuilder(_plugin.PluggedType);
+ return Build(pluginType, session, builder);
}
- public object Build(Type pluginType, BuildSession session, InstanceBuilder builder)
+ public Type PluggedType
{
- throw new NotImplementedException();
+ get { return _plugin.PluggedType; }
}
+ public bool HasProperty(string propertyName, BuildSession session)
+ {
+ // TODO -- richer behavior
+ return _dependencies.Has(propertyName);
+ }
+
+ public object Build(Type pluginType, BuildSession session, IInstanceBuilder builder)
+ {
+ if (builder == null)
+ {
+ throw new StructureMapException(
+ 201, _plugin.PluggedType.FullName, Name, pluginType);
+ }
+
+
+ try
+ {
+ var args = new Arguments(this, session);
+ return builder.BuildInstance(args);
+ }
+ catch (StructureMapException)
+ {
+ throw;
+ }
+ catch (InvalidCastException ex)
+ {
+ throw new StructureMapException(206, ex, Name);
+ }
+ catch (Exception ex)
+ {
+ throw new StructureMapException(207, ex, Name, pluginType.FullName);
+ }
+ }
+
public static ConstructorInstance For<T>()
{
return new ConstructorInstance(typeof(T));
}
+
+ Instance IStructuredInstance.GetChild(string name)
+ {
+ return _dependencies[name];
+ }
+
+ Instance[] IStructuredInstance.GetChildArray(string name)
+ {
+ return _dependencies[name].As<EnumerableInstance>().Children.ToArray();
+ }
+
+ void IStructuredInstance.RemoveKey(string name)
+ {
+ _dependencies.Remove(name);
+ }
+
+ public override Instance CloseType(Type[] types)
+ {
+ if (_plugin.PluggedType.IsOpenGeneric())
+ {
+ var closedType = _plugin.PluggedType.MakeGenericType(types);
+ var closedInstance = new ConstructorInstance(closedType);
+
+ _dependencies.Each((key, i) =>
+ {
+ if (i.CopyAsIsWhenClosingInstance)
+ {
+ closedInstance.SetChild(key, i);
+ }
+ });
+
+ return closedInstance;
+ }
+
+ return null;
+ }
+
+ public override string ToString()
+ {
+ return "'{0}' -> {1}".ToFormat(Name, _plugin.PluggedType.FullName);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/DefaultInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/DefaultInstance.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/DefaultInstance.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -4,6 +4,11 @@
{
public class DefaultInstance : Instance
{
+ public DefaultInstance()
+ {
+ CopyAsIsWhenClosingInstance = true;
+ }
+
protected override bool doesRecordOnTheStack
{
get { return false; }
@@ -11,6 +16,12 @@
protected override object build(Type pluginType, BuildSession session)
{
+ if (EnumerableInstance.IsEnumerable(pluginType))
+ {
+ var enumerable = new EnumerableInstance(pluginType, null);
+ return enumerable.Build(pluginType, session);
+ }
+
return session.CreateInstance(pluginType);
}
Modified: trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -1,4 +1,5 @@
using System;
+using System.Collections;
using System.Collections.Generic;
using System.Linq;
@@ -44,6 +45,8 @@
throw new ArgumentException("Only IEnumerable<T> types can be passed to this constructor. {0} is invalid".ToFormat(propertyType.AssemblyQualifiedName));
}
+ public IEnumerable<Instance> Children { get { return _children; } }
+
protected override string getDescription()
{
return _description;
@@ -51,8 +54,27 @@
protected override object build(Type pluginType, BuildSession session)
{
- var objects = _children.Select(x => x.Build(pluginType, session));
+ var elementType = _coercion.ElementType;
+
+ var objects = buildObjects(elementType, session);
return _coercion.Convert(objects);
}
+
+ private IEnumerable<object> buildObjects(Type elementType, BuildSession session)
+ {
+ if (_children == null)
+ {
+ return session.GetAllInstances(elementType);
+ }
+
+ return _children.Select(x => x.Build(elementType, session));
+ }
+
+ public static bool IsEnumerable(Type type)
+ {
+ if (type.IsArray) return true;
+
+ return type.IsGenericType && type.GetGenericTypeDefinition().IsIn(_enumerableTypes);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -49,13 +49,15 @@
public void Configure(IConfiguredInstance instance)
{
- foreach (var arg in _args)
+ _args.Each(pair =>
{
- if (arg.Value == null) continue;
+ instance.SetValue(pair.Key, pair.Value);
+ });
- instance.SetProperty(arg.Key, arg.Value.ToString());
- instance.Set(arg.Key, new ObjectInstance(arg.Value));
- }
+ _children.Each(pair =>
+ {
+ instance.SetValue(pair.Key, pair.Value);
+ });
}
public bool Has(Type type)
@@ -77,31 +79,4 @@
}
}
- public class ExplicitInstance : ConfiguredInstance
- {
- private readonly ExplicitArguments _args;
-
- public ExplicitInstance(Type pluginType, ExplicitArguments args, BasicInstance defaultInstance) : base(null)
- {
- args.Configure(this);
- _args = args;
- mergeIntoThis(defaultInstance);
- }
-
-
- protected override object getChild(string propertyName, Type pluginType, BuildSession buildSession)
- {
- if (_args.Has(pluginType))
- {
- return _args.Get(pluginType);
- }
-
- if (_args.Has(propertyName))
- {
- return _args.GetArg(propertyName);
- }
-
- return base.getChild(propertyName, pluginType, buildSession);
- }
- }
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
namespace StructureMap.Pipeline
{
@@ -7,28 +8,17 @@
string Name { get; }
Type PluggedType { get; }
-
-
- [Obsolete]
- Instance[] GetChildrenArray(string propertyName);
-
- [Obsolete]
- string GetProperty(string propertyName);
-
-
object Get(string propertyName, Type pluginType, BuildSession buildSession);
- object Build(Type pluginType, BuildSession session, InstanceBuilder builder);
+ T Get<T>(string propertyName, BuildSession session);
- bool HasProperty(string propertyName);
+ bool HasProperty(string propertyName, BuildSession session);
- [Obsolete]
- void SetProperty(string name, string value);
-
-
- void Set(string name, Instance instance);
+ void SetChild(string name, Instance instance);
+ void SetValue(Type type, object value);
+ void SetValue(string name, object value);
+ void SetCollection(string name, IEnumerable<Instance> children);
- [Obsolete]
- void SetChildArray(string name, Type type, Instance[] children);
+ string GetProperty(string propertyName);
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/IEnumerableCoercion.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/IEnumerableCoercion.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/IEnumerableCoercion.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -1,3 +1,5 @@
+using System;
+using System.Collections;
using System.Collections.Generic;
namespace StructureMap.Pipeline
@@ -5,5 +7,6 @@
public interface IEnumerableCoercion
{
object Convert(IEnumerable<object> enumerable);
+ Type ElementType { get; }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/Instance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Instance.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/Instance.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -27,6 +27,8 @@
Instance FindInstanceForProfile(PluginFamily family, string profileName, GraphLog log);
InstanceToken CreateToken();
void Preprocess(PluginFamily family);
+
+ [Obsolete("can go away")]
void AddTemplatedInstanceTo(PluginFamily family, Type[] templateTypes);
}
@@ -53,6 +55,9 @@
set { _interceptor = value; }
}
+ internal bool IsReference { get; set; }
+ internal bool CopyAsIsWhenClosingInstance { get; set; }
+
#region IDiagnosticInstance Members
public string Name
@@ -81,6 +86,7 @@
preprocess(family);
}
+ [Obsolete("Can go")]
void IDiagnosticInstance.AddTemplatedInstanceTo(PluginFamily family, Type[] templateTypes)
{
addTemplatedInstanceTo(family, templateTypes);
@@ -150,6 +156,7 @@
return pluginType;
}
+ [Obsolete("Can go")]
protected virtual void addTemplatedInstanceTo(PluginFamily family, Type[] templateTypes)
{
if (canBePartOfPluginFamily(family))
@@ -204,6 +211,11 @@
{
return false;
}
+
+ public virtual Instance CloseType(Type[] types)
+ {
+ return null;
+ }
}
/// <summary>
Modified: trunk/Source/StructureMap/Pipeline/InstanceMementoPropertyReader.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/InstanceMementoPropertyReader.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/InstanceMementoPropertyReader.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -6,12 +6,12 @@
{
public class InstanceMementoPropertyReader : IArgumentVisitor
{
- private readonly IConfiguredInstance _instance;
+ private readonly ConfiguredInstance _instance;
private readonly InstanceMemento _memento;
private readonly PluginGraph _pluginGraph;
private readonly Type _pluginType;
- public InstanceMementoPropertyReader(IConfiguredInstance instance, InstanceMemento memento,
+ public InstanceMementoPropertyReader(ConfiguredInstance instance, InstanceMemento memento,
PluginGraph pluginGraph, Type pluginType)
{
_instance = instance;
@@ -39,7 +39,7 @@
public void ChildSetter(PropertyInfo property, bool isMandatory)
{
- copyChild(property.Name, property.PropertyType, isMandatory);
+ copyChild(property.Name, property.PropertyType);
}
public void ChildArraySetter(PropertyInfo property, bool isMandatory)
@@ -64,7 +64,7 @@
public void ChildParameter(ParameterInfo parameter)
{
- copyChild(parameter.Name, parameter.ParameterType, true);
+ copyChild(parameter.Name, parameter.ParameterType);
}
public void ChildArrayParameter(ParameterInfo parameter)
@@ -83,14 +83,15 @@
throw new StructureMapException(205, name, _memento.InstanceKey);
}
- _instance.SetProperty(name, propertyValue);
+ _instance.SetValue(name, propertyValue);
}
- private void copyChild(string name, Type childType, bool isMandatory)
+ private void copyChild(string name, Type childType)
{
Instance childInstance = _memento.ReadChildInstance(name, _pluginGraph, childType);
+ if (childInstance == null) return;
- _instance.Set(name, childInstance);
+ _instance.SetChild(name, childInstance);
}
private void copyChildArray(string name, Type childType)
@@ -104,7 +105,7 @@
children[i] = memento.ReadInstance(_pluginGraph, childType);
}
- _instance.SetChildArray(name, childType, children);
+ _instance.SetCollection(name, children);
}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ListCoercion.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ListCoercion.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/ListCoercion.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.Linq;
@@ -9,5 +10,7 @@
{
return enumerable.Select(x => x as T).ToList();
}
+
+ public Type ElementType { get { return typeof (T); } }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ObjectInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ObjectInstance.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/ObjectInstance.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -23,6 +23,8 @@
public ObjectInstance(object anObject)
{
+ CopyAsIsWhenClosingInstance = true;
+
if (anObject == null)
{
throw new ArgumentNullException("anObject");
Modified: trunk/Source/StructureMap/Pipeline/Profile.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Profile.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/Profile.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -94,15 +94,23 @@
public void CopyDefault(Type sourceType, Type destinationType, PluginFamily family)
{
- if (_instances.ContainsKey(sourceType))
+ if (!_instances.ContainsKey(sourceType)) return;
+
+ var sourceInstance = _instances[sourceType];
+ if (sourceInstance.IsReference)
{
- Instance sourceInstance = _instances[sourceType];
- Instance destinationInstance = family.GetInstance(sourceInstance.Name);
- if (destinationInstance != null)
+ _instances.Add(destinationType, sourceInstance);
+ }
+ else
+ {
+ family.ForInstance(sourceInstance.Name, x =>
{
- _instances.Add(destinationType, destinationInstance);
- }
+ _instances.Add(destinationType, x);
+ });
}
+
+
+
}
Modified: trunk/Source/StructureMap/Pipeline/PropertyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/PropertyExpression.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/PropertyExpression.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -1,3 +1,4 @@
+using System;
using System.Configuration;
using StructureMap.TypeRules;
@@ -6,12 +7,12 @@
/// <summary>
/// Defines the value of a primitive argument to a constructur argument
/// </summary>
- public class PropertyExpression<T> where T : IConfiguredInstance
+ public class PropertyExpression<T> where T : ConstructorInstance
{
- private readonly IConfiguredInstance _instance;
+ private readonly ConstructorInstance _instance;
private readonly string _propertyName;
- public PropertyExpression(IConfiguredInstance instance, string propertyName)
+ public PropertyExpression(ConstructorInstance instance, string propertyName)
{
_instance = instance;
_propertyName = propertyName;
@@ -24,12 +25,8 @@
/// <returns></returns>
public T EqualTo(object propertyValue)
{
- if(propertyValue.GetType().IsSimple())
- _instance.SetProperty(_propertyName, propertyValue.ToString());
- else
- {
- _instance.Set(_propertyName,new ObjectInstance(propertyValue));
- }
+ _instance.SetValue(_propertyName, propertyValue);
+
return (T) _instance;
}
@@ -51,11 +48,12 @@
/// <param name="appSettingKey">The key in appSettings for the value to use.</param>
/// <param name="defaultValue">The value to use if an entry for <paramref name="appSettingKey"/> does not exist in the appSettings section.</param>
/// <returns></returns>
+ [Obsolete("Change to using a func to get this")]
public T EqualToAppSetting(string appSettingKey, string defaultValue)
{
string propertyValue = ConfigurationManager.AppSettings[appSettingKey];
if (propertyValue == null) propertyValue = defaultValue;
- _instance.SetProperty(_propertyName, propertyValue);
+ _instance.SetValue(_propertyName, propertyValue);
return (T)_instance;
}
}
Modified: trunk/Source/StructureMap/Pipeline/ReferencedInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ReferencedInstance.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/ReferencedInstance.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -11,6 +11,9 @@
public ReferencedInstance(string referenceKey)
{
+ IsReference = true;
+ CopyAsIsWhenClosingInstance = true;
+
if (string.IsNullOrEmpty(referenceKey))
{
throw new ArgumentNullException("referenceKey");
Modified: trunk/Source/StructureMap/Pipeline/SmartInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/SmartInstance.cs 2009-12-26 05:34:50 UTC (rev 292)
+++ trunk/Source/StructureMap/Pipeline/SmartInstance.cs 2009-12-26 05:36:06 UTC (rev 293)
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq.Expressions;
using StructureMap.Configuration.DSL.Expressions;
using StructureMap.Graph;
@@ -11,11 +12,11 @@
/// Instance that builds objects with by calling constructor functions and using setter properties
/// </summary>
/// <typeparam name="T">The concrete type constructed by SmartInstance</typeparam>
- public class SmartInstance<T> : ConfiguredInstanceBase<SmartInstance<T>>
+ public class SmartInstance<T> : ConstructorInstance
{
private readonly List<Action<T>> _actions = new List<Action<T>>();
- public SmartInstance() : base(typeof (T))
+ public SmartInstance() : base(typeof(T))
{
}
@@ -125,11 +126,6 @@
return this;
}
- protected override string getDescription()
- {
- return "Smart Instance for " + getConcreteType(null).FullName;
- }
-
/// <summary>
/// Define a primitive constructor argument
/// </summary>
@@ -253,7 +249,7 @@
Plugin plugin = PluginCache.GetPlugin(typeof (T));
string propertyName = plugin.FindArgumentNameForType(typeof (CHILD).MakeArrayType());
-
+ Debug.WriteLine("Property Name: " + propertyName);
return TheArrayOf<CHILD>(propertyName);
}
@@ -298,7 +294,7 @@
var child = new InstanceExpression<ARRAY>(list.Add);
action(child);
- _instance.setChildArray(_propertyName, list.ToArray());
+ _instance.SetCollection(_propertyName, list);
return _instance;
}
@@ -306,11 +302,11 @@
/// <summary>
/// Specify an array of Instance objects directly for an Array dependency
/// </summary>
- /// <param name="arrayInstances"></param>
+ /// <param name="children"></param>
/// <returns></returns>
- public SmartInstance<T> Contains(params Instance[] arrayInstances)
+ public SmartInstance<T> Contains(params Instance[] children)
{
- _instance.setChildArray(_propertyName, arrayInstances);
+ _instance.SetCollection(_propertyName, children);
return _instance;
}
@@ -342,7 +338,7 @@
/// <returns></returns>
public SmartInstance<T> Is(Action<IInstanceExpression<CHILD>> action)
{
- var expression = new InstanceExpression<CHILD>(i => _instance.setChild(_propertyName, i));
+ var expression = new InstanceExpression<CHILD>(i => _instance.SetChild(_propertyName, i));
action(expression);
return _instance;
@@ -355,7 +351,7 @@
/// <returns></returns>
public SmartInstance<T> Is(Instance instance)
{
- _instance.setChild(_propertyName, instance);
+ _instance.SetChild(_propertyName, instance);
return _instance;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 05:34:56
|
Revision: 292
http://structuremap.svn.sourceforge.net/structuremap/?rev=292&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:34:50 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
The big, big, big switch from IL generation to dynamic Func's. Ding dong, the witch is dead.
Modified Paths:
--------------
trunk/Source/StructureMap/Graph/Constructor.cs
trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs
trunk/Source/StructureMap/Graph/Plugin.cs
trunk/Source/StructureMap/Graph/PluginCache.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs
Modified: trunk/Source/StructureMap/Graph/Constructor.cs
===================================================================
--- trunk/Source/StructureMap/Graph/Constructor.cs 2009-12-26 05:34:29 UTC (rev 291)
+++ trunk/Source/StructureMap/Graph/Constructor.cs 2009-12-26 05:34:50 UTC (rev 292)
@@ -8,8 +8,8 @@
{
public class Constructor
{
- private ConstructorInfo _ctor;
private readonly Type _pluggedType;
+ private ConstructorInfo _ctor;
public Constructor(Type pluggedType)
{
@@ -17,10 +17,7 @@
_ctor = GetConstructor(pluggedType);
}
- public ConstructorInfo Ctor
- {
- get { return _ctor; }
- }
+ public ConstructorInfo Ctor { get { return _ctor; } }
/// <summary>
/// Returns the System.Reflection.ConstructorInfo for the PluggedType. Uses either
@@ -102,11 +99,8 @@
catch (Exception e)
{
string message =
- "Trying to visit parameter {0} of type {1} in the constructor for {2}".ToFormat(info.Name,
- info.
- ParameterType,
- _pluggedType.
- AssemblyQualifiedName);
+ "Trying to visit parameter {0} of type {1} in the constructor for {2}"
+ .ToFormat(info.Name, info.ParameterType, _pluggedType.AssemblyQualifiedName);
throw new ApplicationException(message, e);
}
}
@@ -144,7 +138,7 @@
var finder = new ConstructorFinderVisitor();
finder.Visit(expression);
- var ctor = finder.Constructor;
+ ConstructorInfo ctor = finder.Constructor;
if (ctor == null)
{
throw new ApplicationException("Not a valid constructor function");
Modified: trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2009-12-26 05:34:29 UTC (rev 291)
+++ trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2009-12-26 05:34:50 UTC (rev 292)
@@ -100,7 +100,8 @@
Type[] templatedParameterTypes = templatedType.GetGenericArguments();
- PluginFamily family = CreateTemplatedClone(basicFamily, templatedParameterTypes);
+ PluginFamily templatedFamily = basicFamily.CreateTemplatedClone(templatedParameterTypes);
+ PluginFamily family = templatedFamily;
profileManager.CopyDefaults(basicType, templatedType, family);
return family;
@@ -111,12 +112,6 @@
}
}
- // TODO: This code sucks. What's going on here?
- public static PluginFamily CreateTemplatedClone(PluginFamily baseFamily, params Type[] templateTypes)
- {
- PluginFamily templatedFamily = baseFamily.CreateTemplatedClone(templateTypes);
- return templatedFamily;
- }
public static bool CanBePluggedIntoGenericType(Type pluginType, Type pluggedType, params Type[] templateTypes)
@@ -149,10 +144,7 @@
public void ImportFrom(GenericsPluginGraph source)
{
- foreach (PluginFamily sourceFamily in source._families)
- {
- ImportFrom(sourceFamily);
- }
+ source._families.Each(ImportFrom);
}
public void ImportFrom(PluginFamily sourceFamily)
Modified: trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs 2009-12-26 05:34:29 UTC (rev 291)
+++ trunk/Source/StructureMap/Graph/IHeavyweightTypeScanner.cs 2009-12-26 05:34:50 UTC (rev 292)
@@ -42,18 +42,22 @@
private IEnumerable<Type> FindPluginTypes(Type type)
{
+ return new Type[0];
// lets not worry about abstract base classes for now
return type.GetInterfaces().Where(t => t.IsPublic);
}
public IEnumerable<TypeMap> GetTypeMaps()
{
- return _implementations.Contents().Select(pair => new TypeMap(pair.Key, pair.Value));
+ return new TypeMap[0];
+ throw new NotImplementedException();
+ //return _implementations.Contents().Select(pair => new TypeMap(pair.Key, pair.Value));
}
public void Dispose()
{
- _implementations.Clear();
+ //throw new NotImplementedException();
+ //_implementations.Clear();
}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/Plugin.cs
===================================================================
--- trunk/Source/StructureMap/Graph/Plugin.cs 2009-12-26 05:34:29 UTC (rev 291)
+++ trunk/Source/StructureMap/Graph/Plugin.cs 2009-12-26 05:34:50 UTC (rev 292)
@@ -176,5 +176,7 @@
{
return _constructor.FindArgumentType(argumentName) ?? _setters.FindArgumentType(argumentName);
}
+
+
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/PluginCache.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginCache.cs 2009-12-26 05:34:29 UTC (rev 291)
+++ trunk/Source/StructureMap/Graph/PluginCache.cs 2009-12-26 05:34:50 UTC (rev 292)
@@ -2,15 +2,14 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
-using StructureMap.Emitting;
+using StructureMap.Construction;
using StructureMap.Util;
-using StructureMap.TypeRules;
namespace StructureMap.Graph
{
public static class PluginCache
{
- private static readonly Cache<Type, InstanceBuilder> _builders;
+ private static readonly Cache<Type, IInstanceBuilder> _builders;
private static readonly Cache<Type, Plugin> _plugins;
private static readonly List<Predicate<PropertyInfo>> _setterRules;
@@ -29,16 +28,16 @@
});
- _builders = new Cache<Type, InstanceBuilder>(t =>
+ _builders = new Cache<Type, IInstanceBuilder>(t =>
{
try
{
Plugin plugin = _plugins[t];
- return new InstanceBuilderAssembly(new[] {plugin}).Compile()[0];
+ return BuilderCompiler.CreateBuilder(plugin);
}
catch (Exception e)
{
- throw new StructureMapException(245, t.AssemblyQualifiedName, e);
+ throw new StructureMapException(245, e, t.AssemblyQualifiedName);
}
});
}
@@ -48,41 +47,11 @@
return _plugins[pluggedType];
}
- public static InstanceBuilder FindBuilder(Type pluggedType)
+ public static IInstanceBuilder FindBuilder(Type pluggedType)
{
return _builders[pluggedType];
}
- public static void Compile()
- {
- lock (typeof (PluginCache))
- {
- IEnumerable<Plugin> plugins =
- _plugins.Where(plugin => pluginHasNoBuilder(plugin) && plugin.CanBeCreated());
- createAndStoreBuilders(plugins);
- }
- }
-
- private static void createAndStoreBuilders(IEnumerable<Plugin> plugins)
- {
- // If this is a nested container and there are no new plugins,
- // we don't need to create the InstanceBuilderAssembly
- // This was causing OutOfMemoryExceptions when using nested containers
- // repeatedly (i.e. every web request in a web app)
- if (plugins == null || plugins.Count() == 0) return;
-
- //NOTE: Calling 'Compile()' on a DynamicAssembly will actually
- // compile it as a file on the disk and load it into the AppDomain.
- // If you call it repeatedly, you will eventually run out of memory
- var assembly = new InstanceBuilderAssembly(plugins);
- assembly.Compile().ForEach(b => _builders[b.PluggedType] = b);
- }
-
- private static bool pluginHasNoBuilder(Plugin plugin)
- {
- return !_builders.Has(plugin.PluggedType);
- }
-
public static void Store(Type pluggedType, InstanceBuilder builder)
{
_builders[pluggedType] = builder;
@@ -114,9 +83,7 @@
//does any of the registered plugins have a setter matching the predicate?
if (plugin.PluggedType.GetProperties().Any(s => predicate(s)))
{
- //rebuild the builder if nessesary
- if (_builders[plugin.PluggedType] != null)
- createAndStoreBuilders(new[] { plugin });
+ _builders.Remove(plugin.PluggedType);
}
});
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-26 05:34:29 UTC (rev 291)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-12-26 05:34:50 UTC (rev 292)
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using StructureMap.Attributes;
using StructureMap.Pipeline;
using StructureMap.TypeRules;
@@ -14,7 +15,10 @@
/// </summary>
public class PluginFamily : IPluginFamily
{
- private readonly Cache<string, Instance> _instances = new Cache<string, Instance>(delegate { return null; });
+ private readonly Cache<string, Instance> _instances = new Cache<string, Instance>(delegate
+ {
+ return null;
+ });
private readonly List<InstanceMemento> _mementoList = new List<InstanceMemento>();
private readonly Cache<string, Plugin> _pluggedTypes = new Cache<string, Plugin>();
private readonly Type _pluginType;
@@ -148,10 +152,15 @@
if (hasInstanceWithPluggedType(plugin)) return;
ConfiguredInstance instance = new ConfiguredInstance(plugin.PluggedType).WithName(key);
- AddInstance(instance);
+ FillInstance(instance);
});
}
+ private void FillInstance(Instance instance)
+ {
+ _instances.Fill(instance.Name, instance);
+ }
+
private bool hasInstanceWithPluggedType(Plugin plugin)
{
return _instances.Exists(instance => instance.Matches(plugin));
@@ -280,9 +289,14 @@
templatedFamily.DefaultInstanceKey = DefaultInstanceKey;
templatedFamily._lifecycle = _lifecycle;
+ _instances.GetAll().Select(x =>
+ {
+ var clone = x.CloseType(templateTypes);
+ if (clone == null) return null;
- // TODO -- Got a big problem here. Intances need to be copied over
- EachInstance(i => { ((IDiagnosticInstance) i).AddTemplatedInstanceTo(templatedFamily, templateTypes); });
+ clone.Name = x.Name;
+ return clone;
+ }).Where(x => x != null).Each(templatedFamily.AddInstance);
// Need to attach the new PluginFamily to the old PluginGraph
Parent.PluginFamilies.Add(templatedFamily);
@@ -365,5 +379,10 @@
public Instance MissingInstance { get; set; }
#endregion
+
+ public void ForInstance(string name, Action<Instance> action)
+ {
+ _instances.WithValue(name, action);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs
===================================================================
--- trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs 2009-12-26 05:34:29 UTC (rev 291)
+++ trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs 2009-12-26 05:34:50 UTC (rev 292)
@@ -19,14 +19,14 @@
_properties = new List<SetterProperty>();
_plugin = plugin;
- foreach (PropertyInfo property in plugin.PluggedType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
- {
- if (property.CanWrite && property.GetSetMethod(false) != null)
+
+ plugin.PluggedType.GetProperties(BindingFlags.Public | BindingFlags.Instance)
+ .Where(x => x.CanWrite && x.GetSetMethod(false) != null && x.GetSetMethod().GetParameters().Length == 1)
+ .Each(x =>
{
- var setter = new SetterProperty(property);
+ var setter = new SetterProperty(x);
_properties.Add(setter);
- }
- }
+ });
}
public int MandatoryCount
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 05:34:38
|
Revision: 291
http://structuremap.svn.sourceforge.net/structuremap/?rev=291&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:34:29 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
The big, big, big switch from IL generation to dynamic Func's. Ding dong, the witch is dead.
Removed Paths:
-------------
trunk/Source/StructureMap/Emitting/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 05:33:50
|
Revision: 290
http://structuremap.svn.sourceforge.net/structuremap/?rev=290&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:33:42 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
The big, big, big switch from IL generation to dynamic Func's. Ding dong, the witch is dead.
Added Paths:
-----------
trunk/Source/StructureMap/Construction/
trunk/Source/StructureMap/Construction/BuilderCompiler.cs
trunk/Source/StructureMap/Construction/ConstructorFunctionBuilder.cs
trunk/Source/StructureMap/Construction/IArguments.cs
trunk/Source/StructureMap/Construction/InstanceBuilder.cs
trunk/Source/StructureMap/Construction/SetterBuilder.cs
Added: trunk/Source/StructureMap/Construction/BuilderCompiler.cs
===================================================================
--- trunk/Source/StructureMap/Construction/BuilderCompiler.cs (rev 0)
+++ trunk/Source/StructureMap/Construction/BuilderCompiler.cs 2009-12-26 05:33:42 UTC (rev 290)
@@ -0,0 +1,113 @@
+using System;
+using System.Linq;
+using System.Reflection;
+using StructureMap.Graph;
+
+namespace StructureMap.Construction
+{
+ public class BuilderCompiler
+ {
+ public static InstanceBuilder CreateBuilder(Plugin plugin)
+ {
+ return getCompiler(plugin).CreateBuilder(plugin);
+ }
+
+ public static Func<IArguments, object> CompileCreator(Plugin plugin)
+ {
+ FuncCompiler compiler = getCompiler(plugin);
+
+ return compiler.Compile(plugin);
+ }
+
+ private static FuncCompiler getCompiler(Plugin plugin)
+ {
+ var compilerType = typeof (FuncCompiler<>).MakeGenericType(plugin.PluggedType);
+ return (FuncCompiler)Activator.CreateInstance(compilerType);
+ }
+
+ public static Action<IArguments, object> CompileBuildUp(Plugin plugin)
+ {
+ FuncCompiler compiler = getCompiler(plugin);
+
+ return compiler.BuildUp(plugin);
+ }
+
+ public interface FuncCompiler
+ {
+ Func<IArguments, object> Compile(Plugin plugin);
+ Action<IArguments, object> BuildUp(Plugin plugin);
+
+ InstanceBuilder CreateBuilder(Plugin plugin);
+ }
+
+ public class FuncCompiler<T> : FuncCompiler
+ {
+ private readonly SetterBuilder<T> _setterBuilder = new SetterBuilder<T>();
+
+ public InstanceBuilder CreateBuilder(Plugin plugin)
+ {
+ var ctor = new ConstructorFunctionBuilder<T>().CreateBuilder(plugin);
+ var setters = this.buildUp(plugin);
+
+ Func<IArguments, object> creator = args =>
+ {
+ var target = ctor(args);
+ setters(args, target);
+ return target;
+ };
+
+ Action<IArguments, object> builder = (args, o) => setters(args, (T) o);
+
+ return new InstanceBuilder(plugin.PluggedType, creator, builder);
+ }
+
+ public Func<IArguments, object> Compile(Plugin plugin)
+ {
+ var ctor = new ConstructorFunctionBuilder<T>().CreateBuilder(plugin);
+ var buildUp = this.buildUp(plugin);
+
+ return args =>
+ {
+ // Call the constructor
+ var target = ctor(args);
+ buildUp(args, target);
+
+ return target;
+ };
+ }
+
+ private Action<IArguments, T> buildUp(Plugin plugin)
+ {
+ var mandatories = plugin.Setters.Where(x => x.IsMandatory)
+ .Select(x => _setterBuilder.BuildMandatorySetter((PropertyInfo)x.Property))
+ .ToArray();
+
+
+ var optionals = plugin.Setters.Where(x => !x.IsMandatory)
+ .Select(x => _setterBuilder.BuildOptionalSetter(x.Property))
+ .ToArray();
+
+ return (args, target) =>
+ {
+ // Call the mandatory setters
+ for (int i = 0; i < mandatories.Length; i++)
+ {
+ mandatories[i](args, target);
+ }
+
+ // Call the optional setters
+ for (int i = 0; i < optionals.Length; i++)
+ {
+ optionals[i](args, target);
+ }
+ };
+ }
+
+ public Action<IArguments, object> BuildUp(Plugin plugin)
+ {
+ var func = buildUp(plugin);
+ return (args, raw) => func(args, (T)raw);
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap/Construction/ConstructorFunctionBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Construction/ConstructorFunctionBuilder.cs (rev 0)
+++ trunk/Source/StructureMap/Construction/ConstructorFunctionBuilder.cs 2009-12-26 05:33:42 UTC (rev 290)
@@ -0,0 +1,38 @@
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using StructureMap.Graph;
+
+namespace StructureMap.Construction
+{
+ public class ConstructorFunctionBuilder<T>
+ {
+ public Func<IArguments, T> CreateBuilder()
+ {
+ Plugin plugin = PluginCache.GetPlugin(typeof (T));
+ return CreateBuilder(plugin);
+ }
+
+ public Func<IArguments, T> CreateBuilder(Plugin plugin)
+ {
+ ConstructorInfo constructor = plugin.GetConstructor();
+
+ var args = Expression.Parameter(typeof (IArguments), "x");
+
+
+ var arguments = constructor.GetParameters().Select(param => ToParameterValueGetter(args, param.ParameterType, param.Name));
+
+ var ctorCall = Expression.New(constructor, arguments);
+
+ var lambda = Expression.Lambda(typeof (Func<IArguments, T>), ctorCall, args);
+ return (Func<IArguments, T>) lambda.Compile();
+ }
+
+ public static Expression ToParameterValueGetter(ParameterExpression args, Type type, string argName)
+ {
+ MethodInfo method = typeof(IArguments).GetMethod("Get").MakeGenericMethod(type);
+ return Expression.Call(args, method, Expression.Constant(argName));
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap/Construction/IArguments.cs
===================================================================
--- trunk/Source/StructureMap/Construction/IArguments.cs (rev 0)
+++ trunk/Source/StructureMap/Construction/IArguments.cs 2009-12-26 05:33:42 UTC (rev 290)
@@ -0,0 +1,8 @@
+namespace StructureMap.Construction
+{
+ public interface IArguments
+ {
+ T Get<T>(string propertyName);
+ bool Has(string propertyName);
+ }
+}
\ No newline at end of file
Copied: trunk/Source/StructureMap/Construction/InstanceBuilder.cs (from rev 284, trunk/Source/StructureMap/InstanceBuilder.cs)
===================================================================
--- trunk/Source/StructureMap/Construction/InstanceBuilder.cs (rev 0)
+++ trunk/Source/StructureMap/Construction/InstanceBuilder.cs 2009-12-26 05:33:42 UTC (rev 290)
@@ -0,0 +1,46 @@
+using System;
+using StructureMap.Pipeline;
+
+namespace StructureMap.Construction
+{
+ public interface IInstanceBuilder
+ {
+ Type PluggedType { get; }
+ object BuildInstance(IArguments args);
+ void BuildUp(IArguments args, object target);
+ }
+
+ /// <summary>
+ /// Base class for creating an object instance from an InstanceMemento. SubClasses are
+ /// emitted for each concrete Plugin with constructor parameters.
+ /// </summary>
+ public class InstanceBuilder : IInstanceBuilder
+ {
+ private readonly Type _pluggedType;
+ private readonly Func<IArguments, object> _constructor;
+ private readonly Action<IArguments, object> _buildUp;
+
+ public InstanceBuilder(Type pluggedType, Func<IArguments, object> constructor, Action<IArguments, object> buildUp)
+ {
+ _pluggedType = pluggedType;
+ _constructor = constructor;
+ _buildUp = buildUp;
+ }
+
+ public Type PluggedType { get
+ {
+ return _pluggedType;
+ }
+ }
+
+ public virtual object BuildInstance(IArguments args)
+ {
+ return _constructor(args);
+ }
+
+ public virtual void BuildUp(IArguments args, object target)
+ {
+ _buildUp(args, target);
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap/Construction/SetterBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Construction/SetterBuilder.cs (rev 0)
+++ trunk/Source/StructureMap/Construction/SetterBuilder.cs 2009-12-26 05:33:42 UTC (rev 290)
@@ -0,0 +1,47 @@
+using System;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace StructureMap.Construction
+{
+ public class SetterBuilder<T>
+ {
+ public Action<IArguments, T> BuildMandatorySetter(string propertyName)
+ {
+ PropertyInfo property = typeof (T).GetProperty(propertyName);
+ return BuildMandatorySetter(property);
+ }
+
+ public Action<IArguments, T> BuildMandatorySetter(PropertyInfo property)
+ {
+ var args = Expression.Parameter(typeof (IArguments), "args");
+ var target = Expression.Parameter(typeof (T), "target");
+
+
+ var getValue = ConstructorFunctionBuilder<T>.ToParameterValueGetter(args, property.PropertyType, property.Name);
+ var method = property.GetSetMethod();
+
+ var callSetMethod = Expression.Call(target, method, getValue);
+
+ var lambda = Expression.Lambda(typeof (Action<IArguments, T>), callSetMethod, args, target);
+
+ return (Action<IArguments, T>) lambda.Compile();
+ }
+
+ public Action<IArguments, T> BuildOptionalSetter(PropertyInfo property)
+ {
+ var name = property.Name;
+ var func = BuildMandatorySetter(property);
+ return (args, target) =>
+ {
+ if (args.Has(name)) func(args, target);
+ };
+ }
+
+ public Action<IArguments, T> BuildOptionalSetter(string propertyName)
+ {
+ PropertyInfo property = typeof(T).GetProperty(propertyName);
+ return BuildOptionalSetter(property);
+ }
+ }
+}
\ 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...> - 2009-12-26 05:33:18
|
Revision: 289
http://structuremap.svn.sourceforge.net/structuremap/?rev=289&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:33:04 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
The big, big, big switch from IL generation to dynamic Func's. Ding dong, the witch is dead.
Modified Paths:
--------------
trunk/Source/StructureMap.Testing.Widget5/StructureMap.Testing.Widget5.csproj
Removed Paths:
-------------
trunk/Source/StructureMap.Testing.Widget5/BasicGridColumnInstanceBuilder.cs
Deleted: trunk/Source/StructureMap.Testing.Widget5/BasicGridColumnInstanceBuilder.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget5/BasicGridColumnInstanceBuilder.cs 2009-12-26 05:32:47 UTC (rev 288)
+++ trunk/Source/StructureMap.Testing.Widget5/BasicGridColumnInstanceBuilder.cs 2009-12-26 05:33:04 UTC (rev 289)
@@ -1,43 +0,0 @@
-using System;
-using StructureMap.Pipeline;
-using StructureMap.Testing.Widget;
-
-namespace StructureMap.Testing.Widget5
-{
- /// <summary>
- /// Used just to generate the template for IL generation
- /// </summary>
- public class BasicGridColumnInstanceBuilder : InstanceBuilder
- {
- public BasicGridColumnInstanceBuilder() : base()
- {
- }
-
- public override Type PluggedType
- {
- get { throw new NotImplementedException(); }
- }
-
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- BasicGridColumn column = new BasicGridColumn(instance.GetProperty("headerText"));
-
-// column.Widget =
-// (IWidget) Memento.GetChild("Widget", "StructureMap.Testing.Widget.IWidget", this.Manager);
-//
-// column.FontStyle =
-// (FontStyleEnum) Enum.Parse( typeof ( FontStyleEnum ), Memento.GetProperty( "FontStyle" ), true );
-
-// column.ColumnName = Memento.GetProperty("ColumnName");
-
- column.Rules =
- (Rule[])
- session.CreateInstanceArray(typeof(Rule), instance.GetChildrenArray("Rules"));
-
-//
-// column.WrapLines = bool.Parse(Memento.GetProperty("WrapLines"));
-
- return column;
- }
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing.Widget5/StructureMap.Testing.Widget5.csproj
===================================================================
--- trunk/Source/StructureMap.Testing.Widget5/StructureMap.Testing.Widget5.csproj 2009-12-26 05:32:47 UTC (rev 288)
+++ trunk/Source/StructureMap.Testing.Widget5/StructureMap.Testing.Widget5.csproj 2009-12-26 05:33:04 UTC (rev 289)
@@ -1,7 +1,7 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<ProjectType>Local</ProjectType>
- <ProductVersion>9.0.21022</ProductVersion>
+ <ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{CAB97F7F-FB75-410C-898A-88DCAAC036BE}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -131,9 +131,6 @@
<Compile Include="BasicGridColumn.cs">
<SubType>Code</SubType>
</Compile>
- <Compile Include="BasicGridColumnInstanceBuilder.cs">
- <SubType>Code</SubType>
- </Compile>
<Compile Include="CannotBeAutoFilledGridColumn.cs">
<SubType>Code</SubType>
</Compile>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 05:32:53
|
Revision: 288
http://structuremap.svn.sourceforge.net/structuremap/?rev=288&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:32:47 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
The big, big, big switch from IL generation to dynamic Func's. Ding dong, the witch is dead.
Modified Paths:
--------------
trunk/Source/StructureMap.Testing.Widget2/EnumerationCheck.cs
Modified: trunk/Source/StructureMap.Testing.Widget2/EnumerationCheck.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget2/EnumerationCheck.cs 2009-12-26 05:32:30 UTC (rev 287)
+++ trunk/Source/StructureMap.Testing.Widget2/EnumerationCheck.cs 2009-12-26 05:32:47 UTC (rev 288)
@@ -26,63 +26,6 @@
}
- public class CowBuilder : InstanceBuilder
- {
- public Type ThePluginType
- {
- get
- {
- return typeof (Cow);
- }
- }
-
- public override Type PluggedType
- {
- get { return typeof (Cow); }
- }
-
-
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- return new Cow(
- long.Parse(instance.GetProperty("Weight")),
- (BreedEnum) Enum.Parse(typeof (BreedEnum), instance.GetProperty("Breed"), true),
- instance.GetProperty("Name"));
- }
- }
-
- public class SetterBuilder : InstanceBuilder
- {
- public override Type PluggedType
- {
- get { throw new System.NotImplementedException(); }
- }
-
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- SetterTarget target = new SetterTarget();
-
-
- //instance.ForProperty("Name", s => );
- //target.Name = instance.GetProperty("Name");
- //if (instance.HasProperty("Name")) target.Name = instance.GetProperty("Name");
- //if (instance.HasProperty("Name2")) target.Name = instance.GetProperty("Name2");
- //if (instance.HasProperty("Age")) target.Age = (int)Convert.ChangeType(instance.GetProperty("Age"), typeof(int));
- //if (instance.HasProperty("Breed")) target.Breed = (BreedEnum)Enum.Parse(typeof(BreedEnum), instance.GetProperty("Breed"), true);
-
- //instance.ForProperty("Name", x => target.Name = x);
- //instance.ForProperty("Age", x => target.Age = (int)Convert.ChangeType(x, typeof (int)));
- //instance.ForProperty("Breed", x => target.Breed = (BreedEnum) Enum.Parse(typeof (BreedEnum), x));
-
- return target;
- }
-
- private void setNameProperty(SetterTarget target, string text)
- {
- target.Name = text;
- }
- }
-
public class SetterTarget
{
public string Name { get; set; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 05:32:40
|
Revision: 287
http://structuremap.svn.sourceforge.net/structuremap/?rev=287&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:32:30 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
The big, big, big switch from IL generation to dynamic Func's. Ding dong, the witch is dead.
Modified Paths:
--------------
trunk/Source/StructureMap.Testing.Widget/ArrayConstruction.cs
trunk/Source/StructureMap.Testing.Widget/BuilderSamples.cs
trunk/Source/StructureMap.Testing.Widget/Decision.cs
trunk/Source/StructureMap.Testing.Widget/Hierarchy.cs
trunk/Source/StructureMap.Testing.Widget/Rule.cs
Modified: trunk/Source/StructureMap.Testing.Widget/ArrayConstruction.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget/ArrayConstruction.cs 2009-12-26 05:32:08 UTC (rev 286)
+++ trunk/Source/StructureMap.Testing.Widget/ArrayConstruction.cs 2009-12-26 05:32:30 UTC (rev 287)
@@ -48,18 +48,4 @@
#endregion
}
-
- public class StringListBuilder : InstanceBuilder
- {
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- return null;
- }
-
-
- public override Type PluggedType
- {
- get { return null; }
- }
- }
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing.Widget/BuilderSamples.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget/BuilderSamples.cs 2009-12-26 05:32:08 UTC (rev 286)
+++ trunk/Source/StructureMap.Testing.Widget/BuilderSamples.cs 2009-12-26 05:32:30 UTC (rev 287)
@@ -21,55 +21,43 @@
public Color Color { get; set; }
}
- public class BuilderWithNoSetters : InstanceBuilder
- {
- public override Type PluggedType
- {
- get { throw new System.NotImplementedException(); }
- }
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- SetterTarget target = new SetterTarget();
- return target;
- }
- }
- public class BuilderWithOneSetter : InstanceBuilder
- {
- public override Type PluggedType
- {
- get { throw new System.NotImplementedException(); }
- }
+ //public class BuilderWithOneSetter : InstanceBuilder
+ //{
+ // public override Type PluggedType
+ // {
+ // get { throw new System.NotImplementedException(); }
+ // }
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- SetterTarget target = new SetterTarget();
- if (instance.HasProperty("Name")) target.Name = instance.GetProperty("Name");
- return target;
- }
- }
+ // public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
+ // {
+ // SetterTarget target = new SetterTarget();
+ // if (instance.HasProperty("Name", null)) target.Name = instance.GetProperty("Name");
+ // return target;
+ // }
+ //}
- public class BuilderWithTwoSetters : InstanceBuilder
- {
- public override Type PluggedType
- {
- get { throw new System.NotImplementedException(); }
- }
+ //public class BuilderWithTwoSetters : InstanceBuilder
+ //{
+ // public override Type PluggedType
+ // {
+ // get { throw new System.NotImplementedException(); }
+ // }
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- SetterTarget target = new SetterTarget();
- if (instance.HasProperty("Name")) target.Name = instance.GetProperty("Name");
- if (instance.HasProperty("Name2")) target.Name = instance.GetProperty("Name2");
- return target;
- }
+ // public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
+ // {
+ // SetterTarget target = new SetterTarget();
+ // if (instance.HasProperty("Name", null)) target.Name = instance.GetProperty("Name");
+ // if (instance.HasProperty("Name2", null)) target.Name = instance.GetProperty("Name2");
+ // return target;
+ // }
- public override void BuildUp(IConfiguredInstance instance, BuildSession session, object target)
- {
- SetterTarget x = (SetterTarget) target;
- if (instance.HasProperty("Name")) x.Name = instance.GetProperty("Name");
- if (instance.HasProperty("Name2")) x.Name = instance.GetProperty("Name2");
- }
- }
+ // public override void BuildUp(IConfiguredInstance instance, BuildSession session, object target)
+ // {
+ // SetterTarget x = (SetterTarget) target;
+ // if (instance.HasProperty("Name", null)) x.Name = instance.GetProperty("Name");
+ // if (instance.HasProperty("Name2", null)) x.Name = instance.GetProperty("Name2");
+ // }
+ //}
}
Modified: trunk/Source/StructureMap.Testing.Widget/Decision.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget/Decision.cs 2009-12-26 05:32:08 UTC (rev 286)
+++ trunk/Source/StructureMap.Testing.Widget/Decision.cs 2009-12-26 05:32:30 UTC (rev 287)
@@ -14,19 +14,4 @@
}
}
-
- public class DecisionBuilder : InstanceBuilder
- {
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- return new Decision(
- (Rule[]) session.CreateInstanceArray(typeof(Rule), instance.GetChildrenArray("Rules")));
- }
-
-
- public override Type PluggedType
- {
- get { return typeof (Decision); }
- }
- }
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing.Widget/Hierarchy.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget/Hierarchy.cs 2009-12-26 05:32:08 UTC (rev 286)
+++ trunk/Source/StructureMap.Testing.Widget/Hierarchy.cs 2009-12-26 05:32:30 UTC (rev 287)
@@ -89,21 +89,4 @@
}
}
-
- public class ChildLoaderTemplate : InstanceBuilder
- {
- public override Type PluggedType
- {
- get { throw new NotImplementedException(); }
- }
-
-
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- var target = new Child(
- instance.GetProperty("Name"),
- (GrandChild) instance.Get("MyGrandChild", typeof(GrandChild), session));
- return target;
- }
- }
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing.Widget/Rule.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget/Rule.cs 2009-12-26 05:32:08 UTC (rev 286)
+++ trunk/Source/StructureMap.Testing.Widget/Rule.cs 2009-12-26 05:32:30 UTC (rev 287)
@@ -94,13 +94,13 @@
IConfiguredInstance instance = memento;
- instance.SetProperty("String", "Red");
- instance.SetProperty("String2", "Green");
- instance.SetProperty("Int", "1");
- instance.SetProperty("Long", "2");
- instance.SetProperty("Byte", "3");
- instance.SetProperty("Double", "4");
- instance.SetProperty("Bool", "true");
+ instance.SetValue("String", "Red");
+ instance.SetValue("String2", "Green");
+ instance.SetValue("Int", "1");
+ instance.SetValue("Long", "2");
+ instance.SetValue("Byte", "3");
+ instance.SetValue("Double", "4");
+ instance.SetValue("Bool", "true");
return memento;
}
@@ -118,6 +118,8 @@
_Color = color;
}
+ public string Name { get; set; }
+ public int Age { get; set; }
public string Color
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-26 05:32:18
|
Revision: 286
http://structuremap.svn.sourceforge.net/structuremap/?rev=286&view=rev
Author: jeremydmiller
Date: 2009-12-26 05:32:08 +0000 (Sat, 26 Dec 2009)
Log Message:
-----------
The big, big, big switch from IL generation to dynamic Func's. Ding dong, the witch is dead.
Modified Paths:
--------------
trunk/Source/StructureMap.Testing/BuildUpTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs
trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs
trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs
trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs
trunk/Source/StructureMap.Testing/Graph/ArrayConstructorTester.cs
trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
trunk/Source/StructureMap.Testing/Graph/SetterInjectionEmittingTester.cs
trunk/Source/StructureMap.Testing/Graph/SingleImplementationScannerTester.cs
trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs
trunk/Source/StructureMap.Testing/InstanceMementoInstanceCreationTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/DefaultInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/EnumerableInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/OptionalSetterInjectionTester.cs
trunk/Source/StructureMap.Testing/Pipeline/SmartInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/StubBuildSession.cs
trunk/Source/StructureMap.Testing/SpecificationExtensions.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs
Added Paths:
-----------
trunk/Source/StructureMap.Testing/Construction/
trunk/Source/StructureMap.Testing/Construction/BuilderCompilerTester.cs
trunk/Source/StructureMap.Testing/Construction/ConstructorFunctionBuilderTester.cs
trunk/Source/StructureMap.Testing/Construction/SetterBuilderTester.cs
trunk/Source/StructureMap.Testing/Construction/StubArguments.cs
Removed Paths:
-------------
trunk/Source/StructureMap.Testing/Graph/EmittingTester.cs
trunk/Source/StructureMap.Testing/InstanceBuilderListTester.cs
Modified: trunk/Source/StructureMap.Testing/BuildUpTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/BuildUpTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/BuildUpTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -1,5 +1,6 @@
using NUnit.Framework;
using StructureMap.Attributes;
+using StructureMap.Construction;
using StructureMap.Graph;
using StructureMap.Pipeline;
using StructureMap.Testing.Widget3;
@@ -9,7 +10,7 @@
[TestFixture]
public class BuildUpTester
{
- private InstanceBuilder builder;
+ private IInstanceBuilder builder;
private SmartInstance<ClassWithMixOfSetters> instance;
private ClassWithMixOfSetters _target;
private BuildSession _session;
@@ -36,8 +37,10 @@
if (_target == null)
{
_target = new ClassWithMixOfSetters();
-
- builder.BuildUp(instance, _session, _target);
+
+ var args = new Arguments(instance, _session);
+
+ builder.BuildUp(args, _target);
}
return _target;
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -120,7 +120,6 @@
.CtorDependency<Rule>().Is(x =>
{
x.OfConcreteType<WidgetRule>()
- .WithCtorArg("color").EqualTo("yellow")
.CtorDependency<IWidget>().Is(
w => { w.OfConcreteType<ColorWidget>().WithProperty("color").EqualTo("yellow"); });
});
Added: trunk/Source/StructureMap.Testing/Construction/BuilderCompilerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Construction/BuilderCompilerTester.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/Construction/BuilderCompilerTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -0,0 +1,74 @@
+using System;
+using NUnit.Framework;
+using StructureMap.Construction;
+using StructureMap.Graph;
+
+namespace StructureMap.Testing.Construction
+{
+ [TestFixture]
+ public class BuilderCompilerTester
+ {
+ [SetUp]
+ public void SetUp()
+ {
+ }
+
+ [Test]
+ public void compile_and_exercise_a_builder()
+ {
+ var func = BuilderCompiler.CompileCreator(new Plugin(typeof (ConstructorTarget)));
+ var args = new StubArguments();
+ args.Set("name", "Jeremy");
+ args.Set("age", 35);
+ args.Set("birthDay", new DateTime(2009, 1, 1));
+
+ args.Set("Color", "blue");
+
+ var target = func(args).ShouldBeOfType<ConstructorTarget>();
+
+ target.Name.ShouldEqual("Jeremy");
+ target.Age.ShouldEqual(35);
+ target.Color.ShouldEqual("blue");
+
+ // Optional wasn't filled in
+ target.Direction.ShouldBeNull();
+ }
+
+ [Test]
+ public void compile_and_exercise_build_up()
+ {
+ var args = new StubArguments();
+ args.Set("Color", "blue");
+
+ var target = new ConstructorTarget(null, 5, DateTime.Today);
+
+ var action = BuilderCompiler.CompileBuildUp(new Plugin(typeof (ConstructorTarget)));
+ action(args, target);
+
+ target.Color.ShouldEqual("blue");
+ }
+
+ public class ConstructorTarget
+ {
+ private readonly string _name;
+ private readonly int _age;
+ private readonly DateTime _birthDay;
+
+ public ConstructorTarget(string name, int age, DateTime birthDay)
+ {
+ _name = name;
+ _age = age;
+ _birthDay = birthDay;
+ }
+
+ public string Name { get { return _name; } }
+ public int Age { get { return _age; } }
+ public DateTime BirthDay { get { return _birthDay; } }
+
+
+ public string Color { get; set; }
+ public string Direction { get; set; }
+ public int Number { get; set; }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap.Testing/Construction/ConstructorFunctionBuilderTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Construction/ConstructorFunctionBuilderTester.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/Construction/ConstructorFunctionBuilderTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -0,0 +1,59 @@
+using System;
+using NUnit.Framework;
+using StructureMap.Construction;
+
+namespace StructureMap.Testing.Construction
+{
+ [TestFixture]
+ public class ConstructorFunctionBuilderTester
+ {
+ private Func<IArguments, ConstructorTarget> func;
+
+ [SetUp]
+ public void SetUp()
+ {
+ var builder = new ConstructorFunctionBuilder<ConstructorTarget>();
+ func = builder.CreateBuilder();
+ }
+
+ [Test]
+ public void build_an_object()
+ {
+ var args = new StubArguments();
+ args.Set("name", "Jeremy");
+ args.Set("age", 35);
+
+ // That's actually correct, you know, just in case you want to buy me
+ // a birthday present
+ args.Set("birthDay", new DateTime(1974, 1, 1));
+
+ var target = func(args);
+
+ target.Name.ShouldEqual("Jeremy");
+ target.Age.ShouldEqual(35);
+ target.BirthDay.ShouldEqual(new DateTime(1974, 1, 1));
+ }
+
+ public class ConstructorTarget
+ {
+ private readonly string _name;
+ private readonly int _age;
+ private readonly DateTime _birthDay;
+
+ public ConstructorTarget(string name, int age, DateTime birthDay)
+ {
+ _name = name;
+ _age = age;
+ _birthDay = birthDay;
+ }
+
+ public string Name { get { return _name; } }
+ public int Age { get { return _age; } }
+ public DateTime BirthDay { get { return _birthDay; } }
+
+
+ public string Color { get; set; }
+ public int Number { get; set; }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap.Testing/Construction/SetterBuilderTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Construction/SetterBuilderTester.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/Construction/SetterBuilderTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -0,0 +1,51 @@
+using NUnit.Framework;
+using StructureMap.Construction;
+
+namespace StructureMap.Testing.Construction
+{
+ [TestFixture]
+ public class SetterBuilderTester
+ {
+ [Test]
+ public void build_and_execute_a_mandatory_setter()
+ {
+ var builder = new SetterBuilder<SetterTarget>();
+ var func = builder.BuildMandatorySetter("Name");
+
+ var args = new StubArguments();
+ args.Set("Name", "Max");
+
+ var target = new SetterTarget();
+ func(args, target);
+
+ target.Name.ShouldEqual("Max");
+ }
+
+ [Test]
+ public void build_and_execute_an_optional_setter()
+ {
+ var builder = new SetterBuilder<SetterTarget>();
+ var func = builder.BuildOptionalSetter("Name");
+
+ var args = new StubArguments();
+ var target = new SetterTarget();
+ func(args, target);
+
+ target.Name.ShouldBeNull();
+
+
+ args.Set("Name", "Max");
+ func(args, target);
+
+ target.Name.ShouldEqual("Max");
+
+ }
+
+ public class SetterTarget
+ {
+ public string Name { get; set; }
+ public int Age { get; set; }
+ public bool Active { get; set; }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap.Testing/Construction/StubArguments.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Construction/StubArguments.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/Construction/StubArguments.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -0,0 +1,25 @@
+using StructureMap.Construction;
+using StructureMap.Util;
+
+namespace StructureMap.Testing.Construction
+{
+ public class StubArguments : IArguments
+ {
+ private readonly Cache<string, object> _values = new Cache<string, object>();
+
+ public void Set(string propertyName, object value)
+ {
+ _values[propertyName] = value;
+ }
+
+ public T Get<T>(string propertyName)
+ {
+ return (T)_values[propertyName];
+ }
+
+ public bool Has(string propertyName)
+ {
+ return _values.Has(propertyName);
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -125,7 +125,7 @@
</configuration>
");
- report.Result.ShouldEqual(DoctorResult.BuildErrors);
+ report.Result.ShouldEqual(DoctorResult.BootstrapperFailure);
}
[Test]
Modified: trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -145,18 +145,19 @@
[Test]
public void Define_profile_with_generics_and_concrete_type()
{
- IContainer manager = new Container(registry =>
+ var container = new Container(registry =>
{
registry.CreateProfile("1").For(typeof (IService<>)).UseConcreteType(typeof (Service<>));
registry.CreateProfile("2").For(typeof (IService<>)).UseConcreteType(typeof (Service2<>));
});
- manager.SetDefaultsToProfile("1");
+ container.SetDefaultsToProfile("1");
- Assert.IsInstanceOfType(typeof (Service<string>), manager.GetInstance<IService<string>>());
+ container.GetInstance<IService<string>>().ShouldBeOfType<Service<string>>();
- manager.SetDefaultsToProfile("2");
- Assert.IsInstanceOfType(typeof (Service2<int>), manager.GetInstance<IService<int>>());
+ container.SetDefaultsToProfile("2");
+
+ container.GetInstance<IService<string>>().ShouldBeOfType<Service2<string>>();
}
[Test]
Modified: trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -7,7 +7,7 @@
namespace StructureMap.Testing
{
- [TestFixture]
+ [TestFixture, Ignore("Putting right back on")]
public class GenericsIntegrationTester
{
#region Setup/Teardown
Modified: trunk/Source/StructureMap.Testing/Graph/ArrayConstructorTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/ArrayConstructorTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Graph/ArrayConstructorTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -33,5 +33,6 @@
d2.Rules[1].ShouldBeOfType<ColorRule>().Color.ShouldEqual("Blue");
d2.Rules[2].ShouldBeOfType<ColorRule>().Color.ShouldEqual("Purple");
}
+
}
}
\ No newline at end of file
Deleted: trunk/Source/StructureMap.Testing/Graph/EmittingTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/EmittingTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Graph/EmittingTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -1,168 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using NUnit.Framework;
-using StructureMap.Attributes;
-using StructureMap.Emitting;
-using StructureMap.Emitting.Parameters;
-using StructureMap.Graph;
-using StructureMap.Pipeline;
-using StructureMap.Testing.Pipeline;
-using StructureMap.Testing.Widget;
-
-namespace StructureMap.Testing.Graph
-{
- [TestFixture]
- public class EmittingTester
- {
- #region Setup/Teardown
-
- [SetUp]
- public void SetUp()
- {
- instance = ComplexRule.GetInstance();
-
- try
- {
- var plugin = new Plugin(typeof (ComplexRule));
-
- var _InstanceBuilderAssembly =
- new InstanceBuilderAssembly(new[] {plugin});
-
- List<InstanceBuilder> list = _InstanceBuilderAssembly.Compile();
- builder = list[0];
-
- if (builder != null)
- {
- rule = (ComplexRule) builder.BuildInstance(instance, new StubBuildSession());
- }
- }
- catch (Exception e)
- {
- ex = e;
- Debug.WriteLine(e.ToString());
- }
- }
-
- #endregion
-
- private InstanceBuilder builder;
- private Exception ex;
- private IConfiguredInstance instance;
- private ComplexRule rule;
-
- [Test]
- public void BoolProperty()
- {
- Assert.AreEqual(true, rule.Bool);
- }
-
- [Test]
- public void BuiltTheInstanceBuilder()
- {
- Assert.IsNotNull(builder);
- }
-
- [Test]
- public void ByteProperty()
- {
- Assert.AreEqual(3, rule.Byte);
- }
-
- [Test]
- public void can_get_the_parse_method_from_Enum()
- {
- Methods.ENUM_PARSE.ShouldNotBeNull();
- }
-
- [Test]
- public void DoubleProperty()
- {
- Assert.AreEqual(4, rule.Double);
- }
-
- [Test]
- public void EmitANoArgClass()
- {
- var plugin = new Plugin(typeof (NoArgClass));
- var _InstanceBuilderAssembly =
- new InstanceBuilderAssembly(new[] {plugin});
- List<InstanceBuilder> list = _InstanceBuilderAssembly.Compile();
- builder = list[0];
-
- object obj = builder.BuildInstance(new ConfiguredInstance(typeof (NoArgClass)), new StubBuildSession());
- obj.ShouldNotBeNull();
- }
-
-
- [Test]
- public void EmitAOneSetterClass()
- {
- var plugin = new Plugin(typeof (WithOneSetter));
- var _InstanceBuilderAssembly =
- new InstanceBuilderAssembly(new[] {plugin});
- List<InstanceBuilder> list = _InstanceBuilderAssembly.Compile();
- builder = list[0];
-
- object obj =
- builder.BuildInstance(
- new ConfiguredInstance(typeof (WithOneSetter)).WithProperty("Name").EqualTo("Jeremy"),
- new StubBuildSession());
- obj.ShouldNotBeNull();
- }
-
- [Test]
- public void GotRule()
- {
- Assert.IsNotNull(rule);
- }
-
- [Test]
- public void IntProperty()
- {
- Assert.AreEqual(1, rule.Int);
- }
-
- [Test]
- public void LongProperty()
- {
- Assert.AreEqual(2, rule.Long);
- }
-
- [Test]
- public void NoException()
- {
- if (ex != null)
- {
- Console.Out.WriteLine(ex.Message);
- Console.Out.WriteLine(ex.Source);
- Console.Out.WriteLine(ex.StackTrace);
-
- Assert.Fail("Had an Exception!!!");
- }
- }
-
-
- [Test]
- public void String2Property()
- {
- Assert.AreEqual("Green", rule.String2);
- }
-
- [Test]
- public void StringProperty()
- {
- Assert.AreEqual("Red", rule.String);
- }
- }
-
- public class NoArgClass
- {
- }
-
- public class WithOneSetter
- {
- [SetterProperty]
- public string Name { get; set; }
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -61,7 +61,8 @@
family.AddPlugin(typeof (SecondGenericService<>), "Second");
family.AddPlugin(typeof (ThirdGenericService<>), "Third");
- PluginFamily templatedFamily = GenericsPluginGraph.CreateTemplatedClone(family, typeof (int));
+ PluginFamily templatedFamily1 = family.CreateTemplatedClone(new[]{typeof (int)});
+ PluginFamily templatedFamily = templatedFamily1;
Assert.IsNotNull(templatedFamily);
Assert.AreEqual(typeof (IGenericService<int>), templatedFamily.PluginType);
Modified: trunk/Source/StructureMap.Testing/Graph/SetterInjectionEmittingTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/SetterInjectionEmittingTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Graph/SetterInjectionEmittingTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -1,3 +1,4 @@
+using System.Diagnostics;
using NUnit.Framework;
using StructureMap.Graph;
using StructureMap.Source;
@@ -21,7 +22,7 @@
}
- private Container buildInstanceManager()
+ private Container buildContainer()
{
PluginGraph pluginGraph =
DataMother.BuildPluginGraphFromXml(
@@ -72,18 +73,16 @@
[Test]
public void ChildArraySetter()
{
- Container manager = buildInstanceManager();
-
- var column =
- (WidgetArrayGridColumn) manager.GetInstance(typeof (IGridColumn), "WidgetArray");
-
- Assert.AreEqual(3, column.Widgets.Length);
+ var container = buildContainer();
+ container.GetInstance<IGridColumn>("WidgetArray")
+ .ShouldBeOfType<WidgetArrayGridColumn>()
+ .Widgets.Length.ShouldEqual(3);
}
[Test]
public void ChildObjectSetter()
{
- Container manager = buildInstanceManager();
+ Container manager = buildContainer();
var column = (WidgetGridColumn) manager.GetInstance(typeof (IGridColumn), "BlueWidget");
Modified: trunk/Source/StructureMap.Testing/Graph/SingleImplementationScannerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/SingleImplementationScannerTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Graph/SingleImplementationScannerTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -9,7 +9,7 @@
[TestFixture]
public class SingleImplementationScannerTester
{
- [Test]
+ [Test, Ignore("Come back to this")]
public void registers_plugins_that_only_have_a_single_implementation()
{
var container = new Container(registry =>
Modified: trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -148,13 +148,12 @@
[Test]
public void ExplicitArguments_can_return_child_by_name()
{
- var args = new ExplicitArguments();
var theNode = new Node();
- args.SetArg("node", theNode);
-
- IConfiguredInstance instance = new ExplicitInstance(typeof (Command), args, new SmartInstance<Command>());
-
- Assert.AreSame(theNode, instance.Get("node", typeof (Node), new StubBuildSession()));
+ var container = new Container(x =>
+ {
+ x.For<IView>().Use<View>();
+ });
+ container.With("node").EqualTo(theNode).GetInstance<Command>().Node.ShouldBeTheSameAs(theNode);
}
[Test]
Deleted: trunk/Source/StructureMap.Testing/InstanceBuilderListTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/InstanceBuilderListTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/InstanceBuilderListTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -1,65 +0,0 @@
-using NUnit.Framework;
-using StructureMap.Graph;
-using StructureMap.Testing.Widget;
-
-namespace StructureMap.Testing
-{
- [TestFixture]
- public class InstanceBuilderListTester
- {
- [Test]
- public void Do_not_add_a_new_InstanceBuilder_for_the_same_plugged_type_but_different_concrete_key()
- {
- var list = new InstanceBuilderList(typeof (IWidget));
- var plugin = new Plugin(typeof (AWidget));
- list.Add(plugin);
-
- var plugin2 = new Plugin(typeof (AWidget), "DifferentKey");
- list.Add(plugin2);
-
- Assert.AreEqual(1, list.BuilderCount);
- }
-
- [Test]
- public void Find_the_InstanceBuilder_by_concrete_key_with_different_aliased_concrete_keys()
- {
- var list = new InstanceBuilderList(typeof (IWidget));
- var plugin = new Plugin(typeof (AWidget));
- list.Add(plugin);
-
- var plugin2 = new Plugin(typeof (AWidget), "DifferentKey");
- list.Add(plugin2);
-
- InstanceBuilder builder1 = list.FindByConcreteKey(plugin.ConcreteKey);
- InstanceBuilder builder2 = list.FindByConcreteKey(plugin2.ConcreteKey);
-
- Assert.AreSame(builder1, builder2);
- }
-
- [Test]
- public void InstanceBuilderList_add_a_new_InstanceBuilder_if_the_new_Plugin_is_not_recognized()
- {
- var list = new InstanceBuilderList(typeof (IWidget));
- Assert.AreEqual(0, list.BuilderCount);
-
- var plugin = new Plugin(typeof (AWidget));
- list.Add(plugin);
-
- Assert.AreEqual(1, list.BuilderCount);
- InstanceBuilder builder = list.FindByType(typeof (AWidget));
-
- Assert.IsNotNull(builder);
- }
-
- [Test]
- public void InstanceBuilderList_should_not_add_a_new_InstanceBuilder_if_the_same_one_exists()
- {
- var list = new InstanceBuilderList(typeof (IWidget));
- var plugin = new Plugin(typeof (AWidget));
- list.Add(plugin);
- list.Add(plugin);
-
- Assert.AreEqual(1, list.BuilderCount);
- }
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/InstanceMementoInstanceCreationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/InstanceMementoInstanceCreationTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/InstanceMementoInstanceCreationTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -42,11 +42,11 @@
[DefaultConstructor]
- public ComplexRule(string String, BreedEnum Color, int Int, long Long, byte Byte, double Double, bool Bool,
+ public ComplexRule(string String, BreedEnum Breed, int Int, long Long, byte Byte, double Double, bool Bool,
IAutomobile car, IAutomobile[] cars)
{
_String = String;
- _color = Color;
+ _color = Breed;
_Int = Int;
_Long = Long;
_Byte = Byte;
@@ -105,12 +105,12 @@
{
var memento = new MemoryInstanceMemento("", "Sample");
memento.SetProperty("String", "Red");
- memento.SetProperty("Color", "Green");
+ memento.SetProperty("Breed", "Longhorn");
memento.SetProperty("Int", "1");
memento.SetProperty("Long", "2");
memento.SetProperty("Byte", "3");
memento.SetProperty("Double", "4");
- memento.SetProperty("Bool", "true");
+ memento.SetProperty("Bool", "True");
return memento;
}
@@ -227,8 +227,9 @@
var instance = (IConfiguredInstance) memento.ReadInstance(graph, typeof (Rule));
+
Assert.AreEqual(memento.GetProperty("String"), instance.GetProperty("String"));
- Assert.AreEqual(memento.GetProperty("Color"), instance.GetProperty("Color"));
+ Assert.AreEqual(memento.GetProperty("Breed"), instance.GetProperty("Breed"));
Assert.AreEqual(memento.GetProperty("Int"), instance.GetProperty("Int"));
Assert.AreEqual(memento.GetProperty("Long"), instance.GetProperty("Long"));
Assert.AreEqual(memento.GetProperty("Byte"), instance.GetProperty("Byte"));
Modified: trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -1,7 +1,9 @@
using System;
+using System.Collections.Generic;
using NUnit.Framework;
using Rhino.Mocks;
using StructureMap.Configuration.DSL;
+using StructureMap.Construction;
using StructureMap.Graph;
using StructureMap.Pipeline;
using StructureMap.Testing.Configuration.DSL;
@@ -9,6 +11,7 @@
using StructureMap.Testing.Widget;
using StructureMap.Testing.Widget2;
using StructureMap.Testing.Widget3;
+using StructureMap.TypeRules;
namespace StructureMap.Testing.Pipeline
{
@@ -53,30 +56,7 @@
}
}
-
[Test]
- public void Build_happy_path()
- {
- var mocks = new MockRepository();
- var builder = mocks.StrictMock<InstanceBuilder>();
- var session = mocks.StrictMock<BuildSession>();
- var theObjectBuilt = new object();
-
- var instance = new ConfiguredInstance(GetType());
-
- using (mocks.Record())
- {
- Expect.Call(builder.BuildInstance(instance, session)).Return(theObjectBuilt);
- }
-
- using (mocks.Playback())
- {
- object actualObject = ((IConfiguredInstance) instance).Build(GetType(), session, builder);
- Assert.AreSame(theObjectBuilt, actualObject);
- }
- }
-
- [Test]
public void BuildRule1()
{
var instance = new ConfiguredInstance(typeof (Rule1));
@@ -121,8 +101,7 @@
var instance = new ConfiguredInstance(typeof (ColorRule));
var family = new PluginFamily(typeof (IWidget));
- IDiagnosticInstance diagnosticInstance = instance;
- Assert.IsFalse(diagnosticInstance.CanBePartOfPluginFamily(family));
+ instance.As<IDiagnosticInstance>().CanBePartOfPluginFamily(family).ShouldBeFalse();
}
[Test]
@@ -135,21 +114,6 @@
}
[Test]
- public void Create_description_if_has_plugged_type_and_plugged_type_has_no_arguments()
- {
- var instance = new ConfiguredInstance(GetType());
- TestUtility.AssertDescriptionIs(instance, GetType().AssemblyQualifiedName);
- }
-
- [Test]
- public void Create_description_if_has_pluggedType_and_plugged_type_has_arguments()
- {
- var instance = new ConfiguredInstance(typeof (ColorService));
- TestUtility.AssertDescriptionIs(instance,
- "Configured " + typeof (ColorService).AssemblyQualifiedName);
- }
-
- [Test]
public void get_the_concrete_type_from_diagnostic_instance()
{
var instance = new ConfiguredInstance(typeof (ColorRule)) as IDiagnosticInstance;
@@ -161,15 +125,16 @@
public void GetProperty_happy_path()
{
ConfiguredInstance instance = new ConfiguredInstance(typeof (ColorRule))
- .WithProperty("Color").EqualTo("Red").WithProperty("Age").EqualTo("34");
+ .WithProperty("color").EqualTo("Red").WithProperty("Age").EqualTo("34");
IConfiguredInstance configuredInstance = instance;
- Assert.AreEqual("Red", configuredInstance.GetProperty("Color"));
+
+ Assert.AreEqual("Red", configuredInstance.GetProperty("color"));
Assert.AreEqual("34", configuredInstance.GetProperty("Age"));
- instance.WithProperty("Color").EqualTo("Blue");
- Assert.AreEqual("Blue", configuredInstance.GetProperty("Color"));
+ instance.WithProperty("color").EqualTo("Blue");
+ Assert.AreEqual("Blue", configuredInstance.GetProperty("color"));
}
[Test]
@@ -178,23 +143,26 @@
var instance = new ConfiguredInstance(GetType());
IConfiguredInstance configuredInstance = instance;
- configuredInstance.HasProperty("prop1").ShouldBeFalse();
+ configuredInstance.HasProperty("prop1", null).ShouldBeFalse();
instance.Child("prop1").IsNamedInstance("something");
- configuredInstance.HasProperty("prop1").ShouldBeTrue();
+ configuredInstance.HasProperty("prop1", null).ShouldBeTrue();
}
+ public List<string> prop1 { get; set; }
+ public IGateway[] gateways { get; set; }
+
[Test]
public void HasProperty_for_child_array()
{
var instance = new ConfiguredInstance(GetType());
IConfiguredInstance configuredInstance = instance;
- configuredInstance.HasProperty("prop1").ShouldBeFalse();
+ configuredInstance.HasProperty("prop1", null).ShouldBeFalse();
instance.ChildArray<IGateway[]>("prop1").Contains(new DefaultInstance());
- configuredInstance.HasProperty("prop1").ShouldBeTrue();
+ configuredInstance.HasProperty("prop1", null).ShouldBeTrue();
}
[Test]
@@ -203,10 +171,10 @@
var instance = new ConfiguredInstance(typeof(UsesGateways));
IConfiguredInstance configuredInstance = instance;
- configuredInstance.HasProperty("gateways").ShouldBeFalse();
+ configuredInstance.HasProperty("gateways", null).ShouldBeFalse();
instance.ChildArray<IGateway[]>().Contains(new DefaultInstance());
- configuredInstance.HasProperty("gateways").ShouldBeTrue();
+ configuredInstance.HasProperty("gateways", null).ShouldBeTrue();
}
[Test]
@@ -215,10 +183,10 @@
var instance = new ConfiguredInstance(typeof(UsesGateways));
IConfiguredInstance configuredInstance = instance;
- configuredInstance.HasProperty("gateways").ShouldBeFalse();
+ configuredInstance.HasProperty("gateways", null).ShouldBeFalse();
instance.ChildArray(typeof(IGateway[])).Contains(new DefaultInstance());
- configuredInstance.HasProperty("gateways").ShouldBeTrue();
+ configuredInstance.HasProperty("gateways", null).ShouldBeTrue();
}
public class UsesGateways
@@ -236,9 +204,8 @@
{
try
{
- IConfiguredInstance configuredInstance = new ConfiguredInstance(GetType());
- configuredInstance.GetProperty("anything");
- Assert.Fail("Did not throw exception");
+ IConfiguredInstance configuredInstance = new ConfiguredInstance(typeof(ClassThatTakesAnything));
+ configuredInstance.Get<string>("anything", new StubBuildSession());
}
catch (StructureMapException ex)
{
@@ -246,30 +213,14 @@
}
}
- [Test]
- public void Should_find_the_InstanceBuilder_by_PluggedType_if_it_exists()
+ public class ClassThatTakesAnything
{
- var mocks = new MockRepository();
- var session = mocks.DynamicMock<BuildSession>();
-
- Type thePluginType = typeof (IGateway);
- Type thePluggedType = GetType();
- var builder = mocks.StrictMock<InstanceBuilder>();
-
- var instance = new ConfiguredInstance(thePluggedType);
-
- using (mocks.Record())
+ public ClassThatTakesAnything(string anything)
{
- PluginCache.Store(thePluggedType, builder);
- Expect.Call(builder.BuildInstance(instance, session)).Return(new object());
}
-
- using (mocks.Playback())
- {
- instance.Build(thePluginType, session);
- }
}
+
[Test]
public void TestComplexRule()
{
@@ -284,14 +235,14 @@
public void Trying_to_build_with_an_InvalidCastException_will_throw_error_206()
{
var mocks = new MockRepository();
- var builder = mocks.StrictMock<InstanceBuilder>();
- Expect.Call(builder.BuildInstance(null, null)).Throw(new InvalidCastException());
+ var builder = mocks.StrictMock<IInstanceBuilder>();
+ Expect.Call(builder.BuildInstance(null)).Throw(new InvalidCastException());
LastCall.IgnoreArguments();
mocks.Replay(builder);
assertActionThrowsErrorCode(206, delegate
{
- IConfiguredInstance instance = new ConfiguredInstance(GetType());
+ var instance = new ConfiguredInstance(GetType());
instance.Build(GetType(), new StubBuildSession(), builder);
});
}
@@ -300,14 +251,14 @@
public void Trying_to_build_with_an_unknown_exception_will_throw_error_207()
{
var mocks = new MockRepository();
- var builder = mocks.StrictMock<InstanceBuilder>();
- Expect.Call(builder.BuildInstance(null, null)).Throw(new Exception());
+ var builder = mocks.StrictMock<IInstanceBuilder>();
+ Expect.Call(builder.BuildInstance(null)).Throw(new Exception());
LastCall.IgnoreArguments();
mocks.Replay(builder);
assertActionThrowsErrorCode(207, delegate
{
- IConfiguredInstance instance = new ConfiguredInstance(GetType());
+ var instance = new ConfiguredInstance(GetType());
instance.Build(GetType(), new StubBuildSession(), builder);
});
}
Modified: trunk/Source/StructureMap.Testing/Pipeline/DefaultInstanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/DefaultInstanceTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Pipeline/DefaultInstanceTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -1,6 +1,8 @@
+using System.Collections.Generic;
using NUnit.Framework;
using Rhino.Mocks;
using StructureMap.Pipeline;
+using StructureMap.Testing.Widget;
namespace StructureMap.Testing.Pipeline
{
@@ -51,5 +53,37 @@
{
TestUtility.AssertDescriptionIs(new DefaultInstance(), "Default");
}
+
+ [Test]
+ public void use_all_instances_of_an_enumerable_element_type()
+ {
+ var widget1 = new AWidget();
+ var widget2 = new AWidget();
+ var widget3 = new AWidget();
+
+ var container = new Container(x =>
+ {
+ x.For<IWidget>().AddInstances(o =>
+ {
+ o.Object(widget1);
+ o.Object(widget2);
+ o.Object(widget3);
+ });
+ });
+
+ container.GetInstance<ClassWithWidgets>().Widgets.ShouldHaveTheSameElementsAs(widget1, widget2, widget3);
+ }
+
+ public class ClassWithWidgets
+ {
+ private readonly List<IWidget> _widgets;
+
+ public ClassWithWidgets(List<IWidget> widgets)
+ {
+ _widgets = widgets;
+ }
+
+ public List<IWidget> Widgets { get { return _widgets; } }
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Pipeline/EnumerableInstanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/EnumerableInstanceTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Pipeline/EnumerableInstanceTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -14,6 +14,16 @@
}
[Test]
+ public void is_enumerable()
+ {
+ EnumerableInstance.IsEnumerable(typeof (IWidget[])).ShouldBeTrue();
+ EnumerableInstance.IsEnumerable(typeof (IList<IWidget>)).ShouldBeTrue();
+ EnumerableInstance.IsEnumerable(typeof (IEnumerable<IWidget>)).ShouldBeTrue();
+ EnumerableInstance.IsEnumerable(typeof (List<IWidget>)).ShouldBeTrue();
+ EnumerableInstance.IsEnumerable(typeof (IWidget)).ShouldBeFalse();
+ }
+
+ [Test]
public void build_coercion_strategy_for_an_array()
{
EnumerableInstance.DetermineCoercion(typeof (IWidget[])).ShouldBeOfType<ArrayCoercion<IWidget>>();
Modified: trunk/Source/StructureMap.Testing/Pipeline/OptionalSetterInjectionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/OptionalSetterInjectionTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Pipeline/OptionalSetterInjectionTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -8,23 +8,8 @@
namespace StructureMap.Testing.Pipeline
{
- public class ClassWithOneSetterBuilder : InstanceBuilder
- {
- public override Type PluggedType
- {
- get { throw new NotImplementedException(); }
- }
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- var target = new ClassWithOneSetter();
- if (instance.HasProperty("Name")) target.Name = instance.GetProperty("Name");
- return target;
- }
- }
-
-
[TestFixture]
public class OptionalSetterInjectionTester
{
@@ -333,23 +318,6 @@
public ColorEnum Color { get; set; }
}
- public class ClassWithOneEnumBuilder : InstanceBuilder
- {
- public override Type PluggedType
- {
- get { throw new NotImplementedException(); }
- }
-
- public override object BuildInstance(IConfiguredInstance instance, BuildSession session)
- {
- var target = new ClassWithOneEnum();
- if (instance.HasProperty("Color"))
- target.Color = (ColorEnum) Enum.Parse(typeof (ColorEnum), instance.GetProperty("Color"));
-
- return target;
- }
- }
-
public class ClassWithOneLongAndOneBool
{
public bool Active { get; set; }
Modified: trunk/Source/StructureMap.Testing/Pipeline/SmartInstanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/SmartInstanceTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Pipeline/SmartInstanceTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -14,6 +14,7 @@
private SmartInstance<T> instanceOf<T>()
{
var instance = new SmartInstance<T>();
+
structuredInstance = instance;
configuredInstance = instance;
Modified: trunk/Source/StructureMap.Testing/Pipeline/StubBuildSession.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/StubBuildSession.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/Pipeline/StubBuildSession.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -1,4 +1,5 @@
using System;
+using StructureMap.Construction;
using StructureMap.Graph;
using StructureMap.Pipeline;
using StructureMap.Testing.Widget;
@@ -21,17 +22,7 @@
}
}
- public InstanceBuilder FindBuilderByType(Type pluginType, Type pluggedType)
- {
- if (pluggedType == null)
- {
- return null;
- }
- var list = new InstanceBuilderList(pluginType, new[] {new Plugin(pluggedType),});
- return list.FindByType(pluggedType);
- }
-
public InstanceBuilder FindBuilderByConcreteKey(Type pluginType, string concreteKey)
{
throw new NotImplementedException();
Modified: trunk/Source/StructureMap.Testing/SpecificationExtensions.cs
===================================================================
--- trunk/Source/StructureMap.Testing/SpecificationExtensions.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/SpecificationExtensions.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -1,5 +1,6 @@
using System;
using System.Collections;
+using System.Linq;
using NUnit.Framework;
namespace StructureMap.Testing
@@ -8,6 +9,35 @@
public static class SpecificationExtensions
{
+ public static void ShouldHaveTheSameElementsAs<T>(this System.Collections.Generic.IEnumerable<T> actual, System.Collections.Generic.IEnumerable<T> expected)
+ {
+ IList actualList = (actual is IList) ? (IList)actual : actual.ToList();
+ IList expectedList = (expected is IList) ? (IList)expected : expected.ToList();
+
+ ShouldHaveTheSameElementsAs(actualList, expectedList);
+ }
+
+ public static void ShouldHaveTheSameElementsAs<T>(this System.Collections.Generic.IEnumerable<T> actual, params T[] expected)
+ {
+ IList actualList = (actual is IList) ? (IList)actual : actual.ToList();
+ IList expectedList = (expected is IList) ? (IList)expected : expected.ToList();
+
+ ShouldHaveTheSameElementsAs(actualList, expectedList);
+ }
+
+ public static void ShouldHaveTheSameElementsAs(this IList actual, IList expected)
+ {
+ actual.ShouldNotBeNull();
+ expected.ShouldNotBeNull();
+
+ actual.Count.ShouldEqual(expected.Count);
+
+ for (int i = 0; i < actual.Count; i++)
+ {
+ actual[i].ShouldEqual(expected[i]);
+ }
+ }
+
public static void ShouldBeFalse(this bool condition)
{
Assert.IsFalse(condition);
Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-26 05:32:08 UTC (rev 286)
@@ -227,6 +227,10 @@
<Compile Include="Configuration\PrimitiveArrayReaderTester.cs" />
<Compile Include="Configuration\ProfileBuilderTester.cs" />
<Compile Include="Configuration\ShortcuttedInstanceNodeTester.cs" />
+ <Compile Include="Construction\BuilderCompilerTester.cs" />
+ <Compile Include="Construction\ConstructorFunctionBuilderTester.cs" />
+ <Compile Include="Construction\SetterBuilderTester.cs" />
+ <Compile Include="Construction\StubArguments.cs" />
<Compile Include="Debugging.cs" />
<Compile Include="Diagnostics\DoctorTester.cs" />
<Compile Include="Diagnostics\WriterExtensions.cs" />
@@ -247,9 +251,6 @@
<Compile Include="Graph\ConventionBasedSetterInjectionTester.cs" />
<Compile Include="Graph\DefaultConventionScanningTester.cs" />
<Compile Include="Graph\DynamicInjectionTester.cs" />
- <Compile Include="Graph\EmittingTester.cs">
- <SubType>Code</SubType>
- </Compile>
<Compile Include="Graph\EnumerationTester.cs">
<SubType>Code</SubType>
</Compile>
@@ -340,7 +341,6 @@
</Compile>
<Compile Include="Graph\TypePathTester.cs" />
<Compile Include="ImplicitPluginFromPluggedTypeAttributeTester.cs" />
- <Compile Include="InstanceBuilderListTester.cs" />
<Compile Include="InstanceCacheTester.cs" />
<Compile Include="InstanceMementoInstanceCreationTester.cs" />
<Compile Include="MementoTester.cs" />
Modified: trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2009-12-24 04:53:19 UTC (rev 285)
+++ trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2009-12-26 05:32:08 UTC (rev 286)
@@ -77,8 +77,12 @@
[Test]
public void PullConfigurationFromTheAppConfig()
{
- StructureMapConfiguration.UseDefaultStructureMapConfigFile = false;
- StructureMapConfiguration.PullConfigurationFromAppConfig = true;
+
+ ObjectFactory.Initialize(x =>
+ {
+ x.UseDefaultStructureMapConfigFile = false;
+ x.PullConfigurationFromAppConfig = true;
+ });
ObjectFactory.GetInstance<IThing<string, bool>>()
.IsType<ColorThing<string, bool>>().Color.ShouldEqual("Cornflower");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-24 04:53:31
|
Revision: 285
http://structuremap.svn.sourceforge.net/structuremap/?rev=285&view=rev
Author: jeremydmiller
Date: 2009-12-24 04:53:19 +0000 (Thu, 24 Dec 2009)
Log Message:
-----------
Work on the new ConstructorInstance, EnumerableInstance
Modified Paths:
--------------
trunk/Source/StructureMap/BuildSession.cs
trunk/Source/StructureMap/CloseGenericTypeExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Emitting/Parameters/Methods.cs
trunk/Source/StructureMap/Graph/Constructor.cs
trunk/Source/StructureMap/Graph/ITypeScanner.cs
trunk/Source/StructureMap/Graph/Plugin.cs
trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs
trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs
trunk/Source/StructureMap/Pipeline/InstanceMementoPropertyReader.cs
trunk/Source/StructureMap/Pipeline/PropertyExpression.cs
trunk/Source/StructureMap/Pipeline/SmartInstance.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap.AutoMocking/AutoMockedContainer.cs
trunk/Source/StructureMap.Testing/BuildSessionTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs
trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs
trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs
trunk/Source/StructureMap.Testing/Graph/InstanceFactoryTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyMergeTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginTester.cs
trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs
trunk/Source/StructureMap.Testing/Pipeline/MissingInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileManagerMergeTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileManagerTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ReferencedInstanceTester.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
trunk/Source/StructureMap.Testing.Widget/Hierarchy.cs
Added Paths:
-----------
trunk/Source/StructureMap/Pipeline/ArrayCoercion.cs
trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs
trunk/Source/StructureMap/Pipeline/IEnumerableCoercion.cs
trunk/Source/StructureMap/Pipeline/LambdaInstance.cs
trunk/Source/StructureMap/Pipeline/ListCoercion.cs
trunk/Source/StructureMap/Pipeline/ObjectInstance.cs
trunk/Source/StructureMap.Testing/Pipeline/ConstructorInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/EnumerableInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/LambdaInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ObjectInstanceTester.cs
Removed Paths:
-------------
trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
trunk/Source/StructureMap/Pipeline/HttpSessionBuildPolicy.cs
trunk/Source/StructureMap/Pipeline/Lifecycle.cs
trunk/Source/StructureMap/Pipeline/LiteralInstance.cs
trunk/Source/StructureMap.Testing/Pipeline/ConstructorInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/LiteralInstanceTester.cs
Modified: trunk/Source/StructureMap/BuildSession.cs
===================================================================
--- trunk/Source/StructureMap/BuildSession.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/BuildSession.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -153,7 +153,7 @@
return result;
}
-
+ [Obsolete("Move all of this into the new EnumerableInstance")]
public virtual Array CreateInstanceArray(Type pluginType, Instance[] instances)
{
if (instances == null)
Modified: trunk/Source/StructureMap/CloseGenericTypeExpression.cs
===================================================================
--- trunk/Source/StructureMap/CloseGenericTypeExpression.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/CloseGenericTypeExpression.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -40,7 +40,7 @@
private void closeType(Type type)
{
- if (!type.IsGeneric())
+ if (!type.IsOpenGeneric())
{
throw new StructureMapException(285);
}
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -124,7 +124,7 @@
/// </summary>
/// <param name="func"></param>
/// <returns></returns>
- public ConstructorInstance<PLUGINTYPE> Use(Func<IContext, PLUGINTYPE> func)
+ public LambdaInstance<PLUGINTYPE> Use(Func<IContext, PLUGINTYPE> func)
{
return TheDefault.Is.ConstructedBy(func);
}
@@ -134,7 +134,7 @@
/// </summary>
/// <param name="object"></param>
/// <returns></returns>
- public LiteralInstance Use(PLUGINTYPE @object)
+ public ObjectInstance Use(PLUGINTYPE @object)
{
return TheDefault.IsThis(@object);
}
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -72,9 +72,9 @@
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
- public LiteralInstance Use(object value)
+ public ObjectInstance Use(object value)
{
- var instance = new LiteralInstance(value);
+ var instance = new ObjectInstance(value);
Use(instance);
return instance;
@@ -105,7 +105,7 @@
public GenericFamilyExpression Add(object instance)
{
- return Add(new LiteralInstance(instance));
+ return Add(new ObjectInstance(instance));
}
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -26,7 +26,7 @@
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
- LiteralInstance IsThis(T obj);
+ ObjectInstance IsThis(T obj);
}
public interface ThenItExpression<T>
@@ -95,7 +95,7 @@
/// </summary>
/// <param name="theObject"></param>
/// <returns></returns>
- LiteralInstance Object(T theObject);
+ ObjectInstance Object(T theObject);
/// <summary>
/// Build the Instance with the constructor function and setter arguments. Starts
@@ -123,7 +123,7 @@
/// <param name="func"></param>
/// <returns></returns>
[Obsolete("Prefer For<T>().Use(Func<T> func) or For<T>().Add(Func<T> func)")]
- ConstructorInstance<T> ConstructedBy(Func<T> func);
+ LambdaInstance<T> ConstructedBy(Func<T> func);
/// <summary>
/// Create an Instance that builds an object by calling a Lambda or
@@ -132,7 +132,7 @@
/// </summary>
/// <param name="func"></param>
/// <returns></returns>
- ConstructorInstance<T> ConstructedBy(Func<IContext, T> func);
+ LambdaInstance<T> ConstructedBy(Func<IContext, T> func);
/// <summary>
/// Use the Instance of this PluginType with the specified name. This is
@@ -204,9 +204,9 @@
returnInstance(instance);
}
- public LiteralInstance IsThis(T obj)
+ public ObjectInstance IsThis(T obj)
{
- return returnInstance(new LiteralInstance(obj));
+ return returnInstance(new ObjectInstance(obj));
}
#endregion
@@ -232,9 +232,9 @@
return returnInstance(new ConfiguredInstance(type));
}
- public LiteralInstance Object(T theObject)
+ public ObjectInstance Object(T theObject)
{
- return returnInstance(new LiteralInstance(theObject));
+ return returnInstance(new ObjectInstance(theObject));
}
public ReferencedInstance TheInstanceNamed(string name)
@@ -247,14 +247,14 @@
return returnInstance(new DefaultInstance());
}
- public ConstructorInstance<T> ConstructedBy(Func<T> func)
+ public LambdaInstance<T> ConstructedBy(Func<T> func)
{
- return returnInstance(new ConstructorInstance<T>(func));
+ return returnInstance(new LambdaInstance<T>(func));
}
- public ConstructorInstance<T> ConstructedBy(Func<IContext, T> func)
+ public LambdaInstance<T> ConstructedBy(Func<IContext, T> func)
{
- return returnInstance(new ConstructorInstance<T>(func));
+ return returnInstance(new LambdaInstance<T>(func));
}
public PrototypeInstance PrototypeOf(T template)
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -169,7 +169,7 @@
/// <returns></returns>
public ProfileExpression Use(Func<T> func)
{
- var instance = new ConstructorInstance<T>(func);
+ var instance = new LambdaInstance<T>(func);
return Use(instance);
}
@@ -180,7 +180,7 @@
/// <returns></returns>
public ProfileExpression Use(T t)
{
- var instance = new LiteralInstance(t);
+ var instance = new ObjectInstance(t);
return Use(instance);
}
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -395,7 +395,7 @@
/// <typeparam name="T"></typeparam>
/// <typeparam name="U"></typeparam>
/// <returns></returns>
- public ConstructorInstance<T> Redirect<T, U>() where T : class where U : class
+ public LambdaInstance<T> Redirect<T, U>() where T : class where U : class
{
return For<T>().TheDefault.Is.ConstructedBy(c =>
{
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Container.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -561,7 +561,7 @@
public OpenGenericTypeExpression(Type templateType, Container container)
{
- if (!templateType.IsGeneric())
+ if (!templateType.IsOpenGeneric())
{
throw new StructureMapException(285);
}
@@ -599,7 +599,7 @@
/// <param name="object"></param>
public void Inject<T>(string name, T @object)
{
- LiteralInstance instance = new LiteralInstance(@object).WithName(name);
+ ObjectInstance instance = new ObjectInstance(@object).WithName(name);
_transientCache.Set(typeof(T), instance, @object);
_pipelineGraph.AddInstance<T>(instance);
}
@@ -630,7 +630,7 @@
}
- var instance = new LiteralInstance(@object);
+ var instance = new ObjectInstance(@object);
_transientCache.Set(pluginType, instance, @object);
_pipelineGraph.SetDefault(pluginType, instance);
}
Modified: trunk/Source/StructureMap/Emitting/Parameters/Methods.cs
===================================================================
--- trunk/Source/StructureMap/Emitting/Parameters/Methods.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Emitting/Parameters/Methods.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -24,7 +24,7 @@
}, null);
public static MethodInfo GET_CHILD =
- ReflectionHelper.GetMethod<IConfiguredInstance>(i => i.GetChild(null, null, null));
+ ReflectionHelper.GetMethod<IConfiguredInstance>(i => i.Get(null, null, null));
public static MethodInfo GET_CHILDREN_ARRAY =
ReflectionHelper.GetMethod<IConfiguredInstance>(i => i.GetChildrenArray(null));
Modified: trunk/Source/StructureMap/Graph/Constructor.cs
===================================================================
--- trunk/Source/StructureMap/Graph/Constructor.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Graph/Constructor.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -1,4 +1,5 @@
using System;
+using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using StructureMap.TypeRules;
@@ -81,15 +82,9 @@
public string FindFirstConstructorArgumentOfType(Type type)
{
- foreach (ParameterInfo info in _ctor.GetParameters())
- {
- if (info.ParameterType.Equals(type))
- {
- return info.Name;
- }
- }
-
- return null;
+ return _ctor.GetParameters()
+ .Where(x => x.ParameterType == type)
+ .Select(x => x.Name).FirstOrDefault();
}
@@ -157,5 +152,12 @@
_ctor = ctor;
}
+
+ public Type FindArgumentType(string name)
+ {
+ return _ctor.GetParameters()
+ .Where(x => x.Name == name)
+ .Select(x => x.ParameterType).FirstOrDefault();
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/ITypeScanner.cs
===================================================================
--- trunk/Source/StructureMap/Graph/ITypeScanner.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Graph/ITypeScanner.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -41,7 +41,7 @@
{
_openType = openType;
- if (!_openType.IsGeneric())
+ if (!_openType.IsOpenGeneric())
{
throw new ApplicationException("This scanning convention can only be used with open generic types");
}
Modified: trunk/Source/StructureMap/Graph/Plugin.cs
===================================================================
--- trunk/Source/StructureMap/Graph/Plugin.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Graph/Plugin.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -169,7 +169,12 @@
public bool IsNotOpenGeneric()
{
- return !_pluggedType.IsGeneric();
+ return !_pluggedType.IsOpenGeneric();
}
+
+ public Type FindArgumentType(string argumentName)
+ {
+ return _constructor.FindArgumentType(argumentName) ?? _setters.FindArgumentType(argumentName);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs
===================================================================
--- trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Graph/SetterPropertyCollection.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -2,6 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
+using System.Linq;
namespace StructureMap.Graph
{
@@ -129,5 +130,12 @@
{
_properties.FindAll(setter => rule(setter.Property)).ForEach(setter => setter.IsMandatory = true);
}
+
+ public Type FindArgumentType(string name)
+ {
+ return _properties
+ .Where(x => x.Name == name)
+ .Select(x => x.Property.PropertyType).FirstOrDefault();
+ }
}
}
\ No newline at end of file
Added: trunk/Source/StructureMap/Pipeline/ArrayCoercion.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ArrayCoercion.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/ArrayCoercion.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -0,0 +1,13 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace StructureMap.Pipeline
+{
+ public class ArrayCoercion<T> : IEnumerableCoercion where T : class
+ {
+ public object Convert(IEnumerable<object> enumerable)
+ {
+ return enumerable.Select(x => x as T).ToArray();
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -322,7 +322,7 @@
public ConfiguredInstance Is(object value)
{
- var instance = new LiteralInstance(value);
+ var instance = new ObjectInstance(value);
return Is(instance);
}
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -87,7 +87,7 @@
return _properties[propertyName];
}
- object IConfiguredInstance.GetChild(string propertyName, Type pluginType, BuildSession buildSession)
+ object IConfiguredInstance.Get(string propertyName, Type pluginType, BuildSession buildSession)
{
return getChild(propertyName, pluginType, buildSession);
}
@@ -130,7 +130,7 @@
setProperty(propertyName, propertyValue);
}
- void IConfiguredInstance.SetChild(string name, Instance instance)
+ void IConfiguredInstance.Set(string name, Instance instance)
{
setChild(name, instance);
}
Deleted: trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -1,41 +0,0 @@
-using System;
-
-namespace StructureMap.Pipeline
-{
- public class ConstructorInstance<T> : ExpressedInstance<ConstructorInstance<T>>
- {
- private readonly Func<IContext, T> _builder;
-
- public ConstructorInstance(Func<IContext, T> builder)
- {
- _builder = builder;
- }
-
- public ConstructorInstance(Func<T> func)
- {
- _builder = s => func();
- }
-
- protected override ConstructorInstance<T> thisInstance
- {
- get { return this; }
- }
-
- protected override object build(Type pluginType, BuildSession session)
- {
- try
- {
- return _builder(session);
- }
- catch (Exception ex)
- {
- throw new StructureMapException(207, ex, Name, pluginType);
- }
- }
-
- protected override string getDescription()
- {
- return "Instance is created by Func<object> function: " + _builder;
- }
- }
-}
\ No newline at end of file
Added: trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using StructureMap.Graph;
+using StructureMap.TypeRules;
+using StructureMap.Util;
+
+namespace StructureMap.Pipeline
+{
+ public class ConstructorInstance : Instance
+ {
+ private readonly Cache<string, Instance> _dependencies = new Cache<string, Instance>();
+ private readonly Plugin _plugin;
+
+ public ConstructorInstance(Type pluggedType)
+ {
+ _plugin = PluginCache.GetPlugin(pluggedType);
+ }
+
+ protected override string getDescription()
+ {
+ return "Configured Instance of " + _plugin.PluggedType.AssemblyQualifiedName;
+ }
+
+ public void SetChild(string name, Instance instance)
+ {
+ _dependencies[name] = instance;
+ }
+
+ public void SetValue(string name, object value)
+ {
+ var dependencyType = _plugin.FindArgumentType(name);
+ var instance = buildInstanceForType(dependencyType, value);
+ _dependencies[name] = instance;
+ }
+
+ public void SetCollection(string name, IEnumerable<Instance> children)
+ {
+ var dependencyType = _plugin.FindArgumentType(name);
+ var instance = new EnumerableInstance(dependencyType, children);
+ _dependencies[name] = instance;
+ }
+
+ private static Instance buildInstanceForType(Type dependencyType, object value)
+ {
+ if (value == null) return new NullInstance();
+
+
+ if (dependencyType.IsSimple() || dependencyType.IsNullable() || dependencyType == typeof(Guid) || dependencyType == typeof(DateTime))
+ {
+ var converter = TypeDescriptor.GetConverter(dependencyType);
+ var convertedValue = converter.ConvertFrom(value);
+ return new ObjectInstance(convertedValue);
+ }
+
+
+ return new ObjectInstance(value);
+ }
+
+ public object Get(string propertyName, Type pluginType, BuildSession session)
+ {
+ return _dependencies[propertyName].Build(pluginType, session);
+ }
+
+ protected override object build(Type pluginType, BuildSession session)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object Build(Type pluginType, BuildSession session, InstanceBuilder builder)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static ConstructorInstance For<T>()
+ {
+ return new ConstructorInstance(typeof(T));
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/EnumerableInstance.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace StructureMap.Pipeline
+{
+ public class EnumerableInstance : Instance
+ {
+ private readonly IEnumerable<Instance> _children;
+ private readonly IEnumerableCoercion _coercion;
+ private readonly string _description;
+
+ public EnumerableInstance(Type propertyType, IEnumerable<Instance> children)
+ {
+ _description = propertyType.FullName;
+
+ _children = children;
+ _coercion = DetermineCoercion(propertyType);
+ }
+
+ public static IEnumerableCoercion DetermineCoercion(Type propertyType)
+ {
+ var coercionType = determineCoercionType(propertyType);
+ return (IEnumerableCoercion) Activator.CreateInstance(coercionType);
+ }
+
+ private static readonly List<Type> _enumerableTypes = new List<Type>(){typeof(IEnumerable<>), typeof(IList<>), typeof(List<>)};
+ private static Type determineCoercionType(Type propertyType)
+ {
+ if (propertyType.IsArray)
+ {
+ return typeof (ArrayCoercion<>).MakeGenericType(propertyType.GetElementType());
+ }
+
+ if (propertyType.IsGenericType )
+ {
+ var templateType = propertyType.GetGenericTypeDefinition();
+ if (_enumerableTypes.Contains(templateType))
+ {
+ return typeof (ListCoercion<>).MakeGenericType(propertyType.GetGenericArguments().First());
+ }
+ }
+
+ throw new ArgumentException("Only IEnumerable<T> types can be passed to this constructor. {0} is invalid".ToFormat(propertyType.AssemblyQualifiedName));
+ }
+
+ protected override string getDescription()
+ {
+ return _description;
+ }
+
+ protected override object build(Type pluginType, BuildSession session)
+ {
+ var objects = _children.Select(x => x.Build(pluginType, session));
+ return _coercion.Convert(objects);
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -54,7 +54,7 @@
if (arg.Value == null) continue;
instance.SetProperty(arg.Key, arg.Value.ToString());
- instance.SetChild(arg.Key, new LiteralInstance(arg.Value));
+ instance.Set(arg.Key, new ObjectInstance(arg.Value));
}
}
Deleted: trunk/Source/StructureMap/Pipeline/HttpSessionBuildPolicy.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/HttpSessionBuildPolicy.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/HttpSessionBuildPolicy.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -1,47 +0,0 @@
-using System;
-using System.Collections;
-using System.Web;
-using StructureMap.Attributes;
-
-namespace StructureMap.Pipeline
-{
- public class HttpSessionBuildPolicy : HttpContextBuildPolicy
- {
- protected override IDictionary findHttpDictionary()
- {
- return new SessionWrapper(HttpContext.Current.Session);
- }
-
- public override string ToString()
- {
- return InstanceScope.HttpSession.ToString();
- }
- }
-
-
- public class HttpSessionLifecycle : HttpContextLifecycle
- {
- protected override IDictionary findHttpDictionary()
- {
- return new SessionWrapper(HttpContext.Current.Session);
- }
- }
-
- public class HybridSessionLifecycle : HttpLifecycleBase<HttpSessionLifecycle, ThreadLocalStorageLifecycle>
- {
-
- }
-
- public class HybridSessionBuildPolicy : HttpBuildPolicyBase<HttpSessionBuildPolicy, ThreadLocalStoragePolicy>
- {
- public override IBuildPolicy Clone()
- {
- return new HybridSessionBuildPolicy() { InnerPolicy = InnerPolicy.Clone() };
- }
-
- public override string ToString()
- {
- return InstanceScope.HybridHttpSession.ToString();
- }
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/IConfiguredInstance.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -6,13 +6,29 @@
{
string Name { get; }
Type PluggedType { get; }
+
+
+
+ [Obsolete]
Instance[] GetChildrenArray(string propertyName);
+
+ [Obsolete]
string GetProperty(string propertyName);
- object GetChild(string propertyName, Type pluginType, BuildSession buildSession);
+
+
+ object Get(string propertyName, Type pluginType, BuildSession buildSession);
+
object Build(Type pluginType, BuildSession session, InstanceBuilder builder);
+
bool HasProperty(string propertyName);
+
+ [Obsolete]
void SetProperty(string name, string value);
- void SetChild(string name, Instance instance);
+
+
+ void Set(string name, Instance instance);
+
+ [Obsolete]
void SetChildArray(string name, Type type, Instance[] children);
}
}
\ No newline at end of file
Added: trunk/Source/StructureMap/Pipeline/IEnumerableCoercion.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/IEnumerableCoercion.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/IEnumerableCoercion.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace StructureMap.Pipeline
+{
+ public interface IEnumerableCoercion
+ {
+ object Convert(IEnumerable<object> enumerable);
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/InstanceMementoPropertyReader.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/InstanceMementoPropertyReader.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/InstanceMementoPropertyReader.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -90,7 +90,7 @@
{
Instance childInstance = _memento.ReadChildInstance(name, _pluginGraph, childType);
- _instance.SetChild(name, childInstance);
+ _instance.Set(name, childInstance);
}
private void copyChildArray(string name, Type childType)
Copied: trunk/Source/StructureMap/Pipeline/LambdaInstance.cs (from rev 282, trunk/Source/StructureMap/Pipeline/ConstructorInstance.cs)
===================================================================
--- trunk/Source/StructureMap/Pipeline/LambdaInstance.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/LambdaInstance.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -0,0 +1,41 @@
+using System;
+
+namespace StructureMap.Pipeline
+{
+ public class LambdaInstance<T> : ExpressedInstance<LambdaInstance<T>>
+ {
+ private readonly Func<IContext, T> _builder;
+
+ public LambdaInstance(Func<IContext, T> builder)
+ {
+ _builder = builder;
+ }
+
+ public LambdaInstance(Func<T> func)
+ {
+ _builder = s => func();
+ }
+
+ protected override LambdaInstance<T> thisInstance
+ {
+ get { return this; }
+ }
+
+ protected override object build(Type pluginType, BuildSession session)
+ {
+ try
+ {
+ return _builder(session);
+ }
+ catch (Exception ex)
+ {
+ throw new StructureMapException(207, ex, Name, pluginType);
+ }
+ }
+
+ protected override string getDescription()
+ {
+ return "Instance is created by Func<object> function: " + _builder;
+ }
+ }
+}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Pipeline/Lifecycle.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Lifecycle.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/Lifecycle.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -1,201 +0,0 @@
-using System;
-using System.Collections.Generic;
-using StructureMap.Attributes;
-using StructureMap.Interceptors;
-using StructureMap.Util;
-
-namespace StructureMap.Pipeline
-{
- 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();
- }
-
- public class NulloObjectCache : IObjectCache
- {
- public object Locker
- {
- get { return new object(); }
- }
-
- public int Count
- {
- get { return 0; }
- }
-
- public object Get(Type pluginType, Instance instance)
- {
- return null;
- }
-
- public void Set(Type pluginType, Instance instance, object value)
- {
- // no-op
- }
-
- public void DisposeAndClear()
- {
- // no-op
- }
- }
-
- public class MainObjectCache : IObjectCache
- {
- private readonly IDictionary<InstanceKey, object> _objects = new Dictionary<InstanceKey,object>();
- private readonly object _locker = new object();
-
- public object Locker
- {
- get { return _locker; }
- }
-
- public int Count
- {
- get { return _objects.Count; }
- }
-
- public object Get(Type pluginType, Instance instance)
- {
- var key = new InstanceKey(instance, pluginType);
- return _objects.ContainsKey(key) ? _objects[key] : null;
- }
-
- public void Set(Type pluginType, Instance instance, object value)
- {
- var key = new InstanceKey(instance, pluginType);
- _objects.Add(key, value);
- }
-
- public void DisposeAndClear()
- {
-
- lock (Locker)
- {
- foreach (var @object in _objects.Values)
- {
- IDisposable disposable = @object as IDisposable;
- if (disposable != null)
- {
- try
- {
- disposable.Dispose();
- }
- catch (Exception) { }
- }
- }
-
- _objects.Clear();
- }
- }
- }
-
-
- public interface ILifecycle
- {
- void EjectAll();
- IObjectCache FindCache();
- }
-
- public static class Lifecycles
- {
- public static ILifecycle GetLifecycle(InstanceScope scope)
- {
- switch (scope)
- {
- case InstanceScope.PerRequest:
- return null;
-
- case InstanceScope.Singleton:
- return new SingletonLifecycle();
-
- case InstanceScope.HttpContext:
- return new HttpContextLifecycle();
-
- case InstanceScope.ThreadLocal:
- return new ThreadLocalStorageLifecycle();
-
- case InstanceScope.Hybrid:
- return new HybridLifecycle();
-
- case InstanceScope.HttpSession:
- return new HttpSessionLifecycle();
-
- case InstanceScope.HybridHttpSession:
- return new HybridSessionLifecycle();
- }
-
- throw new ArgumentOutOfRangeException("scope");
- }
- }
-
- public class ObjectBuilder
- {
- private readonly PipelineGraph _pipeline;
- private readonly InterceptorLibrary _library;
- private readonly IObjectCache _defaultCache;
-
- public ObjectBuilder(PipelineGraph pipeline, InterceptorLibrary library, IObjectCache defaultCache)
- {
- _pipeline = pipeline;
- _library = library;
- _defaultCache = defaultCache;
- }
-
- public object Resolve(Type pluginType, Instance instance, BuildSession session)
- {
- var cache = FindCache(pluginType, instance, session);
- lock (cache.Locker)
- {
- var returnValue = cache.Get(pluginType, instance);
- if (returnValue == null)
- {
- returnValue = ConstructNew(pluginType, instance, session);
-
-
- cache.Set(pluginType, instance, returnValue);
- }
-
- return returnValue;
- }
- }
-
- public object ConstructNew(Type pluginType, Instance instance, BuildSession session)
- {
- object returnValue = instance.Build(pluginType, session);
- return ApplyInterception(pluginType, returnValue, session, instance);
- }
-
- public virtual object ApplyInterception(Type pluginType, object actualValue, BuildSession session, Instance instance)
- {
- if (actualValue == null) return null;
-
- try
- {
- return _library.FindInterceptor(actualValue.GetType()).Process(actualValue, session);
- }
- catch (Exception e)
- {
- throw new StructureMapException(308, e, instance.Name, actualValue.GetType());
- }
-
-
- }
-
- public IObjectCache FindCache(Type pluginType, Instance instance, BuildSession session)
- {
- var lifecycle = _pipeline.ForType(pluginType).Lifecycle;
- return lifecycle == null
- ? _defaultCache
- : lifecycle.FindCache();
- }
- }
-}
\ No newline at end of file
Added: trunk/Source/StructureMap/Pipeline/ListCoercion.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ListCoercion.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/ListCoercion.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -0,0 +1,13 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace StructureMap.Pipeline
+{
+ public class ListCoercion<T> : IEnumerableCoercion where T : class
+ {
+ public object Convert(IEnumerable<object> enumerable)
+ {
+ return enumerable.Select(x => x as T).ToList();
+ }
+ }
+}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/Pipeline/LiteralInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/LiteralInstance.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/LiteralInstance.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -1,58 +0,0 @@
-using System;
-using StructureMap.Graph;
-using StructureMap.TypeRules;
-
-namespace StructureMap.Pipeline
-{
- public class LiteralInstance : ExpressedInstance<LiteralInstance>, IDisposable
- {
- private object _object;
-
- public LiteralInstance(object anObject)
- {
- if (anObject == null)
- {
- throw new ArgumentNullException("anObject");
- }
-
- _object = anObject;
- }
-
-
- protected override LiteralInstance thisInstance
- {
- get { return this; }
- }
-
- public object Object
- {
- get { return _object; }
- }
-
- protected override object build(Type pluginType, BuildSession session)
- {
- return _object;
- }
-
-
- protected override bool canBePartOfPluginFamily(PluginFamily family)
- {
- return _object.GetType().CanBeCastTo(family.PluginType);
- }
-
- protected override string getDescription()
- {
- return "Object: " + _object;
- }
-
- public override string ToString()
- {
- return string.Format("LiteralInstance: {0}", _object);
- }
-
- public void Dispose()
- {
- _object = null;
- }
- }
-}
\ No newline at end of file
Copied: trunk/Source/StructureMap/Pipeline/ObjectInstance.cs (from rev 282, trunk/Source/StructureMap/Pipeline/LiteralInstance.cs)
===================================================================
--- trunk/Source/StructureMap/Pipeline/ObjectInstance.cs (rev 0)
+++ trunk/Source/StructureMap/Pipeline/ObjectInstance.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -0,0 +1,71 @@
+using System;
+using StructureMap.Graph;
+using StructureMap.TypeRules;
+
+namespace StructureMap.Pipeline
+{
+ public class NullInstance : Instance
+ {
+ protected override string getDescription()
+ {
+ return "NULL";
+ }
+
+ protected override object build(Type pluginType, BuildSession session)
+ {
+ return null;
+ }
+ }
+
+ public class ObjectInstance : ExpressedInstance<ObjectInstance>, IDisposable
+ {
+ private object _object;
+
+ public ObjectInstance(object anObject)
+ {
+ if (anObject == null)
+ {
+ throw new ArgumentNullException("anObject");
+ }
+
+ _object = anObject;
+ }
+
+
+ protected override ObjectInstance thisInstance
+ {
+ get { return this; }
+ }
+
+ public object Object
+ {
+ get { return _object; }
+ }
+
+ protected override object build(Type pluginType, BuildSession session)
+ {
+ return _object;
+ }
+
+
+ protected override bool canBePartOfPluginFamily(PluginFamily family)
+ {
+ return _object.GetType().CanBeCastTo(family.PluginType);
+ }
+
+ protected override string getDescription()
+ {
+ return "Object: " + _object;
+ }
+
+ public override string ToString()
+ {
+ return string.Format("LiteralInstance: {0}", _object);
+ }
+
+ public void Dispose()
+ {
+ _object = null;
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/PropertyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/PropertyExpression.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/PropertyExpression.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -28,7 +28,7 @@
_instance.SetProperty(_propertyName, propertyValue.ToString());
else
{
- _instance.SetChild(_propertyName,new LiteralInstance(propertyValue));
+ _instance.Set(_propertyName,new ObjectInstance(propertyValue));
}
return (T) _instance;
}
Modified: trunk/Source/StructureMap/Pipeline/SmartInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/SmartInstance.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/Pipeline/SmartInstance.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -366,7 +366,7 @@
/// <returns></returns>
public SmartInstance<T> Is(CHILD value)
{
- return Is(new LiteralInstance(value));
+ return Is(new ObjectInstance(value));
}
/// <summary>
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -187,7 +187,7 @@
public Instance Inject<PLUGINTYPE>(PLUGINTYPE instance)
{
- var literalInstance = new LiteralInstance(instance);
+ var literalInstance = new ObjectInstance(instance);
ForType(typeof (PLUGINTYPE)).AddInstance(literalInstance);
SetDefault(typeof (PLUGINTYPE), literalInstance);
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/StructureMap.csproj 2009-12-24 04:53:19 UTC (rev 285)
@@ -158,13 +158,13 @@
<Compile Include="PipelineGraph.cs" />
<Compile Include="Pipeline\ConfiguredInstance.cs" />
<Compile Include="Pipeline\ConfiguredInstance.Expressions.cs" />
- <Compile Include="Pipeline\ConstructorInstance.cs" />
+ <Compile Include="Pipeline\LambdaInstance.cs" />
<Compile Include="Pipeline\DefaultInstance.cs" />
<Compile Include="Pipeline\IConfiguredInstance.cs" />
<Compile Include="Pipeline\ILocationPolicy.cs" />
<Compile Include="Pipeline\Instance.cs" />
<Compile Include="Pipeline\InstanceMementoPropertyReader.cs" />
- <Compile Include="Pipeline\LiteralInstance.cs" />
+ <Compile Include="Pipeline\ObjectInstance.cs" />
<Compile Include="Pipeline\Profile.cs" />
<Compile Include="Pipeline\ProfileManager.cs" />
<Compile Include="Pipeline\PrototypeInstance.cs" />
@@ -401,14 +401,19 @@
<Compile Include="Graph\PluginCache.cs" />
<Compile Include="Graph\SingleImplementationScanner.cs" />
<Compile Include="IContext.cs" />
+ <Compile Include="Pipeline\ArrayCoercion.cs" />
<Compile Include="Pipeline\ConditionalInstance.cs" />
+ <Compile Include="Pipeline\ConstructorInstance.cs" />
+ <Compile Include="Pipeline\EnumerableInstance.cs" />
<Compile Include="Pipeline\HttpContextLifecycle.cs" />
<Compile Include="Pipeline\HttpLifecycleBase.cs" />
<Compile Include="Pipeline\HttpSessionLifecycle.cs" />
<Compile Include="Pipeline\HybridSessionLifecycle.cs" />
+ <Compile Include="Pipeline\IEnumerableCoercion.cs" />
<Compile Include="Pipeline\ILifecycle.cs" />
<Compile Include="Pipeline\IObjectCache.cs" />
<Compile Include="Pipeline\Lifecycles.cs" />
+ <Compile Include="Pipeline\ListCoercion.cs" />
<Compile Include="Pipeline\MainObjectCache.cs" />
<Compile Include="Pipeline\NulloObjectCache.cs" />
<Compile Include="Pipeline\ObjectBuilder.cs" />
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -30,11 +30,12 @@
return new ReferencedInstance(key);
}
- public static bool IsGeneric(this Type type)
+ public static bool IsOpenGeneric(this Type type)
{
return type.IsGenericTypeDefinition || type.ContainsGenericParameters;
}
+
public static bool IsConcreteAndAssignableTo(this Type pluggedType, Type pluginType)
{
return pluggedType.IsConcrete() && pluginType.IsAssignableFrom(pluggedType);
@@ -124,12 +125,12 @@
return false;
}
- if (IsGeneric(pluginType))
+ if (IsOpenGeneric(pluginType))
{
return GenericsPluginGraph.CanBeCast(pluginType, pluggedType);
}
- if (IsGeneric(pluggedType))
+ if (IsOpenGeneric(pluggedType))
{
return false;
}
Modified: trunk/Source/StructureMap.AutoMocking/AutoMockedContainer.cs
===================================================================
--- trunk/Source/StructureMap.AutoMocking/AutoMockedContainer.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap.AutoMocking/AutoMockedContainer.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -29,7 +29,7 @@
{
object service = _locator.Service(pluginType);
- var instance = new LiteralInstance(service);
+ var instance = new ObjectInstance(service);
profileManager.SetDefault(pluginType, instance);
}
Modified: trunk/Source/StructureMap.Testing/BuildSessionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/BuildSessionTester.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap.Testing/BuildSessionTester.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -57,7 +57,7 @@
var session = new BuildSession(new PluginGraph());
var session2 = new BuildSession(new PluginGraph());
- var instance = new ConstructorInstance<ColorRule>(() =>
+ var instance = new LambdaInstance<ColorRule>(() =>
{
count++;
return new ColorRule("Red");
@@ -98,7 +98,7 @@
int count = 0;
var session = new BuildSession(new PluginGraph());
- var instance = new ConstructorInstance<ColorRule>(() =>
+ var instance = new LambdaInstance<ColorRule>(() =>
{
count++;
return new ColorRule("Red");
@@ -121,7 +121,7 @@
{
int count = 0;
- var instance = new ConstructorInstance<ColorRule>(() =>
+ var instance = new LambdaInstance<ColorRule>(() =>
{
count++;
return new ColorRule("Red");
@@ -221,8 +221,8 @@
PluginGraph graph = new PluginGraph();
PluginFamily family = graph.FindFamily(typeof(IService));
- family.AddInstance(new LiteralInstance(red).WithName("red"));
- family.AddInstance(new LiteralInstance(green).WithName("green"));
+ family.AddInstance(new ObjectInstance(red).WithName("red"));
+ family.AddInstance(new ObjectInstance(green).WithName("green"));
var session = new BuildSession(graph);
session.TryGetInstance<IService>("red").ShouldBeTheSameAs(red);
@@ -237,8 +237,8 @@
PluginGraph graph = new PluginGraph();
PluginFamily family = graph.FindFamily(typeof(IService));
- family.AddInstance(new LiteralInstance(red).WithName("red"));
- family.AddInstance(new LiteralInstance(green).WithName("green"));
+ family.AddInstance(new ObjectInstance(red).WithName("red"));
+ family.AddInstance(new ObjectInstance(green).WithName("green"));
var session = new BuildSession(graph);
session.GetInstance<IService>("red").ShouldBeTheSameAs(red);
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -82,7 +82,7 @@
.For<IWidget>().Use(theWidget);
PluginGraph graph = registry.Build();
- var instance = (LiteralInstance) graph.ProfileManager.GetDefault(typeof (IWidget), "something");
+ var instance = (ObjectInstance) graph.ProfileManager.GetDefault(typeof (IWidget), "something");
Assert.AreSame(theWidget, instance.Object);
}
@@ -98,7 +98,7 @@
.For<IWidget>().UseNamedInstance(theDefaultName)
.For<Rule>().UseNamedInstance("DefaultRule");
- LiteralInstance masterInstance =
+ ObjectInstance masterInstance =
registry.InstanceOf<IWidget>().Is.Object(new AWidget()).WithName(theDefaultName);
ProfileManager manager = registry.Build().ProfileManager;
Modified: trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -31,10 +31,10 @@
return session.BuildErrors[0];
}
- private ConstructorInstance<IWidget> errorInstance()
+ private LambdaInstance<IWidget> errorInstance()
{
return
- new ConstructorInstance<IWidget>(delegate() { throw new NotSupportedException("You can't make me!"); });
+ new LambdaInstance<IWidget>(delegate() { throw new NotSupportedException("You can't make me!"); });
}
[Test]
@@ -157,7 +157,7 @@
{
var session = new ValidationBuildSession(new PluginGraph());
- var instance = new LiteralInstance(new ColorWidget("Red"));
+ var instance = new ObjectInstance(new ColorWidget("Red"));
object widget1 = session.CreateInstance(typeof (IWidget), instance);
object widget2 = session.CreateInstance(typeof (IWidget), instance);
@@ -177,7 +177,7 @@
[Test]
public void Validate_a_single_object_with_both_a_passing_validation_method_and_a_failing_validation_method()
{
- var instance = new LiteralInstance(new WidgetWithOneValidationFailure());
+ var instance = new ObjectInstance(new WidgetWithOneValidationFailure());
ValidationBuildSession session =
validatedSession(registry => registry.InstanceOf<IWidget>().IsThis(instance));
Modified: trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -289,8 +289,8 @@
{
IInstanceFactory factory = getISomethingFactory();
- factory.AddInstance(new LiteralInstance(_red).WithName("Red"));
- factory.AddInstance(new LiteralInstance(_blue).WithName("Blue"));
+ factory.AddInstance(new ObjectInstance(_red).WithName("Red"));
+ factory.AddInstance(new ObjectInstance(_blue).WithName("Blue"));
factory.FindInstance("Red").ShouldNotBeNull();
@@ -324,12 +324,12 @@
{
IInstanceFactory factory = getISomethingFactory();
- factory.AddInstance(new LiteralInstance(_red).WithName("Red"));
- var oldBlue = new LiteralInstance(_blue).WithName("Blue");
+ factory.AddInstance(new ObjectInstance(_red).WithName("Red"));
+ var oldBlue = new ObjectInstance(_blue).WithName("Blue");
factory.AddInstance(oldBlue);
// Replace Blue
- var newBlue = new LiteralInstance(_orange).WithName("Blue");
+ var newBlue = new ObjectInstance(_orange).WithName("Blue");
factory.AddInstance(newBlue);
factory.FindInstance("Blue").ShouldBeTheSameAs(newBlue);
Modified: trunk/Source/StructureMap.Testing/Graph/InstanceFactoryTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/InstanceFactoryTester.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap.Testing/Graph/InstanceFactoryTester.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -82,9 +82,9 @@
var factory = new InstanceFactory(typeof (IWidget));
var family = new PluginFamily(typeof (IWidget));
- family.AddInstance(new LiteralInstance(new AWidget()).WithName("New"));
- family.AddInstance(new LiteralInstance(new AWidget()).WithName("New2"));
- family.AddInstance(new LiteralInstance(new AWidget()).WithName("New3"));
+ family.AddInstance(new ObjectInstance(new AWidget()).WithName("New"));
+ family.AddInstance(new ObjectInstance(new AWidget()).WithName("New2"));
+ family.AddInstance(new ObjectInstance(new AWidget()).WithName("New3"));
factory.ImportFrom(family);
@@ -130,11 +130,11 @@
public void Merge_from_PluginFamily_will_not_replace_an_existing_instance()
{
var factory = new InstanceFactory(typeof (IWidget));
- LiteralInstance instance1 = new LiteralInstance(new AWidget()).WithName("New");
+ ObjectInstance instance1 = new ObjectInstance(new AWidget()).WithName("New");
factory.AddInstance(instance1);
var family = new PluginFamily(typeof (IWidget));
- family.AddInstance(new LiteralInstance(new AWidget()).WithName("New"));
+ family.AddInstance(new ObjectInstance(new AWidget()).WithName("New"));
factory.ImportFrom(family);
@@ -191,7 +191,7 @@
[Test]
public void the_instances_are_cloned_so_that_new_instances_are_NOT_injected_into_()
{
- clone.AddInstance(new LiteralInstance(new DefaultGateway()));
+ clone.AddInstance(new ObjectInstance(new DefaultGateway()));
factory.AllInstances.Count().ShouldEqual(2);
clone.AllInstances.Count().ShouldEqual(3);
Modified: trunk/Source/StructureMap.Testing/Graph/PluginFamilyMergeTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/PluginFamilyMergeTester.cs 2009-12-23 19:54:52 UTC (rev 284)
+++ trunk/Source/StructureMap.Testing/Graph/PluginFamilyMergeTester.cs 2009-12-24 04:53:19 UTC (rev 285)
@@ -12,7 +12,7 @@
public void Add_instance_that_does_not_exist_in_destination()
{
var source = new PluginFamily(typeof (IWidget));
- var sourceInstance = new LiteralInstance(new AWidget());
+ var sourceInstance = new ObjectInstance(new AWidget());
source.AddInstance(sourceInstance);
var destination = new PluginFamily(typeof (IWidget));
@@ -25,11 +25,11 @@
public void Do_not_override_named_instance()
{
var source = new PluginFamily(typeof (IWidget));
- LiteralInstance sourceInstance = new LiteralInstance(new AWidget()).WithName("New");
+ ObjectInstance sourceInstance = new ObjectInstance(new AWidget()).WithName("New");
source.AddInstance(sourceInstance);
var destination = new PluginFamily(typeof (IWidget));
- LiteralInstance destinationInstance = new LiteralInstance(new AWidget()).WithName("New");
+ ObjectInstance destinationInstance = new ObjectInstance(new AWidget()).WithName("New");
destination.AddInstance(destinationInstance);
destination.ImportFrom(source);
Modified: trunk/Source/StructureMap.Testing/Graph/PluginTester.cs
===================================================================
--- tru...
[truncated message content] |
|
From: <fli...@us...> - 2009-12-23 19:55:04
|
Revision: 284
http://structuremap.svn.sourceforge.net/structuremap/?rev=284&view=rev
Author: flimflan
Date: 2009-12-23 19:54:52 +0000 (Wed, 23 Dec 2009)
Log Message:
-----------
Get rid of uses of obsolete InstanceOf<T>
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
trunk/Source/StructureMap.AutoMocking/AutoMocker.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-23 19:36:53 UTC (rev 283)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-23 19:54:52 UTC (rev 284)
@@ -103,7 +103,12 @@
return alterAndContinue(family => family.AddInstance(instance));
}
+ public GenericFamilyExpression Add(object instance)
+ {
+ return Add(new LiteralInstance(instance));
+ }
+
/// <summary>
/// Sets the object creation of the instances of the PluginType. For example: PerRequest,
/// Singleton, ThreadLocal, HttpContext, or Hybrid
Modified: trunk/Source/StructureMap.AutoMocking/AutoMocker.cs
===================================================================
--- trunk/Source/StructureMap.AutoMocking/AutoMocker.cs 2009-12-23 19:36:53 UTC (rev 283)
+++ trunk/Source/StructureMap.AutoMocking/AutoMocker.cs 2009-12-23 19:54:52 UTC (rev 284)
@@ -4,6 +4,7 @@
using System.Reflection;
using StructureMap.Graph;
using System.Linq;
+using StructureMap.Pipeline;
namespace StructureMap.AutoMocking
{
@@ -215,7 +216,7 @@
public T AddAdditionalMockFor<T>() where T : class
{
var mock = _serviceLocator.Service<T>();
- _container.Configure(r => r.InstanceOf<T>().Is.Object(mock));
+ _container.Configure(r => r.For(typeof (T)).Add(mock));
return mock;
}
@@ -265,7 +266,7 @@
{
foreach (T t in stubs)
{
- x.InstanceOf<T>().Is.Object(t);
+ x.For(typeof(T)).Add(t);
}
});
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-23 19:37:00
|
Revision: 283
http://structuremap.svn.sourceforge.net/structuremap/?rev=283&view=rev
Author: jeremydmiller
Date: 2009-12-23 19:36:53 +0000 (Wed, 23 Dec 2009)
Log Message:
-----------
added more convenience methods to the generic family expression
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
trunk/Source/StructureMap.DebuggerVisualizers.Testing/Program.cs
trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs
trunk/Source/StructureMap.Testing/Examples/Interception.cs
trunk/Source/StructureMap.Testing/Examples/RegisteringWithTheAPI.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
Added Paths:
-----------
trunk/Source/StructureMap.Testing/Bugs/AddValueDirectlyWithGenericUsage.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-21 23:11:23 UTC (rev 282)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2009-12-23 19:36:53 UTC (rev 283)
@@ -81,6 +81,7 @@
/// </summary>
/// <typeparam name="CONCRETETYPE"></typeparam>
/// <returns></returns>
+ [Obsolete("Prefer the usage For<ISomething>().Use<Something>()")]
public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIsConcreteType<CONCRETETYPE>()
where CONCRETETYPE : PLUGINTYPE
{
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-21 23:11:23 UTC (rev 282)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-23 19:36:53 UTC (rev 283)
@@ -67,6 +67,19 @@
return TheDefaultIsConcreteType(concreteType);
}
+ /// <summary>
+ /// Shortcut to add a value by type
+ /// </summary>
+ /// <param name="value"></param>
+ /// <returns></returns>
+ public LiteralInstance Use(object value)
+ {
+ var instance = new LiteralInstance(value);
+ Use(instance);
+
+ return instance;
+ }
+
/// <summary>
/// Shortcut method to add an additional Instance to this Plugin Type
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2009-12-21 23:11:23 UTC (rev 282)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2009-12-23 19:36:53 UTC (rev 283)
@@ -103,6 +103,7 @@
/// </summary>
/// <typeparam name="PLUGGEDTYPE"></typeparam>
/// <returns></returns>
+ [Obsolete("Favor For<ISomething>().Use<Something>()")]
SmartInstance<PLUGGEDTYPE> OfConcreteType<PLUGGEDTYPE>() where PLUGGEDTYPE : T;
/// <summary>
@@ -112,6 +113,7 @@
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
+ [Obsolete("Favor For<ISomething>().Use(typeof(Something))")]
ConfiguredInstance OfConcreteType(Type type);
/// <summary>
@@ -120,6 +122,7 @@
/// </summary>
/// <param name="func"></param>
/// <returns></returns>
+ [Obsolete("Prefer For<T>().Use(Func<T> func) or For<T>().Add(Func<T> func)")]
ConstructorInstance<T> ConstructedBy(Func<T> func);
/// <summary>
Modified: trunk/Source/StructureMap.DebuggerVisualizers.Testing/Program.cs
===================================================================
--- trunk/Source/StructureMap.DebuggerVisualizers.Testing/Program.cs 2009-12-21 23:11:23 UTC (rev 282)
+++ trunk/Source/StructureMap.DebuggerVisualizers.Testing/Program.cs 2009-12-23 19:36:53 UTC (rev 283)
@@ -1,4 +1,4 @@
-using System.Diagnostics;
+using System.Diagnostics;
using System.Windows.Forms;
namespace StructureMap.DebuggerVisualizers.Testing
Added: trunk/Source/StructureMap.Testing/Bugs/AddValueDirectlyWithGenericUsage.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/AddValueDirectlyWithGenericUsage.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/Bugs/AddValueDirectlyWithGenericUsage.cs 2009-12-23 19:36:53 UTC (rev 283)
@@ -0,0 +1,23 @@
+using NUnit.Framework;
+using StructureMap.Testing.Widget;
+
+namespace StructureMap.Testing.Bugs
+{
+ [TestFixture]
+ public class AddValueDirectlyWithGenericUsage
+ {
+ [SetUp]
+ public void SetUp()
+ {
+ }
+
+ [Test]
+ public void should_be_able_to_resolve_from_the_generic_family_expression()
+ {
+ var widget = new AWidget();
+ var container = new Container(x => x.For(typeof (IWidget)).Use(widget).WithName("mine"));
+
+ container.GetInstance<IWidget>("mine").ShouldBeTheSameAs(widget);
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs 2009-12-21 23:11:23 UTC (rev 282)
+++ trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs 2009-12-23 19:36:53 UTC (rev 283)
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
Modified: trunk/Source/StructureMap.Testing/Examples/Interception.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Examples/Interception.cs 2009-12-21 23:11:23 UTC (rev 282)
+++ trunk/Source/StructureMap.Testing/Examples/Interception.cs 2009-12-23 19:36:53 UTC (rev 283)
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
Modified: trunk/Source/StructureMap.Testing/Examples/RegisteringWithTheAPI.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Examples/RegisteringWithTheAPI.cs 2009-12-21 23:11:23 UTC (rev 282)
+++ trunk/Source/StructureMap.Testing/Examples/RegisteringWithTheAPI.cs 2009-12-23 19:36:53 UTC (rev 283)
@@ -1,4 +1,4 @@
-using StructureMap.Configuration.DSL;
+using StructureMap.Configuration.DSL;
namespace StructureMap.Testing.Examples
{
Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-21 23:11:23 UTC (rev 282)
+++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-23 19:36:53 UTC (rev 283)
@@ -178,6 +178,7 @@
<Compile Include="AutoMocking\RhinoMockRepositoryProxyTester.cs" />
<Compile Include="AutoWiringExamples.cs" />
<Compile Include="BidirectionalDependencies.cs" />
+ <Compile Include="Bugs\AddValueDirectlyWithGenericUsage.cs" />
<Compile Include="Bugs\BuildUpBug.cs" />
<Compile Include="Bugs\FillAllPropertiesShouldWorkForAlreadyConfiguredPluginsBug.cs" />
<Compile Include="Bugs\HttpSessionNullRefBug.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fli...@us...> - 2009-12-21 23:11:33
|
Revision: 282
http://structuremap.svn.sourceforge.net/structuremap/?rev=282&view=rev
Author: flimflan
Date: 2009-12-21 23:11:23 +0000 (Mon, 21 Dec 2009)
Log Message:
-----------
Allow specifying a child array by type for a configured instance without using generics.
Modified Paths:
--------------
trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2009-12-19 04:03:09 UTC (rev 281)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2009-12-21 23:11:23 UTC (rev 282)
@@ -96,6 +96,14 @@
return new ChildArrayExpression(this, propertyName);
}
+ public ChildArrayExpression ChildArray(Type pluginType)
+ {
+ //TODO: add validation check
+ validateTypeIsArray(pluginType);
+ var propertyName = findPropertyName(pluginType);
+ return ChildArray(propertyName);
+ }
+
/// <summary>
/// Inline definition of a dependency array like IService[] or IHandler[]
/// </summary>
@@ -103,10 +111,7 @@
/// <returns></returns>
public ChildArrayExpression ChildArray<PLUGINTYPE>()
{
- validateTypeIsArray<PLUGINTYPE>();
-
- string propertyName = findPropertyName<PLUGINTYPE>();
- return ChildArray<PLUGINTYPE>(propertyName);
+ return ChildArray(typeof (PLUGINTYPE));
}
/// <summary>
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-19 04:03:09 UTC (rev 281)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-21 23:11:23 UTC (rev 282)
@@ -255,7 +255,12 @@
protected static void validateTypeIsArray<PLUGINTYPE>()
{
- if (!typeof (PLUGINTYPE).IsArray)
+ validateTypeIsArray(typeof(PLUGINTYPE));
+ }
+
+ protected static void validateTypeIsArray(Type pluginType)
+ {
+ if (!pluginType.IsArray)
{
throw new StructureMapException(307);
}
Modified: trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs 2009-12-19 04:03:09 UTC (rev 281)
+++ trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs 2009-12-21 23:11:23 UTC (rev 282)
@@ -198,6 +198,40 @@
}
[Test]
+ public void HasProperty_for_generic_child_array_when_property_name_is_inferred()
+ {
+ var instance = new ConfiguredInstance(typeof(UsesGateways));
+
+ IConfiguredInstance configuredInstance = instance;
+ configuredInstance.HasProperty("gateways").ShouldBeFalse();
+
+ instance.ChildArray<IGateway[]>().Contains(new DefaultInstance());
+ configuredInstance.HasProperty("gateways").ShouldBeTrue();
+ }
+
+ [Test]
+ public void HasProperty_for_child_array_when_property_name_is_inferred()
+ {
+ var instance = new ConfiguredInstance(typeof(UsesGateways));
+
+ IConfiguredInstance configuredInstance = instance;
+ configuredInstance.HasProperty("gateways").ShouldBeFalse();
+
+ instance.ChildArray(typeof(IGateway[])).Contains(new DefaultInstance());
+ configuredInstance.HasProperty("gateways").ShouldBeTrue();
+ }
+
+ public class UsesGateways
+ {
+ private readonly IGateway[] _gateways;
+
+ public UsesGateways(IGateway[] gateways)
+ {
+ _gateways = gateways;
+ }
+ }
+
+ [Test]
public void Property_cannot_be_found_so_throw_205()
{
try
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-19 04:50:23
|
Revision: 281
http://structuremap.svn.sourceforge.net/structuremap/?rev=281&view=rev
Author: jeremydmiller
Date: 2009-12-19 04:03:09 +0000 (Sat, 19 Dec 2009)
Log Message:
-----------
marking some old stuff obsolete
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-19 03:41:43 UTC (rev 280)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-19 04:03:09 UTC (rev 281)
@@ -8,55 +8,8 @@
namespace StructureMap.Configuration.DSL
{
- public interface IRegistry
- {
- // Registering Types -- BuildInstancesOf() and ForRequestedType() are Synonyms
- CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>();
- CreatePluginFamilyExpression<PLUGINTYPE> ForRequestedType<PLUGINTYPE>();
-
- GenericFamilyExpression ForRequestedType(Type pluginType);
- // Shortcut for configuring the default configuration of a concrete type
- Registry.BuildWithExpression<T> ForConcreteType<T>();
- // Adding additional Instances of a PluginType
- IsExpression<T> InstanceOf<T>();
- GenericIsExpression InstanceOf(Type pluginType);
-
- // Creating or Adding to a Profile
- ProfileExpression CreateProfile(string profileName);
- void CreateProfile(string profileName, Action<ProfileExpression> action);
-
- // Interception
- void RegisterInterceptor(TypeInterceptor interceptor);
- MatchedTypeInterceptor IfTypeMatches(Predicate<Type> match);
-
- // Type Scanning and Auto Registration
- void Scan(Action<IAssemblyScanner> action);
-
- // Controlling Setter Injection Behavior
- CreatePluginFamilyExpression<PLUGINTYPE> FillAllPropertiesOfType<PLUGINTYPE>();
- void SetAllProperties(Action<SetterConvention> action);
-
- /// <summary>
- /// Use to programmatically select the constructor function of a concrete
- /// class. Applies globally to all Containers in a single AppDomain.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="expression"></param>
- void SelectConstructor<T>(Expression<Func<T>> expression);
-
- /// <summary>
- /// Use to "forward" the request for FROM to the default of TO
- /// Useful for singleton services that implement multiple
- /// interface roles
- /// </summary>
- /// <typeparam name="FROM"></typeparam>
- /// <typeparam name="TO"></typeparam>
- void Forward<FROM, TO>() where FROM : class where TO : class;
- }
-
-
/// <summary>
/// A Registry class provides methods and grammars for configuring a Container or ObjectFactory.
/// Using a Registry subclass is the recommended way of configuring a StructureMap Container.
@@ -70,7 +23,7 @@
/// }
/// }
/// </example>
- public class Registry : IRegistry
+ public class Registry
{
private readonly List<Action<PluginGraph>> _actions = new List<Action<PluginGraph>>();
private readonly List<Action> _basicActions = new List<Action>();
@@ -123,6 +76,7 @@
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <returns></returns>
+ [Obsolete("Change to For<T>()")]
public CreatePluginFamilyExpression<PLUGINTYPE> BuildInstancesOf<PLUGINTYPE>()
{
return new CreatePluginFamilyExpression<PLUGINTYPE>(this);
@@ -134,6 +88,7 @@
/// meant for registering open generic types
/// </summary>
/// <returns></returns>
+ [Obsolete("Change to For(pluginType)")]
public GenericFamilyExpression ForRequestedType(Type pluginType)
{
return new GenericFamilyExpression(pluginType, this);
@@ -160,6 +115,7 @@
/// </summary>
/// <typeparam name="PLUGINTYPE"></typeparam>
/// <returns></returns>
+ [Obsolete("Change to For<T>()")]
public CreatePluginFamilyExpression<PLUGINTYPE> ForRequestedType<PLUGINTYPE>()
{
return new CreatePluginFamilyExpression<PLUGINTYPE>(this);
@@ -195,6 +151,7 @@
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
+ [Obsolete("Prefer For<T>().Add() instead")]
public IsExpression<T> InstanceOf<T>()
{
return new InstanceExpression<T>(instance =>
@@ -210,6 +167,7 @@
/// </summary>
/// <param name="pluginType"></param>
/// <returns></returns>
+ [Obsolete("Prefer For(type).Add() instead")]
public GenericIsExpression InstanceOf(Type pluginType)
{
return
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-19 03:41:54
|
Revision: 280
http://structuremap.svn.sourceforge.net/structuremap/?rev=280&view=rev
Author: jeremydmiller
Date: 2009-12-19 03:41:43 +0000 (Sat, 19 Dec 2009)
Log Message:
-----------
killed off the obsolete configure() method in Registry.
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs
trunk/Source/StructureMap.Testing.Widget5/WidgetRegistry.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-19 03:05:37 UTC (rev 279)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2009-12-19 03:41:43 UTC (rev 280)
@@ -75,19 +75,22 @@
private readonly List<Action<PluginGraph>> _actions = new List<Action<PluginGraph>>();
private readonly List<Action> _basicActions = new List<Action>();
- public Registry()
+ /// <summary>
+ /// Imports the configuration from another registry into this registry.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ public void IncludeRegistry<T>() where T : Registry, new()
{
- configure();
+ _actions.Add(g => new T().ConfigurePluginGraph(g));
}
/// <summary>
- /// You can overide this method as a place to put the Registry DSL
- /// declarations. This is not mandatory.
+ /// Imports the configuration from another registry into this registry.
/// </summary>
- [Obsolete("configure() is unnecessary. All declarations can be made in the constructor of a Registry or any other method")]
- protected virtual void configure()
+ /// <param name="registry"></param>
+ public void IncludeRegistry(Registry registry)
{
- // no-op;
+ _actions.Add(registry.ConfigurePluginGraph);
}
protected void registerAction(Action action)
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2009-12-19 03:05:37 UTC (rev 279)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2009-12-19 03:41:43 UTC (rev 280)
@@ -88,15 +88,17 @@
{
private int _count;
+ public TestRegistry2()
+ {
+ _count++;
+ }
+
public int ExecutedCount
{
get { return _count; }
}
- protected override void configure()
- {
- _count++;
- }
+
}
public class FakeGateway : IGateway
Modified: trunk/Source/StructureMap.Testing.Widget5/WidgetRegistry.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget5/WidgetRegistry.cs 2009-12-19 03:05:37 UTC (rev 279)
+++ trunk/Source/StructureMap.Testing.Widget5/WidgetRegistry.cs 2009-12-19 03:41:43 UTC (rev 280)
@@ -5,7 +5,7 @@
{
public class RedGreenRegistry : Registry
{
- protected override void configure()
+ public RedGreenRegistry()
{
InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Red").WithName("Red");
InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Green").WithName(
@@ -29,14 +29,13 @@
public class YellowBlueRegistry : Registry
{
- protected override void configure()
+ public YellowBlueRegistry()
{
InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Yellow").WithName(
"Yellow");
InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithProperty("color").EqualTo("Blue").WithName("Blue");
}
-
public override bool Equals(object obj)
{
if (this == obj) return true;
@@ -68,7 +67,7 @@
public class BrownBlackRegistry : Registry
{
- protected override void configure()
+ public BrownBlackRegistry()
{
InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithProperty("color").EqualTo("Brown").WithName(
"Brown");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-19 03:05:47
|
Revision: 279
http://structuremap.svn.sourceforge.net/structuremap/?rev=279&view=rev
Author: jeremydmiller
Date: 2009-12-19 03:05:37 +0000 (Sat, 19 Dec 2009)
Log Message:
-----------
Fixing an old, old bug with defensive programming being too tight around checking CanCastTo()
Modified Paths:
--------------
trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs
trunk/Source/StructureMap/InstanceBuilderList.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap.Testing/Graph/TypeFindingTester.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
Added Paths:
-----------
trunk/Source/StructureMap.Testing/Bugs/InjectByFuncWithNoPublicConstructors.cs
Modified: trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs
===================================================================
--- trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs 2009-12-19 02:29:03 UTC (rev 278)
+++ trunk/Source/StructureMap/Graph/FindAllTypesFilter.cs 2009-12-19 03:05:37 UTC (rev 279)
@@ -22,10 +22,11 @@
public void Process(Type type, PluginGraph graph)
{
- if (!type.CanBeCastTo(_pluginType)) return;
-
- var name = _getName(type);
- graph.AddType(_pluginType, type, name);
+ if (type.CanBeCastTo(_pluginType) && Constructor.HasConstructors(type))
+ {
+ var name = _getName(type);
+ graph.AddType(_pluginType, type, name);
+ }
}
#endregion
Modified: trunk/Source/StructureMap/InstanceBuilderList.cs
===================================================================
--- trunk/Source/StructureMap/InstanceBuilderList.cs 2009-12-19 02:29:03 UTC (rev 278)
+++ trunk/Source/StructureMap/InstanceBuilderList.cs 2009-12-19 03:05:37 UTC (rev 279)
@@ -43,7 +43,7 @@
}
// Add a missing PluggedType if we can
- if (pluggedType.CanBeCastTo(_pluginType))
+ if (pluggedType.CanBeCastTo(_pluginType) && Constructor.HasConstructors(pluggedType))
{
var plugin = new Plugin(pluggedType);
processPlugin(plugin);
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-19 02:29:03 UTC (rev 278)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-19 03:05:37 UTC (rev 279)
@@ -179,7 +179,7 @@
protected override bool canBePartOfPluginFamily(PluginFamily family)
{
- return _pluggedType.CanBeCastTo(family.PluginType);
+ return _pluggedType.CanBeCastTo(family.PluginType) && Constructor.HasConstructors(_pluggedType);
}
internal override bool Matches(Plugin plugin)
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-19 02:29:03 UTC (rev 278)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-19 03:05:37 UTC (rev 279)
@@ -124,11 +124,6 @@
return false;
}
- if (noPublicConstructors(pluggedType))
- {
- return false;
- }
-
if (IsGeneric(pluginType))
{
return GenericsPluginGraph.CanBeCast(pluginType, pluggedType);
@@ -164,11 +159,6 @@
return returnValue;
}
- private static bool noPublicConstructors(Type pluggedType)
- {
- return pluggedType.GetConstructors().Length == 0;
- }
-
public static bool IsString(this Type type)
{
return type.Equals(typeof(string));
Added: trunk/Source/StructureMap.Testing/Bugs/InjectByFuncWithNoPublicConstructors.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/InjectByFuncWithNoPublicConstructors.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/Bugs/InjectByFuncWithNoPublicConstructors.cs 2009-12-19 03:05:37 UTC (rev 279)
@@ -0,0 +1,34 @@
+using NUnit.Framework;
+
+namespace StructureMap.Testing.Bugs
+{
+ [TestFixture]
+ public class InjectByFuncWithNoPublicConstructors
+ {
+ [SetUp]
+ public void SetUp()
+ {
+ }
+
+ [Test]
+ public void register_with_generic()
+ {
+ var container = new Container(x =>
+ {
+ x.For<ClassThatIsBuiltByStatic>().Use(c => ClassThatIsBuiltByStatic.Build());
+ });
+
+ container.GetInstance<ClassThatIsBuiltByStatic>().ShouldNotBeNull();
+ }
+ }
+
+ public class ClassThatIsBuiltByStatic
+ {
+ public static ClassThatIsBuiltByStatic Build()
+ {
+ return new ClassThatIsBuiltByStatic();
+ }
+
+ private ClassThatIsBuiltByStatic(){}
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Graph/TypeFindingTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/TypeFindingTester.cs 2009-12-19 02:29:03 UTC (rev 278)
+++ trunk/Source/StructureMap.Testing/Graph/TypeFindingTester.cs 2009-12-19 03:05:37 UTC (rev 279)
@@ -29,13 +29,7 @@
private IContainer container;
- [Test]
- public void DoNotFindPluginWithNoPublicCTOR()
- {
- Assert.IsFalse(typeof (GreenType).CanBeCastTo(typeof (TypeIWantToFind)));
- }
-
[Test]
public void FoundTheRightNumberOfInstancesForATypeWithNoPlugins()
{
Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-19 02:29:03 UTC (rev 278)
+++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-19 03:05:37 UTC (rev 279)
@@ -182,6 +182,7 @@
<Compile Include="Bugs\FillAllPropertiesShouldWorkForAlreadyConfiguredPluginsBug.cs" />
<Compile Include="Bugs\HttpSessionNullRefBug.cs" />
<Compile Include="Bugs\IDictionaryAndXmlBugTester.cs" />
+ <Compile Include="Bugs\InjectByFuncWithNoPublicConstructors.cs" />
<Compile Include="Bugs\LambdaCreatesNullBugTester.cs" />
<Compile Include="Bugs\MixedConfigureAndInitializeMissingInstanceProblem.cs" />
<Compile Include="Bugs\ScanIndexerBugTester.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-19 02:29:11
|
Revision: 278
http://structuremap.svn.sourceforge.net/structuremap/?rev=278&view=rev
Author: jeremydmiller
Date: 2009-12-19 02:29:03 +0000 (Sat, 19 Dec 2009)
Log Message:
-----------
fixing a lil' bitty bug with TryGetInstance and open generic types
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Emitting/InstanceBuilderAssembly.cs
trunk/Source/StructureMap/Extensions.cs
trunk/Source/StructureMap/Graph/Plugin.cs
trunk/Source/StructureMap/Graph/PluginCache.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap/TypeExtensions.cs
trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
Added Paths:
-----------
trunk/Source/StructureMap.Testing/Bugs/TryGetInstanceWithOpenGenericsBugTester.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -90,6 +90,7 @@
return alterAndContinue(family => family.AddInstance(instance));
}
+
/// <summary>
/// Sets the object creation of the instances of the PluginType. For example: PerRequest,
/// Singleton, ThreadLocal, HttpContext, or Hybrid
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap/Container.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -447,7 +447,7 @@
};
// Fixes a mild bug. The child container should inject itself
- container._pipelineGraph.Inject<IContainer>(container);
+ container.Configure(x => x.For<IContainer>().Use(container));
return container;
}
Modified: trunk/Source/StructureMap/Emitting/InstanceBuilderAssembly.cs
===================================================================
--- trunk/Source/StructureMap/Emitting/InstanceBuilderAssembly.cs 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap/Emitting/InstanceBuilderAssembly.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Reflection;
using StructureMap.Graph;
+using System.Linq;
namespace StructureMap.Emitting
{
@@ -18,10 +19,7 @@
string assemblyName = "Builders" + guidString();
_dynamicAssembly = new DynamicAssembly(assemblyName);
- foreach (Plugin plugin in plugins)
- {
- processPlugin(plugin);
- }
+ plugins.Where(x => x.IsNotOpenGeneric()).Each(x => processPlugin(x));
}
private static string guidString()
Modified: trunk/Source/StructureMap/Extensions.cs
===================================================================
--- trunk/Source/StructureMap/Extensions.cs 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap/Extensions.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -7,6 +7,16 @@
{
internal static class StringExtensions
{
+ public static IEnumerable<T> Each<T>(this IEnumerable<T> enumerable, Action<T> action)
+ {
+ foreach (T target in enumerable)
+ {
+ action(target);
+ }
+
+ return enumerable;
+ }
+
public static string ToFormat(this string template, params object[] parameters)
{
return string.Format(template, parameters);
Modified: trunk/Source/StructureMap/Graph/Plugin.cs
===================================================================
--- trunk/Source/StructureMap/Graph/Plugin.cs 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap/Graph/Plugin.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -3,6 +3,7 @@
using System.Linq.Expressions;
using System.Reflection;
using StructureMap.Pipeline;
+using StructureMap.TypeRules;
namespace StructureMap.Graph
{
@@ -165,5 +166,10 @@
{
_setters.UseSetterRule(rule);
}
+
+ public bool IsNotOpenGeneric()
+ {
+ return !_pluggedType.IsGeneric();
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/PluginCache.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginCache.cs 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap/Graph/PluginCache.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -4,6 +4,7 @@
using System.Reflection;
using StructureMap.Emitting;
using StructureMap.Util;
+using StructureMap.TypeRules;
namespace StructureMap.Graph
{
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -202,7 +202,16 @@
{
if (instance == null) return;
- _children.Add(name, instance);
+ if (_children.ContainsKey(name))
+ {
+ _children[name] = instance;
+ }
+ else
+ {
+ _children.Add(name, instance);
+ }
+
+
}
protected void setChildArray(string name, Instance[] array)
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -4,6 +4,7 @@
using StructureMap.Diagnostics;
using StructureMap.Graph;
using StructureMap.Pipeline;
+using StructureMap.TypeRules;
namespace StructureMap
{
@@ -228,10 +229,13 @@
public bool HasDefaultForPluginType(Type pluginType)
{
- var typeToFind = pluginType.IsGenericType ? pluginType.GetGenericTypeDefinition() : pluginType;
- var configuration = PluginTypes.FirstOrDefault(p => p.PluginType == typeToFind);
-
- return configuration == null ? false : configuration.Default != null;
+ var factory = ForType(pluginType);
+ if (_profileManager.GetDefault(pluginType) != null)
+ {
+ return true;
+ }
+
+ return (factory.AllInstances.Count() == 1);
}
public bool HasInstance(Type pluginType, string instanceKey)
Modified: trunk/Source/StructureMap/TypeExtensions.cs
===================================================================
--- trunk/Source/StructureMap/TypeExtensions.cs 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap/TypeExtensions.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -8,6 +8,17 @@
{
public static class TypeExtensions
{
+ public static bool Closes(this Type type, Type openType)
+ {
+ var baseType = type.BaseType;
+ if (baseType == null) return false;
+
+ var closes = baseType.IsGenericType && baseType.GetGenericTypeDefinition() == openType;
+ if (closes) return true;
+
+ return type.BaseType == null ? false : type.BaseType.Closes(openType);
+ }
+
public static bool IsInNamespace(this Type type, string nameSpace)
{
return type.Namespace.StartsWith(nameSpace);
@@ -48,13 +59,20 @@
{
if (!pluggedType.IsConcrete()) return null;
- foreach (var interfaceType in pluggedType.GetInterfaces())
+ if (templateType.IsInterface)
{
- if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == templateType)
+ foreach (var interfaceType in pluggedType.GetInterfaces())
{
- return interfaceType;
+ if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == templateType)
+ {
+ return interfaceType;
+ }
}
}
+ else if (pluggedType.BaseType.IsGenericType && pluggedType.BaseType.GetGenericTypeDefinition() == templateType)
+ {
+ return pluggedType.BaseType;
+ }
return pluggedType.BaseType == typeof(object) ? null : pluggedType.BaseType.FindInterfaceThatCloses(templateType);
}
@@ -183,7 +201,7 @@
public static bool IsConcrete(this Type type)
{
- return !type.IsAbstract;
+ return !type.IsAbstract && !type.IsInterface;
}
public static bool IsAutoFillable(this Type type)
Added: trunk/Source/StructureMap.Testing/Bugs/TryGetInstanceWithOpenGenericsBugTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Bugs/TryGetInstanceWithOpenGenericsBugTester.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/Bugs/TryGetInstanceWithOpenGenericsBugTester.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -0,0 +1,57 @@
+using System.Diagnostics;
+using NUnit.Framework;
+using StructureMap.TypeRules;
+
+namespace StructureMap.Testing.Bugs
+{
+ [TestFixture]
+ public class TryGetInstanceWithOpenGenericsBugTester
+ {
+ [SetUp]
+ public void SetUp()
+ {
+ }
+
+ [Test]
+ public void can_get_closing_type_if_starting_from_a_base_type()
+ {
+ typeof (ClosedClass<string>).FindInterfaceThatCloses(typeof (IOpenClass<>)).ShouldEqual(
+ typeof (IOpenClass<string>));
+
+
+ }
+
+ [Test]
+ public void try_get_instance_fills_from_open_generic()
+ {
+ var container = new Container(x =>
+ {
+ x.For(typeof(IOpenClass<>)).AddType(typeof(ClosedClass<>));
+ });
+
+ container.TryGetInstance<IOpenClass<string>>().ShouldBeOfType<ClosedClass<string>>();
+ }
+
+ [Test]
+ public void try_get_instance_fills_from_open_generic_on_conventions()
+ {
+ var container = new Container(x =>
+ {
+ x.Scan(o =>
+ {
+ o.TheCallingAssembly();
+ o.ConnectImplementationsToTypesClosing(typeof(IOpenClass<>));
+ });
+ });
+
+ Debug.WriteLine(container.WhatDoIHave());
+
+ container.GetInstance<IOpenClass<string>>().ShouldBeOfType<ClosedStringClass>();
+ container.TryGetInstance<IOpenClass<string>>().ShouldBeOfType<ClosedStringClass>();
+ }
+ }
+
+ public class IOpenClass<T>{}
+ public class ClosedClass<T> : IOpenClass<T>{}
+ public class ClosedStringClass : IOpenClass<string>{}
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap.Testing/Pipeline/NestedContainerSupportTester.cs 2009-12-19 02:29:03 UTC (rev 278)
@@ -14,7 +14,32 @@
{
}
+ public class ContainerHolder
+ {
+ private readonly IContainer _container;
+
+ public ContainerHolder(IContainer container)
+ {
+ _container = container;
+ }
+
+ public IContainer Container { get { return _container; } }
+ }
+
[Test]
+ public void the_nested_container_will_deliver_itself_into_a_constructor_of_something_else()
+ {
+ var parent = new Container(x =>
+ {
+ x.For<IWidget>().Use<AWidget>();
+ });
+
+ var child = parent.GetNestedContainer();
+ child.GetInstance<ContainerHolder>().Container.ShouldBeTheSameAs(child);
+
+ }
+
+ [Test]
public void the_nested_container_delivers_itself_as_the_IContainer()
{
var parent = new Container(x =>
Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-05 18:40:41 UTC (rev 277)
+++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-12-19 02:29:03 UTC (rev 278)
@@ -189,6 +189,7 @@
<Compile Include="Bugs\SpecifyScopeInConfigureTester.cs" />
<Compile Include="Bugs\SpecifyScopeOnOpenGenericsTester.cs" />
<Compile Include="Bugs\StaticPropertyCausesJITExceptionTester.cs" />
+ <Compile Include="Bugs\TryGetInstanceWithOpenGenericsBugTester.cs" />
<Compile Include="BuildSessionTester.cs" />
<Compile Include="BuildUpIntegratedTester.cs" />
<Compile Include="BuildUpTester.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jer...@us...> - 2009-12-05 18:40:48
|
Revision: 277
http://structuremap.svn.sourceforge.net/structuremap/?rev=277&view=rev
Author: jeremydmiller
Date: 2009-12-05 18:40:41 +0000 (Sat, 05 Dec 2009)
Log Message:
-----------
convenience method on GenericFamilyExpression that I needed for FubuMVC
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-04 23:00:27 UTC (rev 276)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2009-12-05 18:40:41 UTC (rev 277)
@@ -85,7 +85,7 @@
}
- private GenericFamilyExpression add(Instance instance)
+ public GenericFamilyExpression Add(Instance instance)
{
return alterAndContinue(family => family.AddInstance(instance));
}
@@ -176,9 +176,11 @@
/// <returns></returns>
public GenericFamilyExpression AddConcreteType(Type concreteType)
{
- return add(new ConfiguredInstance(concreteType));
+ var instance = new ConfiguredInstance(concreteType);
+ return Add(instance);
}
+
/// <summary>
/// Shortcut method to add an additional Instance to this Plugin Type
/// as just a Concrete Type by a specified name. You can also chain other declarations after
@@ -189,7 +191,7 @@
/// <returns></returns>
public GenericFamilyExpression AddConcreteType(Type concreteType, string instanceName)
{
- return add(new ConfiguredInstance(concreteType).WithName(instanceName));
+ return Add(new ConfiguredInstance(concreteType).WithName(instanceName));
}
}
}
\ 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: <fli...@us...> - 2009-12-04 23:00:37
|
Revision: 276
http://structuremap.svn.sourceforge.net/structuremap/?rev=276&view=rev
Author: flimflan
Date: 2009-12-04 23:00:27 +0000 (Fri, 04 Dec 2009)
Log Message:
-----------
Clean archive folder during build so that only the latest built is stored as an artifact on teamcity.codebetter
Modified Paths:
--------------
trunk/CleanUp.BAT
trunk/cruise.build
Modified: trunk/CleanUp.BAT
===================================================================
--- trunk/CleanUp.BAT 2009-12-03 20:54:50 UTC (rev 275)
+++ trunk/CleanUp.BAT 2009-12-04 23:00:27 UTC (rev 276)
@@ -1,2 +1,2 @@
-bin\nant\nant.exe -buildfile:StructureMap.build post-clean
+bin\nant\nant.exe -buildfile:cruise.build post-clean
pause
Modified: trunk/cruise.build
===================================================================
--- trunk/cruise.build 2009-12-03 20:54:50 UTC (rev 275)
+++ trunk/cruise.build 2009-12-04 23:00:27 UTC (rev 276)
@@ -13,10 +13,11 @@
<target name="pre-clean">
<delete dir="${build.dir}" failonerror="false" />
<delete dir="${results.dir}" failonerror="false"/>
+ <delete dir="${archive.dir}" failonerror="false" />
<mkdir dir="${build.dir}" />
<mkdir dir="${results.dir}" />
- <mkdir dir="${archive.dir}" unless="${directory::exists(archive.dir)}" />
+ <mkdir dir="${archive.dir}" />
<call target="cleanJunk" />
</target>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|