[ninject commit] r158 - in experiments/ninject2/src/Ninject: . Activation Activation/Blocks Activation/Caching Act...

27 views
Skip to first unread message

codesite...@google.com

unread,
Mar 7, 2009, 1:58:57 PM3/7/09
to ninje...@googlegroups.com
Author: nkohari
Date: Sat Mar 7 10:56:50 2009
New Revision: 158

Added:
experiments/ninject2/src/Ninject/Infrastructure/Ensure.cs
- copied, changed from r152,
/experiments/ninject2/src/Ninject/Infrastructure/IHaveKernel.cs

experiments/ninject2/src/Ninject/Selection/Heuristics/IInjectionHeuristic.cs
- copied, changed from r152,
/experiments/ninject2/src/Ninject/Selection/Heuristics/IMethodInjectionHeuristic.cs

experiments/ninject2/src/Ninject/Selection/Heuristics/StandardInjectionHeuristic.cs
- copied, changed from r152,
/experiments/ninject2/src/Ninject/Selection/Heuristics/StandardMethodInjectionHeuristic.cs
Removed:

experiments/ninject2/src/Ninject/Selection/Heuristics/IMethodInjectionHeuristic.cs

experiments/ninject2/src/Ninject/Selection/Heuristics/IPropertyInjectionHeuristic.cs

experiments/ninject2/src/Ninject/Selection/Heuristics/StandardMethodInjectionHeuristic.cs

experiments/ninject2/src/Ninject/Selection/Heuristics/StandardPropertyInjectionHeuristic.cs
Modified:
experiments/ninject2/src/Ninject/Activation/Blocks/ActivationBlock.cs
experiments/ninject2/src/Ninject/Activation/Caching/Cache.cs

experiments/ninject2/src/Ninject/Activation/Caching/GarbageCollectionCachePruner.cs
experiments/ninject2/src/Ninject/Activation/Context.cs
experiments/ninject2/src/Ninject/Activation/Pipeline.cs
experiments/ninject2/src/Ninject/Activation/Provider.cs
experiments/ninject2/src/Ninject/Activation/Providers/CallbackProvider.cs
experiments/ninject2/src/Ninject/Activation/Providers/ConstantProvider.cs
experiments/ninject2/src/Ninject/Activation/Providers/StandardProvider.cs
experiments/ninject2/src/Ninject/Activation/Request.cs

experiments/ninject2/src/Ninject/Activation/Strategies/ActivationStrategyFor.cs

experiments/ninject2/src/Ninject/Activation/Strategies/BindingActionStrategy.cs

experiments/ninject2/src/Ninject/Activation/Strategies/MethodInjectionStrategy.cs

experiments/ninject2/src/Ninject/Activation/Strategies/PropertyInjectionStrategy.cs
experiments/ninject2/src/Ninject/Attributes/NamedAttribute.cs
experiments/ninject2/src/Ninject/Components/ComponentContainer.cs
experiments/ninject2/src/Ninject/Events/BindingEventArgs.cs
experiments/ninject2/src/Ninject/Infrastructure/Multimap.cs

experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionBasedInjector.cs

experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionConstructorInjector.cs

experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionInjectorFactory.cs

experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionMethodInjectorBase.cs

experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionPropertyInjector.cs
experiments/ninject2/src/Ninject/KernelBase.cs
experiments/ninject2/src/Ninject/Modules/Module.cs
experiments/ninject2/src/Ninject/Modules/ModuleLoader.cs
experiments/ninject2/src/Ninject/Ninject.csproj
experiments/ninject2/src/Ninject/Parameters/Parameter.cs
experiments/ninject2/src/Ninject/Planning/Bindings/Binding.cs
experiments/ninject2/src/Ninject/Planning/Bindings/BindingBuilder.cs
experiments/ninject2/src/Ninject/Planning/Bindings/BindingMetadata.cs

experiments/ninject2/src/Ninject/Planning/Directives/MethodInjectionDirectiveBase.cs
experiments/ninject2/src/Ninject/Planning/Plan.cs
experiments/ninject2/src/Ninject/Planning/Planner.cs

experiments/ninject2/src/Ninject/Planning/Strategies/ConstructorReflectionStrategy.cs

experiments/ninject2/src/Ninject/Planning/Strategies/MethodReflectionStrategy.cs

experiments/ninject2/src/Ninject/Planning/Strategies/PropertyReflectionStrategy.cs
experiments/ninject2/src/Ninject/Planning/Targets/Target.cs

experiments/ninject2/src/Ninject/Selection/Heuristics/StandardConstructorScorer.cs
experiments/ninject2/src/Ninject/Selection/ISelector.cs
experiments/ninject2/src/Ninject/Selection/Selector.cs
experiments/ninject2/src/Ninject/StandardKernel.cs
experiments/ninject2/src/Ninject/Syntax/BindingRoot.cs
experiments/ninject2/src/Ninject/Syntax/ModuleLoadExtensions.cs
experiments/ninject2/src/Ninject/Syntax/ResolutionExtensions.cs

Log:
Added preconditions to control public API, merged method/property
heuristics into single IInjectionHeuristic

Modified:
experiments/ninject2/src/Ninject/Activation/Blocks/ActivationBlock.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Activation/Blocks/ActivationBlock.cs
(original)
+++ experiments/ninject2/src/Ninject/Activation/Blocks/ActivationBlock.cs
Sat Mar 7 10:56:50 2009
@@ -17,6 +17,7 @@
#region Using Directives
using System;
using System.Collections.Generic;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Disposal;
using Ninject.Parameters;
using Ninject.Planning.Bindings;
@@ -42,6 +43,7 @@
/// <param name="parent">The parent resolution root.</param>
public ActivationBlock(IResolutionRoot parent)
{
+ Ensure.ArgumentNotNull(parent, "parent");
Parent = parent;
}

@@ -52,6 +54,7 @@
/// <returns><c>True</c> if the request can be resolved; otherwise,
<c>false</c>.</returns>
public bool CanResolve(IRequest request)
{
+ Ensure.ArgumentNotNull(request, "request");
return Parent.CanResolve(request);
}

@@ -63,6 +66,7 @@
/// <returns>An enumerator of instances that match the request.</returns>
public IEnumerable<object> Resolve(IRequest request)
{
+ Ensure.ArgumentNotNull(request, "request");
return Parent.Resolve(request);
}

@@ -76,6 +80,8 @@
/// <returns>The created request.</returns>
public virtual IRequest CreateRequest(Type service,
Func<IBindingMetadata, bool> constraint, IEnumerable<IParameter>
parameters, bool isOptional)
{
+ Ensure.ArgumentNotNull(service, "service");
+ Ensure.ArgumentNotNull(parameters, "parameters");
return new Request(service, constraint, parameters, () => this,
isOptional);
}
}

Modified: experiments/ninject2/src/Ninject/Activation/Caching/Cache.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Activation/Caching/Cache.cs (original)
+++ experiments/ninject2/src/Ninject/Activation/Caching/Cache.cs Sat Mar 7
10:56:50 2009
@@ -46,6 +46,9 @@
/// <param name="cachePruner">The cache pruner component.</param>
public Cache(IPipeline pipeline, ICachePruner cachePruner)
{
+ Ensure.ArgumentNotNull(pipeline, "pipeline");
+ Ensure.ArgumentNotNull(cachePruner, "cachePruner");
+
_entries = new Multimap<IBinding, CacheEntry>();
Pipeline = pipeline;
cachePruner.Start(this);
@@ -68,6 +71,8 @@
/// <param name="context">The context to store.</param>
public void Remember(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
+
lock (_entries)
{
var entry = new CacheEntry(context);
@@ -87,6 +92,8 @@
/// <returns>The instance for re-use, or <see langword="null"/> if none
has been stored.</returns>
public object TryGet(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
+
lock (_entries)
{
Prune();

Modified:
experiments/ninject2/src/Ninject/Activation/Caching/GarbageCollectionCachePruner.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Activation/Caching/GarbageCollectionCachePruner.cs
(original)
+++
experiments/ninject2/src/Ninject/Activation/Caching/GarbageCollectionCachePruner.cs
Sat Mar 7 10:56:50 2009
@@ -18,6 +18,7 @@
using System;
using System.Threading;
using Ninject.Components;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Activation.Caching
@@ -54,6 +55,8 @@
/// <param name="cache">The cache that will be pruned.</param>
public void Start(ICache cache)
{
+ Ensure.ArgumentNotNull(cache, "cache");
+
if (_timer != null)
Stop();


Modified: experiments/ninject2/src/Ninject/Activation/Context.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Activation/Context.cs (original)
+++ experiments/ninject2/src/Ninject/Activation/Context.cs Sat Mar 7
10:56:50 2009
@@ -19,6 +19,7 @@
using System.Collections.Generic;
using System.Linq;
using Ninject.Activation.Caching;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Introspection;
using Ninject.Parameters;
using Ninject.Planning;
@@ -98,6 +99,13 @@
/// <param name="pipeline">The pipeline component.</param>
public Context(IKernel kernel, IRequest request, IBinding binding,
ICache cache, IPlanner planner, IPipeline pipeline)
{
+ Ensure.ArgumentNotNull(kernel, "kernel");
+ Ensure.ArgumentNotNull(request, "request");
+ Ensure.ArgumentNotNull(binding, "binding");
+ Ensure.ArgumentNotNull(cache, "cache");
+ Ensure.ArgumentNotNull(planner, "planner");
+ Ensure.ArgumentNotNull(pipeline, "pipeline");
+
Kernel = kernel;
Request = request;
Binding = binding;

Modified: experiments/ninject2/src/Ninject/Activation/Pipeline.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Activation/Pipeline.cs (original)
+++ experiments/ninject2/src/Ninject/Activation/Pipeline.cs Sat Mar 7
10:56:50 2009
@@ -20,6 +20,7 @@
using System.Linq;
using Ninject.Activation.Strategies;
using Ninject.Components;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Language;
#endregion

@@ -41,6 +42,7 @@
/// <param name="strategies">The strategies to execute during activation
and deactivation.</param>
public Pipeline(IEnumerable<IActivationStrategy> strategies)
{
+ Ensure.ArgumentNotNull(strategies, "strategies");
Strategies = strategies.ToList();
}

@@ -50,6 +52,7 @@
/// <param name="context">The context.</param>
public void Activate(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
Strategies.Map(s => s.Activate(context));
}

@@ -59,6 +62,7 @@
/// <param name="context">The context.</param>
public void Deactivate(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
Strategies.Map(s => s.Deactivate(context));
}
}

Modified: experiments/ninject2/src/Ninject/Activation/Provider.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Activation/Provider.cs (original)
+++ experiments/ninject2/src/Ninject/Activation/Provider.cs Sat Mar 7
10:56:50 2009
@@ -16,6 +16,7 @@
#endregion
#region Using Directives
using System;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Activation
@@ -41,6 +42,7 @@
/// <returns>The created instance.</returns>
public object Create(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
return CreateInstance(context);
}


Modified:
experiments/ninject2/src/Ninject/Activation/Providers/CallbackProvider.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Activation/Providers/CallbackProvider.cs
(original)
+++
experiments/ninject2/src/Ninject/Activation/Providers/CallbackProvider.cs
Sat Mar 7 10:56:50 2009
@@ -16,6 +16,7 @@
#endregion
#region Using Directives
using System;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Activation.Providers
@@ -37,6 +38,7 @@
/// <param name="method">The callback method that will be called to
create instances.</param>
public CallbackProvider(Func<IContext, T> method)
{
+ Ensure.ArgumentNotNull(method, "method");
Method = method;
}


Modified:
experiments/ninject2/src/Ninject/Activation/Providers/ConstantProvider.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Activation/Providers/ConstantProvider.cs
(original)
+++
experiments/ninject2/src/Ninject/Activation/Providers/ConstantProvider.cs
Sat Mar 7 10:56:50 2009
@@ -16,6 +16,7 @@
#endregion
#region Using Directives
using System;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Activation.Providers

Modified:
experiments/ninject2/src/Ninject/Activation/Providers/StandardProvider.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Activation/Providers/StandardProvider.cs
(original)
+++
experiments/ninject2/src/Ninject/Activation/Providers/StandardProvider.cs
Sat Mar 7 10:56:50 2009
@@ -17,6 +17,7 @@
#region Using Directives
using System;
using System.Linq;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Introspection;
using Ninject.Injection;
using Ninject.Parameters;
@@ -55,6 +56,10 @@
/// <param name="planner">The planner component.</param>
public StandardProvider(Type type, IInjectorFactory injectorFactory,
IPlanner planner)
{
+ Ensure.ArgumentNotNull(type, "type");
+ Ensure.ArgumentNotNull(injectorFactory, "injectorFactory");
+ Ensure.ArgumentNotNull(planner, "planner");
+
Type = type;
InjectorFactory = injectorFactory;
Planner = planner;
@@ -67,6 +72,8 @@
/// <returns>The created instance.</returns>
public virtual object Create(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
+
if (context.Plan == null)
context.Plan =
Planner.GetPlan(GetImplementationType(context.Request.Service));

@@ -91,6 +98,9 @@
/// <returns>The value to inject into the specified target.</returns>
public object GetValue(IContext context, ITarget target)
{
+ Ensure.ArgumentNotNull(context, "context");
+ Ensure.ArgumentNotNull(target, "target");
+
var parameter =
context.Parameters.OfType<ConstructorArgument>().Where(p => p.Name ==
target.Name).SingleOrDefault();
return parameter != null ? parameter.GetValue(context) :
target.ResolveWithin(context);
}
@@ -103,6 +113,7 @@
/// <returns>The implementation type that will be activated.</returns>
public Type GetImplementationType(Type service)
{
+ Ensure.ArgumentNotNull(service, "service");
return Type.ContainsGenericParameters ?
Type.MakeGenericType(service.GetGenericArguments()) : Type;
}

@@ -114,6 +125,8 @@
/// <returns>The created callback.</returns>
public static Func<IContext, IProvider> GetCreationCallback(Type
prototype)
{
+ Ensure.ArgumentNotNull(prototype, "prototype");
+
return ctx => new StandardProvider(prototype,
ctx.Kernel.Components.Get<IInjectorFactory>(),
ctx.Kernel.Components.Get<IPlanner>());

Modified: experiments/ninject2/src/Ninject/Activation/Request.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Activation/Request.cs (original)
+++ experiments/ninject2/src/Ninject/Activation/Request.cs Sat Mar 7
10:56:50 2009
@@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using Ninject.Infrastructure;
using Ninject.Parameters;
using Ninject.Planning.Bindings;
using Ninject.Planning.Targets;
@@ -85,9 +86,12 @@
/// <param name="isOptional"><c>True</c> if the request is optional;
otherwise, <c>false</c>.</param>
public Request(Type service, Func<IBindingMetadata, bool> constraint,
IEnumerable<IParameter> parameters, Func<object> scopeCallback, bool
isOptional)
{
+ Ensure.ArgumentNotNull(service, "service");
+ Ensure.ArgumentNotNull(parameters, "parameters");
+
Service = service;
Constraint = constraint;
- Parameters = parameters == null ? new List<IParameter>() :
parameters.ToList();
+ Parameters = parameters.ToList();
ScopeCallback = scopeCallback;
ActiveBindings = new Stack<IBinding>();
Depth = 0;
@@ -103,6 +107,10 @@
/// <param name="scopeCallback">The scope callback, if an external scope
was specified.</param>
public Request(IRequest parent, Type service, ITarget target,
Func<object> scopeCallback)
{
+ Ensure.ArgumentNotNull(parent, "parent");
+ Ensure.ArgumentNotNull(service, "service");
+ Ensure.ArgumentNotNull(target, "target");
+
Parent = parent;
Service = service;
Target = target;

Modified:
experiments/ninject2/src/Ninject/Activation/Strategies/ActivationStrategyFor.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Activation/Strategies/ActivationStrategyFor.cs
(original)
+++
experiments/ninject2/src/Ninject/Activation/Strategies/ActivationStrategyFor.cs
Sat Mar 7 10:56:50 2009
@@ -16,6 +16,7 @@
#endregion
#region Using Directives
using System;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Activation.Strategies
@@ -33,6 +34,8 @@
/// <param name="context">The context.</param>
public sealed override void Activate(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
+
if (context.Instance is T)
Activate(context, (T)context.Instance);
}
@@ -43,6 +46,8 @@
/// <param name="context">The context.</param>
public sealed override void Deactivate(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
+
if (context.Instance is T)
Deactivate(context, (T)context.Instance);
}

Modified:
experiments/ninject2/src/Ninject/Activation/Strategies/BindingActionStrategy.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Activation/Strategies/BindingActionStrategy.cs
(original)
+++
experiments/ninject2/src/Ninject/Activation/Strategies/BindingActionStrategy.cs
Sat Mar 7 10:56:50 2009
@@ -16,6 +16,7 @@
#endregion
#region Using Directives
using System;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Language;
#endregion

@@ -32,6 +33,7 @@
/// <param name="context">The context.</param>
public override void Activate(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
context.Binding.ActivationActions.Map(action => action(context));
}

@@ -41,6 +43,7 @@
/// <param name="context">The context.</param>
public override void Deactivate(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
context.Binding.DeactivationActions.Map(action => action(context));
}
}

Modified:
experiments/ninject2/src/Ninject/Activation/Strategies/MethodInjectionStrategy.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Activation/Strategies/MethodInjectionStrategy.cs
(original)
+++
experiments/ninject2/src/Ninject/Activation/Strategies/MethodInjectionStrategy.cs
Sat Mar 7 10:56:50 2009
@@ -17,6 +17,7 @@
#region Using Directives
using System;
using System.Linq;
+using Ninject.Infrastructure;
using Ninject.Injection;
using Ninject.Planning.Directives;
#endregion
@@ -39,6 +40,7 @@
/// <param name="injectorFactory">The injector factory component.</param>
public MethodInjectionStrategy(IInjectorFactory injectorFactory)
{
+ Ensure.ArgumentNotNull(injectorFactory, "injectorFactory");
InjectorFactory = injectorFactory;
}

@@ -49,6 +51,8 @@
/// <param name="context">The context.</param>
public override void Activate(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
+
foreach (var directive in
context.Plan.GetAll<MethodInjectionDirective>())
{
var injector = InjectorFactory.GetMethodInjector(directive.Member);

Modified:
experiments/ninject2/src/Ninject/Activation/Strategies/PropertyInjectionStrategy.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Activation/Strategies/PropertyInjectionStrategy.cs
(original)
+++
experiments/ninject2/src/Ninject/Activation/Strategies/PropertyInjectionStrategy.cs
Sat Mar 7 10:56:50 2009
@@ -17,6 +17,7 @@
#region Using Directives
using System;
using System.Linq;
+using Ninject.Infrastructure;
using Ninject.Injection;
using Ninject.Parameters;
using Ninject.Planning.Directives;
@@ -41,6 +42,7 @@
/// <param name="injectorFactory">The injector factory component.</param>
public PropertyInjectionStrategy(IInjectorFactory injectorFactory)
{
+ Ensure.ArgumentNotNull(injectorFactory, "injectorFactory");
InjectorFactory = injectorFactory;
}

@@ -51,6 +53,8 @@
/// <param name="context">The context.</param>
public override void Activate(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
+
foreach (var directive in
context.Plan.GetAll<PropertyInjectionDirective>())
{
var injector = InjectorFactory.GetPropertyInjector(directive.Member);
@@ -66,6 +70,9 @@
/// <returns>The value to inject into the specified target.</returns>
public object GetValue(IContext context, ITarget target)
{
+ Ensure.ArgumentNotNull(context, "context");
+ Ensure.ArgumentNotNull(target, "target");
+
var parameter = context.Parameters.OfType<PropertyValue>().Where(p =>
p.Name == target.Name).SingleOrDefault();
return parameter != null ? parameter.GetValue(context) :
target.ResolveWithin(context);
}

Modified: experiments/ninject2/src/Ninject/Attributes/NamedAttribute.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Attributes/NamedAttribute.cs (original)
+++ experiments/ninject2/src/Ninject/Attributes/NamedAttribute.cs Sat Mar
7 10:56:50 2009
@@ -16,6 +16,7 @@
#endregion
#region Using Directives
using System;
+using Ninject.Infrastructure;
using Ninject.Planning.Bindings;
#endregion

@@ -38,6 +39,7 @@
/// <param name="name">The name of the binding(s) to use.</param>
public NamedAttribute(string name)
{
+ Ensure.ArgumentNotNullOrEmpty(name, "name");
Name = name;
}

@@ -48,6 +50,7 @@
/// <returns><c>True</c> if the metadata matches; otherwise
<c>false</c>.</returns>
public override bool Matches(IBindingMetadata metadata)
{
+ Ensure.ArgumentNotNull(metadata, "metadata");
return metadata.Name == Name;
}
}

Modified: experiments/ninject2/src/Ninject/Components/ComponentContainer.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Components/ComponentContainer.cs
(original)
+++ experiments/ninject2/src/Ninject/Components/ComponentContainer.cs Sat
Mar 7 10:56:50 2009
@@ -85,6 +85,8 @@
/// <param name="component">The component type.</param>
public void RemoveAll(Type component)
{
+ Ensure.ArgumentNotNull(component, "component");
+
foreach (Type implementation in _mappings[component])
{
if (_instances.ContainsKey(implementation))
@@ -125,6 +127,8 @@
/// <returns>The instance of the component.</returns>
public object Get(Type component)
{
+ Ensure.ArgumentNotNull(component, "component");
+
if (component == typeof(IKernel))
return Kernel;

@@ -152,6 +156,8 @@
/// <returns>A series of instances of the specified component.</returns>
public IEnumerable<object> GetAll(Type component)
{
+ Ensure.ArgumentNotNull(component, "component");
+
foreach (Type implementation in _mappings[component])
yield return ResolveInstance(component, implementation);
}

Modified: experiments/ninject2/src/Ninject/Events/BindingEventArgs.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Events/BindingEventArgs.cs (original)
+++ experiments/ninject2/src/Ninject/Events/BindingEventArgs.cs Sat Mar 7
10:56:50 2009
@@ -16,6 +16,7 @@
#endregion
#region Using Directives
using System;
+using Ninject.Infrastructure;
using Ninject.Planning.Bindings;
#endregion

@@ -37,6 +38,7 @@
/// <param name="binding">The binding.</param>
public BindingEventArgs(IBinding binding)
{
+ Ensure.ArgumentNotNull(binding, "binding");
Binding = binding;
}
}

Copied: experiments/ninject2/src/Ninject/Infrastructure/Ensure.cs (from
r152, /experiments/ninject2/src/Ninject/Infrastructure/IHaveKernel.cs)
==============================================================================
--- /experiments/ninject2/src/Ninject/Infrastructure/IHaveKernel.cs
(original)
+++ experiments/ninject2/src/Ninject/Infrastructure/Ensure.cs Sat Mar 7
10:56:50 2009
@@ -20,14 +20,16 @@

namespace Ninject.Infrastructure
{
- /// <summary>
- /// Indicates that the object has a reference to an <see cref="IKernel"/>.
- /// </summary>
- public interface IHaveKernel
+ internal static class Ensure
{
- /// <summary>
- /// Gets the kernel.
- /// </summary>
- IKernel Kernel { get; }
+ public static void ArgumentNotNull(object argument, string name)
+ {
+ if (argument == null) throw new ArgumentNullException(name, "Cannot be
null");
+ }
+
+ public static void ArgumentNotNullOrEmpty(string argument, string name)
+ {
+ if (String.IsNullOrEmpty(argument)) throw new ArgumentException("Cannot
be null or empty", name);
+ }
}
}

Modified: experiments/ninject2/src/Ninject/Infrastructure/Multimap.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Infrastructure/Multimap.cs (original)
+++ experiments/ninject2/src/Ninject/Infrastructure/Multimap.cs Sat Mar 7
10:56:50 2009
@@ -39,6 +39,8 @@
{
get
{
+ Ensure.ArgumentNotNull(key, "key");
+
if (!_items.ContainsKey(key))
_items[key] = new List<V>();

@@ -69,6 +71,9 @@
/// <param name="value">The value.</param>
public void Add(K key, V value)
{
+ Ensure.ArgumentNotNull(key, "key");
+ Ensure.ArgumentNotNull(value, "value");
+
this[key].Add(value);
}

@@ -80,6 +85,9 @@
/// <returns><c>True</c> if such a value existed and was removed;
otherwise <c>false</c>.</returns>
public bool Remove(K key, V value)
{
+ Ensure.ArgumentNotNull(key, "key");
+ Ensure.ArgumentNotNull(value, "value");
+
if (!_items.ContainsKey(key))
return false;

@@ -93,6 +101,7 @@
/// <returns><c>True</c> if any such values existed; otherwise
<c>false</c>.</returns>
public bool RemoveAll(K key)
{
+ Ensure.ArgumentNotNull(key, "key");
return _items.Remove(key);
}

@@ -111,6 +120,7 @@
/// <returns><c>True</c> if the multimap has one or more values for the
specified key; otherwise, <c>false</c>.</returns>
public bool ContainsKey(K key)
{
+ Ensure.ArgumentNotNull(key, "key");
return _items.ContainsKey(key);
}

@@ -122,6 +132,9 @@
/// <returns><c>True</c> if the multimap contains such a value;
otherwise, <c>false</c>.</returns>
public bool ContainsValue(K key, V value)
{
+ Ensure.ArgumentNotNull(key, "key");
+ Ensure.ArgumentNotNull(value, "value");
+
return _items.ContainsKey(key) && _items[key].Contains(value);
}


Modified:
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionBasedInjector.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionBasedInjector.cs
(original)
+++
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionBasedInjector.cs
Sat Mar 7 10:56:50 2009
@@ -18,6 +18,7 @@
using System;
using System.Linq.Expressions;
using System.Reflection;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Injection.Expressions
@@ -56,6 +57,7 @@
/// <param name="member">The member that will be injected.</param>
protected ExpressionBasedInjector(TMember member)
{
+ Ensure.ArgumentNotNull(member, "member");
_expression = BuildExpression(member);
}


Modified:
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionConstructorInjector.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionConstructorInjector.cs
(original)
+++
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionConstructorInjector.cs
Sat Mar 7 10:56:50 2009
@@ -19,6 +19,7 @@
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Injection.Expressions
@@ -52,6 +53,8 @@
/// <returns>The constructed expression tree.</returns>
protected override Expression<Func<object[], object>>
BuildExpression(ConstructorInfo member)
{
+ Ensure.ArgumentNotNull(member, "member");
+
ParameterExpression argumentsParameter =
Expression.Parameter(typeof(object[]), "arguments");
var arguments = ExpressionHelper.CreateParameterExpressions(member,
argumentsParameter);


Modified:
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionInjectorFactory.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionInjectorFactory.cs
(original)
+++
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionInjectorFactory.cs
Sat Mar 7 10:56:50 2009
@@ -19,6 +19,7 @@
using System.Collections.Generic;
using System.Reflection;
using Ninject.Components;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Language;
using Ninject.Injection.Expressions;
#endregion
@@ -41,6 +42,7 @@
/// <returns>The created injector.</returns>
public IConstructorInjector GetConstructorInjector(ConstructorInfo
constructor)
{
+ Ensure.ArgumentNotNull(constructor, "constructor");
return _constructorInjectors.GetOrAddNew(constructor, c => new
ExpressionConstructorInjector(c));
}

@@ -51,6 +53,7 @@
/// <returns>The created injector.</returns>
public IMethodInjector GetMethodInjector(MethodInfo method)
{
+ Ensure.ArgumentNotNull(method, "method");
return _methodInjectors.GetOrAddNew(method, m => method.ReturnType ==
typeof(void) ? (IMethodInjector)new ExpressionVoidMethodInjector(m) :
(IMethodInjector)new ExpressionMethodInjector(m));
}

@@ -61,6 +64,7 @@
/// <returns>The created injector.</returns>
public IPropertyInjector GetPropertyInjector(PropertyInfo property)
{
+ Ensure.ArgumentNotNull(property, "property");
return _propertyInjectors.GetOrAddNew(property, p => new
ExpressionPropertyInjector(p));
}
}

Modified:
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionMethodInjectorBase.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionMethodInjectorBase.cs
(original)
+++
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionMethodInjectorBase.cs
Sat Mar 7 10:56:50 2009
@@ -19,6 +19,7 @@
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Injection.Expressions
@@ -51,6 +52,8 @@
/// <returns>The constructed expression tree.</returns>
protected override Expression<TDelegate> BuildExpression(MethodInfo
member)
{
+ Ensure.ArgumentNotNull(member, "member");
+
ParameterExpression instanceParameter =
Expression.Parameter(typeof(object), "instance");
Expression instance = Expression.Convert(instanceParameter,
member.DeclaringType);


Modified:
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionPropertyInjector.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionPropertyInjector.cs
(original)
+++
experiments/ninject2/src/Ninject/Injection/Expressions/ExpressionPropertyInjector.cs
Sat Mar 7 10:56:50 2009
@@ -18,6 +18,7 @@
using System;
using System.Linq.Expressions;
using System.Reflection;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Injection.Expressions
@@ -51,6 +52,8 @@
/// <returns>The constructed expression tree.</returns>
protected override Expression<Action<object, object>>
BuildExpression(PropertyInfo member)
{
+ Ensure.ArgumentNotNull(member, "member");
+
ParameterExpression instanceParameter =
Expression.Parameter(typeof(object), "instance");
Expression instance = Expression.Convert(instanceParameter,
member.DeclaringType);


Modified: experiments/ninject2/src/Ninject/KernelBase.cs
==============================================================================
--- experiments/ninject2/src/Ninject/KernelBase.cs (original)
+++ experiments/ninject2/src/Ninject/KernelBase.cs Sat Mar 7 10:56:50 2009
@@ -103,6 +103,10 @@
/// <param name="modules">The modules to load into the kernel.</param>
protected KernelBase(IComponentContainer components, INinjectSettings
settings, IEnumerable<IModule> modules)
{
+ Ensure.ArgumentNotNull(components, "components");
+ Ensure.ArgumentNotNull(settings, "settings");
+ Ensure.ArgumentNotNull(modules, "modules");
+
Settings = settings;

Components = components;
@@ -131,6 +135,7 @@
/// <returns><c>True</c> if the specified module has been loaded;
otherwise, <c>false</c>.</returns>
public virtual bool HasModule(Type moduleType)
{
+ Ensure.ArgumentNotNull(moduleType, "moduleType");
return _modules.ContainsKey(moduleType);
}

@@ -140,6 +145,8 @@
/// <param name="module">The module to load.</param>
public virtual void LoadModule(IModule module)
{
+ Ensure.ArgumentNotNull(module, "module");
+
_modules.Add(module.GetType(), module);
module.OnLoad(this);

@@ -152,6 +159,8 @@
/// <param name="moduleType">The type of the module.</param>
public virtual void UnloadModule(Type moduleType)
{
+ Ensure.ArgumentNotNull(moduleType, "moduleType");
+
IModule module = _modules[moduleType];

module.OnUnload(this);
@@ -166,6 +175,8 @@
/// <param name="binding">The binding to add.</param>
public override void AddBinding(IBinding binding)
{
+ Ensure.ArgumentNotNull(binding, "binding");
+
_bindings.Add(binding.Service, binding);
BindingAdded.Raise(this, new BindingEventArgs(binding));
}
@@ -176,6 +187,8 @@
/// <param name="binding">The binding to remove.</param>
public override void RemoveBinding(IBinding binding)
{
+ Ensure.ArgumentNotNull(binding, "binding");
+
_bindings.Remove(binding.Service, binding);
BindingRemoved.Raise(this, new BindingEventArgs(binding));
}
@@ -187,6 +200,9 @@
/// <param name="parameters">The parameters to pass to the
request.</param>
public void Inject(object instance, params IParameter[] parameters)
{
+ Ensure.ArgumentNotNull(instance, "instance");
+ Ensure.ArgumentNotNull(parameters, "parameters");
+
Type service = instance.GetType();

var planner = Components.Get<IPlanner>();
@@ -209,6 +225,8 @@
/// <returns><c>True</c> if the request can be resolved; otherwise,
<c>false</c>.</returns>
public virtual bool CanResolve(IRequest request)
{
+ Ensure.ArgumentNotNull(request, "request");
+
if (_bindings.ContainsKey(request.Service))
return true;

@@ -226,6 +244,8 @@
/// <returns>An enumerator of instances that match the request.</returns>
public virtual IEnumerable<object> Resolve(IRequest request)
{
+ Ensure.ArgumentNotNull(request, "request");
+
if (request.Service == typeof(IKernel))
return new[] { this };

@@ -253,6 +273,9 @@
/// <returns>The created request.</returns>
public virtual IRequest CreateRequest(Type service,
Func<IBindingMetadata, bool> constraint, IEnumerable<IParameter>
parameters, bool isOptional)
{
+ Ensure.ArgumentNotNull(service, "service");
+ Ensure.ArgumentNotNull(parameters, "parameters");
+
return new Request(service, constraint, parameters, null, isOptional);
}

@@ -263,6 +286,8 @@
/// <returns>A series of bindings that match the request.</returns>
public virtual IEnumerable<IBinding> GetBindings(IRequest request)
{
+ Ensure.ArgumentNotNull(request, "request");
+
foreach (IBinding binding in _bindings[request.Service])
yield return binding;

@@ -297,6 +322,8 @@
/// <returns><c>True</c> if the type is self-bindable; otherwise
<c>false</c>.</returns>
protected virtual bool HandleMissingBinding(Type service)
{
+ Ensure.ArgumentNotNull(service, "service");
+
if (service.IsInterface || service.IsAbstract ||
service.ContainsGenericParameters)
return false;

@@ -319,6 +346,9 @@
/// <returns>The created context.</returns>
protected virtual IContext CreateContext(IRequest request, IBinding
binding)
{
+ Ensure.ArgumentNotNull(request, "request");
+ Ensure.ArgumentNotNull(binding, "binding");
+
return new Context(this, request, binding, Components.Get<ICache>(),
Components.Get<IPlanner>(), Components.Get<IPipeline>());
}
}

Modified: experiments/ninject2/src/Ninject/Modules/Module.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Modules/Module.cs (original)
+++ experiments/ninject2/src/Ninject/Modules/Module.cs Sat Mar 7 10:56:50
2009
@@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
using Ninject.Events;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Language;
using Ninject.Planning.Bindings;
using Ninject.Syntax;
@@ -54,6 +55,8 @@
/// <param name="kernel">The kernel that is loading the module.</param>
public void OnLoad(IKernel kernel)
{
+ Ensure.ArgumentNotNull(kernel, "kernel");
+
Kernel = kernel;
Load();
}
@@ -64,6 +67,8 @@
/// <param name="kernel">The kernel that is unloading the module.</param>
public void OnUnload(IKernel kernel)
{
+ Ensure.ArgumentNotNull(kernel, "kernel");
+
Unload();
Bindings.Map(Kernel.RemoveBinding);
Kernel = null;
@@ -85,6 +90,8 @@
/// <param name="binding">The binding to add.</param>
public override void AddBinding(IBinding binding)
{
+ Ensure.ArgumentNotNull(binding, "binding");
+
Kernel.AddBinding(binding);
Bindings.Add(binding);
}
@@ -95,6 +102,8 @@
/// <param name="binding">The binding to remove.</param>
public override void RemoveBinding(IBinding binding)
{
+ Ensure.ArgumentNotNull(binding, "binding");
+
Kernel.RemoveBinding(binding);
Bindings.Remove(binding);
}

Modified: experiments/ninject2/src/Ninject/Modules/ModuleLoader.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Modules/ModuleLoader.cs (original)
+++ experiments/ninject2/src/Ninject/Modules/ModuleLoader.cs Sat Mar 7
10:56:50 2009
@@ -23,6 +23,7 @@
using System.Reflection;
using System.Web;
using Ninject.Components;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Modules
@@ -43,6 +44,7 @@
/// <param name="kernel">The kernel into which modules will be
loaded.</param>
public ModuleLoader(IKernel kernel)
{
+ Ensure.ArgumentNotNull(kernel, "kernel");
Kernel = kernel;
}

@@ -52,6 +54,8 @@
/// <param name="assembly">The assembly.</param>
public void LoadModules(Assembly assembly)
{
+ Ensure.ArgumentNotNull(assembly, "assembly");
+
foreach (Type type in
assembly.GetExportedTypes().Where(IsLoadableModule))
{
if (Kernel.HasModule(type))
@@ -68,6 +72,8 @@
/// <param name="assemblyOrFileName">Name of the assembly or
file.</param>
public void LoadModules(string assemblyOrFileName)
{
+ Ensure.ArgumentNotNullOrEmpty(assemblyOrFileName, "assemblyOrFileName");
+
AssemblyName name;

try
@@ -91,6 +97,9 @@
/// <param name="recursive">If <c>true</c>, scan all subdirectories of
the path as well.</param>
public void ScanAndLoadModules(string path, IEnumerable<string>
patterns, bool recursive)
{
+ Ensure.ArgumentNotNullOrEmpty(path, "path");
+ Ensure.ArgumentNotNull(patterns, "patterns");
+
var searchOption = recursive ? SearchOption.AllDirectories :
SearchOption.TopDirectoryOnly;
var normalizedPath = NormalizePath(path);
var files = patterns.SelectMany(pattern =>
Directory.GetFiles(normalizedPath, pattern, searchOption));
@@ -111,6 +120,9 @@
/// <returns>The names of the assemblies that contain loadable
modules.</returns>
protected virtual IEnumerable<AssemblyName>
FindAssembliesWithModules(AppDomain temporaryDomain, IEnumerable<string>
files)
{
+ Ensure.ArgumentNotNull(temporaryDomain, "temporaryDomain");
+ Ensure.ArgumentNotNull(files, "files");
+
foreach (string file in files)
{
var assemblyName = new AssemblyName { CodeBase = file };
@@ -139,6 +151,8 @@
/// <returns><c>True</c> if the type represents a loadable module;
otherwise <c>false</c>.</returns>
protected virtual bool IsLoadableModule(Type type)
{
+ Ensure.ArgumentNotNull(type, "type");
+
if (!typeof(IModule).IsAssignableFrom(type) || type.IsAbstract ||
type.IsInterface)
return false;

@@ -152,6 +166,8 @@
/// <returns>The normalized path.</returns>
protected virtual string NormalizePath(string path)
{
+ Ensure.ArgumentNotNullOrEmpty(path, "path");
+
if (path.StartsWith("~"))
path = GetBaseDirectory() + path.Substring(1);


Modified: experiments/ninject2/src/Ninject/Ninject.csproj
==============================================================================
--- experiments/ninject2/src/Ninject/Ninject.csproj (original)
+++ experiments/ninject2/src/Ninject/Ninject.csproj Sat Mar 7 10:56:50 2009
@@ -105,12 +105,14 @@
<Compile Include="Attributes\NamedAttribute.cs" />
<Compile Include="Attributes\InjectAttribute.cs" />
<Compile Include="ActivationException.cs" />
+ <Compile Include="Infrastructure\Ensure.cs" />
<Compile Include="Infrastructure\StandardScopeCallbacks.cs" />
<Compile Include="Infrastructure\Introspection\ExceptionFormatter.cs"
/>
<Compile Include="Infrastructure\Introspection\FormatExtensions.cs" />
<Compile Include="Infrastructure\Language\ExtensionsForIDictionary.cs"
/>
<Compile Include="Injection\Expressions\ExpressionHelper.cs" />
<Compile Include="Planning\Bindings\BindingTarget.cs" />
+ <Compile Include="Selection\Heuristics\IInjectionHeuristic.cs" />
<Compile Include="Syntax\BindingRoot.cs" />
<Compile Include="Syntax\ModuleLoadExtensions.cs" />
<Compile Include="Events\BindingEventArgs.cs" />
@@ -161,11 +163,8 @@
<Compile Include="Planning\Strategies\MethodReflectionStrategy.cs" />
<Compile Include="Planning\Strategies\PropertyReflectionStrategy.cs" />
<Compile Include="Planning\Targets\Target.cs" />
- <Compile
Include="Selection\Heuristics\StandardPropertyInjectionHeuristic.cs" />
- <Compile Include="Selection\Heuristics\IMethodInjectionHeuristic.cs" />
- <Compile
Include="Selection\Heuristics\StandardMethodInjectionHeuristic.cs" />
+ <Compile Include="Selection\Heuristics\StandardInjectionHeuristic.cs"
/>
<Compile Include="Selection\Heuristics\StandardConstructorScorer.cs" />
- <Compile Include="Selection\Heuristics\IPropertyInjectionHeuristic.cs"
/>
<Compile Include="Selection\Heuristics\IConstructorScorer.cs" />
<Compile Include="StandardKernel.cs" />
<Compile Include="Planning\Directives\MethodInjectionDirective.cs" />

Modified: experiments/ninject2/src/Ninject/Parameters/Parameter.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Parameters/Parameter.cs (original)
+++ experiments/ninject2/src/Ninject/Parameters/Parameter.cs Sat Mar 7
10:56:50 2009
@@ -17,6 +17,7 @@
#region Using Directives
using System;
using Ninject.Activation;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Parameters
@@ -57,6 +58,9 @@
/// <param name="shouldInherit">Whether the parameter should be
inherited into child requests.</param>
public Parameter(string name, Func<IContext, object> valueCallback, bool
shouldInherit)
{
+ Ensure.ArgumentNotNullOrEmpty(name, "name");
+ Ensure.ArgumentNotNull(valueCallback, "valueCallback");
+
Name = name;
ValueCallback = valueCallback;
ShouldInherit = shouldInherit;
@@ -69,6 +73,7 @@
/// <returns>The value for the parameter.</returns>
public object GetValue(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
return ValueCallback(context);
}


Modified: experiments/ninject2/src/Ninject/Planning/Bindings/Binding.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Planning/Bindings/Binding.cs (original)
+++ experiments/ninject2/src/Ninject/Planning/Bindings/Binding.cs Sat Mar
7 10:56:50 2009
@@ -92,6 +92,9 @@
/// <param name="metadata">The binding's metadata container.</param>
public Binding(Type service, IBindingMetadata metadata)
{
+ Ensure.ArgumentNotNull(service, "service");
+ Ensure.ArgumentNotNull(metadata, "metadata");
+
Service = service;
Metadata = metadata;
Parameters = new List<IParameter>();
@@ -107,6 +110,7 @@
/// <returns>The provider to use.</returns>
public IProvider GetProvider(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
return ProviderCallback(context);
}

@@ -117,6 +121,7 @@
/// <returns>The object that will act as the scope, or <see
langword="null"/> if the service is transient.</returns>
public object GetScope(IContext context)
{
+ Ensure.ArgumentNotNull(context, "context");
return ScopeCallback(context);
}

@@ -127,6 +132,7 @@
/// <returns><c>True</c> if the request satisfies the conditions;
otherwise <c>false</c>.</returns>
public bool Matches(IRequest request)
{
+ Ensure.ArgumentNotNull(request, "request");
return Condition == null || Condition(request);
}
}

Modified:
experiments/ninject2/src/Ninject/Planning/Bindings/BindingBuilder.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Planning/Bindings/BindingBuilder.cs
(original)
+++ experiments/ninject2/src/Ninject/Planning/Bindings/BindingBuilder.cs
Sat Mar 7 10:56:50 2009
@@ -47,6 +47,7 @@
/// <param name="binding">The binding to build.</param>
public BindingBuilder(Binding binding)
{
+ Ensure.ArgumentNotNull(binding, "binding");
Binding = binding;
}


Modified:
experiments/ninject2/src/Ninject/Planning/Bindings/BindingMetadata.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Planning/Bindings/BindingMetadata.cs
(original)
+++ experiments/ninject2/src/Ninject/Planning/Bindings/BindingMetadata.cs
Sat Mar 7 10:56:50 2009
@@ -17,6 +17,7 @@
#region Using Directives
using System;
using System.Collections.Generic;
+using Ninject.Infrastructure;
#endregion

namespace Ninject.Planning.Bindings
@@ -41,6 +42,7 @@
/// <returns><c>True</c> if such a piece of metadata exists; otherwise,
<c>false</c>.</returns>
public bool Has(string key)
{
+ Ensure.ArgumentNotNullOrEmpty(key, "key");
return _values.ContainsKey(key);
}

@@ -52,6 +54,7 @@
/// <returns>The metadata value.</returns>
public T Get<T>(string key)
{
+ Ensure.ArgumentNotNullOrEmpty(key, "key");
return (T)Get(key);
}

@@ -62,6 +65,7 @@
/// <returns>The metadata value.</returns>
public object Get(string key)
{
+ Ensure.ArgumentNotNullOrEmpty(key, "key");
return _values.ContainsKey(key) ? _values[key] : null;
}

@@ -72,6 +76,7 @@
/// <param name="value">The metadata value.</param>
public void Set(string key, object value)
{
+ Ensure.ArgumentNotNullOrEmpty(key, "key");
_values[key] = value;
}
}

Modified:
experiments/ninject2/src/Ninject/Planning/Directives/MethodInjectionDirectiveBase.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Planning/Directives/MethodInjectionDirectiveBase.cs
(original)
+++
experiments/ninject2/src/Ninject/Planning/Directives/MethodInjectionDirectiveBase.cs
Sat Mar 7 10:56:50 2009
@@ -18,6 +18,7 @@
using System;
using System.Linq;
using System.Reflection;
+using Ninject.Infrastructure;
using Ninject.Planning.Targets;
#endregion

@@ -55,6 +56,7 @@
/// <param name="method">The method described by the directive.</param>
protected MethodInjectionDirectiveBase(T method)
{
+ Ensure.ArgumentNotNull(method, "method");
Member = method;
}

@@ -65,6 +67,7 @@
/// <returns>The targets for the method's parameters.</returns>
protected virtual ITarget[] CreateTargetsFromParameters(T method)
{
+ Ensure.ArgumentNotNull(method, "method");
return method.GetParameters().Select(parameter => new
ParameterTarget(method, parameter)).ToArray();
}
}

Modified: experiments/ninject2/src/Ninject/Planning/Plan.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Planning/Plan.cs (original)
+++ experiments/ninject2/src/Ninject/Planning/Plan.cs Sat Mar 7 10:56:50
2009
@@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using Ninject.Infrastructure;
using Ninject.Planning.Directives;
#endregion

@@ -44,6 +45,8 @@
/// <param name="type">The type the plan describes.</param>
public Plan(Type type)
{
+ Ensure.ArgumentNotNull(type, "type");
+
Type = type;
Directives = new List<IDirective>();
}
@@ -54,6 +57,7 @@
/// <param name="directive">The directive.</param>
public void Add(IDirective directive)
{
+ Ensure.ArgumentNotNull(directive, "directive");
Directives.Add(directive);
}


Modified: experiments/ninject2/src/Ninject/Planning/Planner.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Planning/Planner.cs (original)
+++ experiments/ninject2/src/Ninject/Planning/Planner.cs Sat Mar 7
10:56:50 2009
@@ -19,6 +19,7 @@
using System.Collections.Generic;
using System.Linq;
using Ninject.Components;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Language;
using Ninject.Planning.Strategies;
#endregion
@@ -43,6 +44,7 @@
/// <param name="strategies">The strategies to execute during
planning.</param>
public Planner(IEnumerable<IPlanningStrategy> strategies)
{
+ Ensure.ArgumentNotNull(strategies, "strategies");
Strategies = strategies.ToList();
}

@@ -53,6 +55,8 @@
/// <returns>The type's activation plan.</returns>
public IPlan GetPlan(Type type)
{
+ Ensure.ArgumentNotNull(type, "type");
+
if (_plans.ContainsKey(type))
return _plans[type];

@@ -71,6 +75,7 @@
/// <returns>The created plan.</returns>
protected virtual IPlan CreateEmptyPlan(Type type)
{
+ Ensure.ArgumentNotNull(type, "type");
return new Plan(type);
}
}

Modified:
experiments/ninject2/src/Ninject/Planning/Strategies/ConstructorReflectionStrategy.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Planning/Strategies/ConstructorReflectionStrategy.cs
(original)
+++
experiments/ninject2/src/Ninject/Planning/Strategies/ConstructorReflectionStrategy.cs
Sat Mar 7 10:56:50 2009
@@ -18,6 +18,7 @@
using System;
using System.Reflection;
using Ninject.Components;
+using Ninject.Infrastructure;
using Ninject.Planning.Directives;
using Ninject.Selection;
#endregion
@@ -40,6 +41,7 @@
/// <param name="selector">The selector component.</param>
public ConstructorReflectionStrategy(ISelector selector)
{
+ Ensure.ArgumentNotNull(selector, "selector");
Selector = selector;
}

@@ -50,6 +52,8 @@
/// <param name="plan">The plan that is being generated.</param>
public void Execute(IPlan plan)
{
+ Ensure.ArgumentNotNull(plan, "plan");
+
ConstructorInfo constructor = Selector.SelectConstructor(plan.Type);

if (constructor != null)

Modified:
experiments/ninject2/src/Ninject/Planning/Strategies/MethodReflectionStrategy.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Planning/Strategies/MethodReflectionStrategy.cs
(original)
+++
experiments/ninject2/src/Ninject/Planning/Strategies/MethodReflectionStrategy.cs
Sat Mar 7 10:56:50 2009
@@ -18,6 +18,7 @@
using System;
using System.Reflection;
using Ninject.Components;
+using Ninject.Infrastructure;
using Ninject.Planning.Directives;
using Ninject.Selection;
#endregion
@@ -40,6 +41,7 @@
/// <param name="selector">The selector component.</param>
public MethodReflectionStrategy(ISelector selector)
{
+ Ensure.ArgumentNotNull(selector, "selector");
Selector = selector;
}

@@ -50,6 +52,8 @@
/// <param name="plan">The plan that is being generated.</param>
public void Execute(IPlan plan)
{
+ Ensure.ArgumentNotNull(plan, "plan");
+
foreach (MethodInfo method in
Selector.SelectMethodsForInjection(plan.Type))
plan.Add(new MethodInjectionDirective(method));
}

Modified:
experiments/ninject2/src/Ninject/Planning/Strategies/PropertyReflectionStrategy.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Planning/Strategies/PropertyReflectionStrategy.cs
(original)
+++
experiments/ninject2/src/Ninject/Planning/Strategies/PropertyReflectionStrategy.cs
Sat Mar 7 10:56:50 2009
@@ -18,6 +18,7 @@
using System;
using System.Reflection;
using Ninject.Components;
+using Ninject.Infrastructure;
using Ninject.Planning.Directives;
using Ninject.Selection;
#endregion
@@ -40,6 +41,7 @@
/// <param name="selector">The selector component.</param>
public PropertyReflectionStrategy(ISelector selector)
{
+ Ensure.ArgumentNotNull(selector, "selector");
Selector = selector;
}

@@ -50,6 +52,8 @@
/// <param name="plan">The plan that is being generated.</param>
public void Execute(IPlan plan)
{
+ Ensure.ArgumentNotNull(plan, "plan");
+
foreach (PropertyInfo property in
Selector.SelectPropertiesForInjection(plan.Type))
plan.Add(new PropertyInjectionDirective(property));
}

Modified: experiments/ninject2/src/Ninject/Planning/Targets/Target.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Planning/Targets/Target.cs (original)
+++ experiments/ninject2/src/Ninject/Planning/Targets/Target.cs Sat Mar 7
10:56:50 2009
@@ -20,6 +20,7 @@
using System.Linq;
using System.Reflection;
using Ninject.Activation;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Language;
using Ninject.Planning.Bindings;
#endregion
@@ -62,7 +63,7 @@
{
get
{
- if (_constraint == null) _constraint = ReadConstraintFromAttributes();
+ if (_constraint == null) _constraint = ReadConstraintFromTarget();
return _constraint;
}
}
@@ -82,6 +83,9 @@
/// <param name="site">The site represented by the target.</param>
protected Target(MemberInfo member, T site)
{
+ Ensure.ArgumentNotNull(member, "member");
+ Ensure.ArgumentNotNull(site, "site");
+
Member = member;
Site = site;
}
@@ -94,6 +98,7 @@
/// <returns>An array of custom attributes of the specified
type.</returns>
public object[] GetCustomAttributes(Type attributeType, bool inherit)
{
+ Ensure.ArgumentNotNull(attributeType, "attributeType");
return Site.GetCustomAttributes(attributeType, inherit);
}

@@ -115,6 +120,7 @@
/// <returns><c>True</c> if such an attribute is defined; otherwise
<c>false</c>.</returns>
public bool IsDefined(Type attributeType, bool inherit)
{
+ Ensure.ArgumentNotNull(attributeType, "attributeType");
return Site.IsDefined(attributeType, inherit);
}

@@ -125,10 +131,12 @@
/// <returns>The resolved value.</returns>
public object ResolveWithin(IContext parent)
{
+ Ensure.ArgumentNotNull(parent, "parent");
+
if (Type.IsArray)
{
Type service = Type.GetElementType();
- return ResolveInstances(service,
parent).CastSlow(service).ToArraySlow(service);
+ return GetValues(service,
parent).CastSlow(service).ToArraySlow(service);
}

if (Type.IsGenericType)
@@ -137,22 +145,35 @@
Type service = Type.GetGenericArguments()[0];

if (gtd == typeof(List<>) || gtd == typeof(IList<>))
- return ResolveInstances(service,
parent).CastSlow(service).ToListSlow(service);
+ return GetValues(service,
parent).CastSlow(service).ToListSlow(service);

if (typeof(IEnumerable<>).IsAssignableFrom(gtd))
- return ResolveInstances(service, parent).CastSlow(service);
+ return GetValues(service, parent).CastSlow(service);
}

- return ResolveInstances(Type, parent).FirstOrDefault();
+ return GetValues(Type, parent).FirstOrDefault();
}

- private IEnumerable<object> ResolveInstances(Type service, IContext
parent)
+ /// <summary>
+ /// Gets the value(s) that should be injected into the target.
+ /// </summary>
+ /// <param name="service">The service that the target is
requesting.</param>
+ /// <param name="parent">The parent context in which the target is being
injected.</param>
+ /// <returns>A series of values that are available for
injection.</returns>
+ protected virtual IEnumerable<object> GetValues(Type service, IContext
parent)
{
+ Ensure.ArgumentNotNull(service, "service");
+ Ensure.ArgumentNotNull(parent, "parent");
+
var request = parent.Request.CreateChild(service, this);
return parent.Kernel.Resolve(request);
}

- private Func<IBindingMetadata, bool> ReadConstraintFromAttributes()
+ /// <summary>
+ /// Reads the resolution constraint from target.
+ /// </summary>
+ /// <returns>The resolution constraint.</returns>
+ protected virtual Func<IBindingMetadata, bool> ReadConstraintFromTarget()
{
ConstraintAttribute[] attributes =
Site.GetAttributes<ConstraintAttribute>().ToArray();


Copied:
experiments/ninject2/src/Ninject/Selection/Heuristics/IInjectionHeuristic.cs
(from r152,
/experiments/ninject2/src/Ninject/Selection/Heuristics/IMethodInjectionHeuristic.cs)
==============================================================================
---
/experiments/ninject2/src/Ninject/Selection/Heuristics/IMethodInjectionHeuristic.cs
(original)
+++
experiments/ninject2/src/Ninject/Selection/Heuristics/IInjectionHeuristic.cs
Sat Mar 7 10:56:50 2009
@@ -23,15 +23,15 @@
namespace Ninject.Selection.Heuristics
{
/// <summary>
- /// Determines whether methods should be injected during activation.
+ /// Determines whether members should be injected during activation.
/// </summary>
- public interface IMethodInjectionHeuristic : INinjectComponent
+ public interface IInjectionHeuristic : INinjectComponent
{
/// <summary>
- /// Returns a value indicating whether the specified method should be
injected.
+ /// Returns a value indicating whether the specified member should be
injected.
/// </summary>
- /// <param name="method">The method.</param>
- /// <returns><c>True</c> if the method should be injected; otherwise
<c>false</c>.</returns>
- bool ShouldInject(MethodInfo method);
+ /// <param name="member">The member in question.</param>
+ /// <returns><c>True</c> if the member should be injected; otherwise
<c>false</c>.</returns>
+ bool ShouldInject(MemberInfo member);
}
}

Modified:
experiments/ninject2/src/Ninject/Selection/Heuristics/StandardConstructorScorer.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Selection/Heuristics/StandardConstructorScorer.cs
(original)
+++
experiments/ninject2/src/Ninject/Selection/Heuristics/StandardConstructorScorer.cs
Sat Mar 7 10:56:50 2009
@@ -18,6 +18,7 @@
using System;
using System.Reflection;
using Ninject.Components;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Language;
#endregion

@@ -36,6 +37,7 @@
/// <returns>The constructor's score.</returns>
public int Score(ConstructorInfo constructor)
{
+ Ensure.ArgumentNotNull(constructor, "constructor");
return constructor.HasAttribute(Settings.InjectAttribute) ?
Int32.MaxValue : constructor.GetParameters().Length;
}
}

Copied:
experiments/ninject2/src/Ninject/Selection/Heuristics/StandardInjectionHeuristic.cs
(from r152,
/experiments/ninject2/src/Ninject/Selection/Heuristics/StandardMethodInjectionHeuristic.cs)
==============================================================================
---
/experiments/ninject2/src/Ninject/Selection/Heuristics/StandardMethodInjectionHeuristic.cs
(original)
+++
experiments/ninject2/src/Ninject/Selection/Heuristics/StandardInjectionHeuristic.cs
Sat Mar 7 10:56:50 2009
@@ -18,25 +18,27 @@
using System;
using System.Reflection;
using Ninject.Components;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Language;
#endregion

namespace Ninject.Selection.Heuristics
{
/// <summary>
- /// Determines whether methods should be injected during activation by
checking
+ /// Determines whether members should be injected during activation by
checking
/// if they are decorated with an injection marker attribute.
/// </summary>
- public class StandardMethodInjectionHeuristic : NinjectComponent,
IMethodInjectionHeuristic
+ public class StandardInjectionHeuristic : NinjectComponent,
IInjectionHeuristic
{
/// <summary>
- /// Returns a value indicating whether the specified method should be
injected.
+ /// Returns a value indicating whether the specified member should be
injected.
/// </summary>
- /// <param name="method">The method.</param>
- /// <returns><c>True</c> if the method should be injected; otherwise
<c>false</c>.</returns>
- public bool ShouldInject(MethodInfo method)
+ /// <param name="member">The member in question.</param>
+ /// <returns><c>True</c> if the member should be injected; otherwise
<c>false</c>.</returns>
+ public bool ShouldInject(MemberInfo member)
{
- return method.HasAttribute(Settings.InjectAttribute);
+ Ensure.ArgumentNotNull(member, "member");
+ return member.HasAttribute(Settings.InjectAttribute);
}
}
}

Modified: experiments/ninject2/src/Ninject/Selection/ISelector.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Selection/ISelector.cs (original)
+++ experiments/ninject2/src/Ninject/Selection/ISelector.cs Sat Mar 7
10:56:50 2009
@@ -35,14 +35,9 @@
IConstructorScorer ConstructorScorer { get; set; }

/// <summary>
- /// Gets the property injection heuristics.
+ /// Gets the heuristics used to determine which members should be
injected.
/// </summary>
- ICollection<IPropertyInjectionHeuristic> PropertyInjectionHeuristics {
get; }
-
- /// <summary>
- /// Gets the method injection heuristics.
- /// </summary>
- ICollection<IMethodInjectionHeuristic> MethodInjectionHeuristics { get; }
+ ICollection<IInjectionHeuristic> InjectionHeuristics { get; }

/// <summary>
/// Selects the constructor to call on the specified type, by using the
constructor scorer.
@@ -52,14 +47,14 @@
ConstructorInfo SelectConstructor(Type type);

/// <summary>
- /// Selects properties that should be injected, by using the property
injection heuristics.
+ /// Selects properties that should be injected.
/// </summary>
/// <param name="type">The type.</param>
/// <returns>A series of the selected properties.</returns>
IEnumerable<PropertyInfo> SelectPropertiesForInjection(Type type);

/// <summary>
- /// Selects methods that should be injected, by using the method
injection heuristics.
+ /// Selects methods that should be injected.
/// </summary>
/// <param name="type">The type.</param>
/// <returns>A series of the selected methods.</returns>

Modified: experiments/ninject2/src/Ninject/Selection/Selector.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Selection/Selector.cs (original)
+++ experiments/ninject2/src/Ninject/Selection/Selector.cs Sat Mar 7
10:56:50 2009
@@ -20,6 +20,7 @@
using System.Linq;
using System.Reflection;
using Ninject.Components;
+using Ninject.Infrastructure;
using Ninject.Selection.Heuristics;
#endregion

@@ -40,25 +41,20 @@
/// <summary>
/// Gets the property injection heuristics.
/// </summary>
- public ICollection<IPropertyInjectionHeuristic>
PropertyInjectionHeuristics { get; private set; }
-
- /// <summary>
- /// Gets the method injection heuristics.
- /// </summary>
- public ICollection<IMethodInjectionHeuristic> MethodInjectionHeuristics
{ get; private set; }
+ public ICollection<IInjectionHeuristic> InjectionHeuristics { get;
private set; }

/// <summary>
/// Initializes a new instance of the <see cref="Selector"/> class.
/// </summary>
/// <param name="constructorScorer">The constructor scorer.</param>
- /// <param name="propertyInjectionHeuristics">The property injection
heuristics.</param>
- /// <param name="methodInjectionHeuristics">The method injection
heuristics.</param>
- public Selector(IConstructorScorer constructorScorer,
IEnumerable<IPropertyInjectionHeuristic> propertyInjectionHeuristics,
- IEnumerable<IMethodInjectionHeuristic> methodInjectionHeuristics)
+ /// <param name="injectionHeuristics">The injection heuristics.</param>
+ public Selector(IConstructorScorer constructorScorer,
IEnumerable<IInjectionHeuristic> injectionHeuristics)
{
+ Ensure.ArgumentNotNull(constructorScorer, "constructorScorer");
+ Ensure.ArgumentNotNull(injectionHeuristics, "injectionHeuristics");
+
ConstructorScorer = constructorScorer;
- PropertyInjectionHeuristics = propertyInjectionHeuristics.ToList();
- MethodInjectionHeuristics = methodInjectionHeuristics.ToList();
+ InjectionHeuristics = injectionHeuristics.ToList();
}

/// <summary>
@@ -68,6 +64,8 @@
/// <returns>The selected constructor, or <see langword="null"/> if none
were available.</returns>
public ConstructorInfo SelectConstructor(Type type)
{
+ Ensure.ArgumentNotNull(type, "type");
+
ConstructorInfo constructor =
type.GetConstructors(Flags).OrderByDescending(c =>
ConstructorScorer.Score(c)).FirstOrDefault();

if (constructor == null)
@@ -77,23 +75,25 @@
}

/// <summary>
- /// Selects properties that should be injected, by using the property
injection heuristics.
+ /// Selects properties that should be injected.
/// </summary>
/// <param name="type">The type.</param>
/// <returns>A series of the selected properties.</returns>
public IEnumerable<PropertyInfo> SelectPropertiesForInjection(Type type)
{
- return type.GetProperties(Flags).Where(p =>
PropertyInjectionHeuristics.Any(h => h.ShouldInject(p)));
+ Ensure.ArgumentNotNull(type, "type");
+ return type.GetProperties(Flags).Where(p => InjectionHeuristics.Any(h
=> h.ShouldInject(p)));
}

/// <summary>
- /// Selects methods that should be injected, by using the method
injection heuristics.
+ /// Selects methods that should be injected.
/// </summary>
/// <param name="type">The type.</param>
/// <returns>A series of the selected methods.</returns>
public IEnumerable<MethodInfo> SelectMethodsForInjection(Type type)
{
- return type.GetMethods(Flags).Where(m =>
MethodInjectionHeuristics.Any(h => h.ShouldInject(m)));
+ Ensure.ArgumentNotNull(type, "type");
+ return type.GetMethods(Flags).Where(m => InjectionHeuristics.Any(h =>
h.ShouldInject(m)));
}
}
}

Modified: experiments/ninject2/src/Ninject/StandardKernel.cs
==============================================================================
--- experiments/ninject2/src/Ninject/StandardKernel.cs (original)
+++ experiments/ninject2/src/Ninject/StandardKernel.cs Sat Mar 7 10:56:50
2009
@@ -61,8 +61,7 @@

Components.Add<ISelector, Selector>();
Components.Add<IConstructorScorer, StandardConstructorScorer>();
- Components.Add<IPropertyInjectionHeuristic,
StandardPropertyInjectionHeuristic>();
- Components.Add<IMethodInjectionHeuristic,
StandardMethodInjectionHeuristic>();
+ Components.Add<IInjectionHeuristic, StandardInjectionHeuristic>();

Components.Add<IPipeline, Pipeline>();
Components.Add<IActivationStrategy, PropertyInjectionStrategy>();

Modified: experiments/ninject2/src/Ninject/Syntax/BindingRoot.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Syntax/BindingRoot.cs (original)
+++ experiments/ninject2/src/Ninject/Syntax/BindingRoot.cs Sat Mar 7
10:56:50 2009
@@ -16,6 +16,7 @@
#endregion
#region Using Directives
using System;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Disposal;
using Ninject.Planning.Bindings;
#endregion
@@ -42,6 +43,7 @@
/// <param name="service">The service to bind.</param>
public IBindingToSyntax<object> Bind(Type service)
{
+ Ensure.ArgumentNotNull(service, "service");
return RegisterBindingAndCreateBuilder<object>(service);
}


Modified: experiments/ninject2/src/Ninject/Syntax/ModuleLoadExtensions.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Syntax/ModuleLoadExtensions.cs
(original)
+++ experiments/ninject2/src/Ninject/Syntax/ModuleLoadExtensions.cs Sat
Mar 7 10:56:50 2009
@@ -17,6 +17,7 @@
#region Using Directives
using System;
using System.Reflection;
+using Ninject.Infrastructure;
using Ninject.Modules;
#endregion

@@ -37,6 +38,7 @@
public static bool HasModule<TModule>(this IKernel kernel)
where TModule : IModule
{
+ Ensure.ArgumentNotNull(kernel, "kernel");
return kernel.HasModule(typeof(TModule));
}

@@ -47,6 +49,7 @@
public static void LoadModule<TModule>(this IKernel kernel)
where TModule : IModule, new()
{
+ Ensure.ArgumentNotNull(kernel, "kernel");
kernel.LoadModule(new TModule());
}

@@ -57,6 +60,7 @@
public static void UnloadModule<TModule>(this IKernel kernel)
where TModule : IModule
{
+ Ensure.ArgumentNotNull(kernel, "kernel");
kernel.UnloadModule(typeof(TModule));
}

@@ -146,6 +150,7 @@

private static IModuleLoader GetModuleLoader(IKernel kernel)
{
+ Ensure.ArgumentNotNull(kernel, "kernel");
return kernel.Components.Get<IModuleLoader>();
}
#endif //!SILVERLIGHT

Modified: experiments/ninject2/src/Ninject/Syntax/ResolutionExtensions.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Syntax/ResolutionExtensions.cs
(original)
+++ experiments/ninject2/src/Ninject/Syntax/ResolutionExtensions.cs Sat
Mar 7 10:56:50 2009
@@ -19,6 +19,7 @@
using System.Collections.Generic;
using System.Linq;
using Ninject.Activation;
+using Ninject.Infrastructure;
using Ninject.Parameters;
using Ninject.Planning.Bindings;
using Ninject.Syntax;
@@ -261,6 +262,10 @@

private static IEnumerable<object> GetResolutionIterator(IResolutionRoot
root, Type service, Func<IBindingMetadata, bool> constraint,
IEnumerable<IParameter> parameters, bool isOptional)
{
+ Ensure.ArgumentNotNull(root, "root");
+ Ensure.ArgumentNotNull(service, "service");
+ Ensure.ArgumentNotNull(parameters, "parameters");
+
IRequest request = root.CreateRequest(service, constraint, parameters,
isOptional);
return root.Resolve(request);
}

Reply all
Reply to author
Forward
0 new messages