[ninject commit] r153 - in experiments/ninject2: src src/Ninject src/Ninject.Tests src/Ninject.Tests/Integration s...

6 views
Skip to first unread message

codesite...@google.com

unread,
Feb 24, 2009, 11:59:22 PM2/24/09
to ninje...@googlegroups.com
Author: nkohari
Date: Tue Feb 24 20:04:41 2009
New Revision: 153

Added:
experiments/ninject2/src/Ninject.Tests/Unit/ActivationBlockTests.cs
- copied, changed from r151,
/experiments/ninject2/src/Ninject.Tests/Unit/ActivationScopeTests.cs
experiments/ninject2/src/Ninject/Activation/Blocks/
- copied from r151,
/experiments/ninject2/src/Ninject/Activation/Scope/
experiments/ninject2/src/Ninject/Activation/Blocks/ActivationBlock.cs
- copied, changed from r151,
/experiments/ninject2/src/Ninject/Activation/Scope/ActivationScope.cs
experiments/ninject2/src/Ninject/Activation/Blocks/IActivationBlock.cs
- copied, changed from r151,
/experiments/ninject2/src/Ninject/Activation/Scope/IActivationScope.cs
experiments/ninject2/src/Ninject/Activation/Hook.cs

experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerable.cs
- copied, changed from r151,
/experiments/ninject2/src/Ninject/Infrastructure/LinqReflection.cs

experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerableOfT.cs
- copied, changed from r151,
/experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerable.cs
experiments/ninject2/src/Ninject/Infrastructure/StandardScopeCallbacks.cs
- copied, changed from r151,
/experiments/ninject2/src/Ninject/Infrastructure/IHaveKernel.cs
experiments/ninject2/tools/xunit.net/xunit.should.dll (contents, props
changed)
Removed:
experiments/ninject2/src/Ninject.Tests/ShouldExtensions.cs
experiments/ninject2/src/Ninject.Tests/Unit/ActivationScopeTests.cs
experiments/ninject2/src/Ninject/Activation/Blocks/ActivationScope.cs
experiments/ninject2/src/Ninject/Activation/Blocks/IActivationScope.cs
experiments/ninject2/src/Ninject/Activation/Scope/
experiments/ninject2/src/Ninject/Infrastructure/LinqReflection.cs
Modified:

experiments/ninject2/src/Ninject.Tests/Integration/ActivationScopeTests.cs

experiments/ninject2/src/Ninject.Tests/Integration/CircularDependenciesTests.cs

experiments/ninject2/src/Ninject.Tests/Integration/EnumerableDependenciesTests.cs

experiments/ninject2/src/Ninject.Tests/Integration/ExternalInjectionTests.cs
experiments/ninject2/src/Ninject.Tests/Integration/RequestScopeTests.cs
experiments/ninject2/src/Ninject.Tests/Integration/SingletonScopeTests.cs

experiments/ninject2/src/Ninject.Tests/Integration/SpecialResolutionTests.cs
experiments/ninject2/src/Ninject.Tests/Integration/StandardKernelTests.cs
experiments/ninject2/src/Ninject.Tests/Integration/ThreadScopeTests.cs
experiments/ninject2/src/Ninject.Tests/Integration/TransientScopeTests.cs
experiments/ninject2/src/Ninject.Tests/Ninject.Tests.csproj
experiments/ninject2/src/Ninject.Tests/Unit/BindingActionStrategyTests.cs
experiments/ninject2/src/Ninject.Tests/Unit/CacheTests.cs
experiments/ninject2/src/Ninject.Tests/Unit/CallbackProviderTests.cs
experiments/ninject2/src/Ninject.Tests/Unit/ComponentContainerTests.cs
experiments/ninject2/src/Ninject.Tests/Unit/ConstantProviderTests.cs
experiments/ninject2/src/Ninject.Tests/Unit/DisposableStrategyTests.cs

experiments/ninject2/src/Ninject.Tests/Unit/ExpressionConstructorInjectorTests.cs

experiments/ninject2/src/Ninject.Tests/Unit/ExpressionMethodInjectorTests.cs

experiments/ninject2/src/Ninject.Tests/Unit/ExpressionPropertyInjectorTests.cs

experiments/ninject2/src/Ninject.Tests/Unit/ExpressionVoidMethodInjectorTests.cs
experiments/ninject2/src/Ninject.Tests/Unit/InitializableStrategyTests.cs

experiments/ninject2/src/Ninject.Tests/Unit/MethodInjectionDirectiveBaseTests.cs
experiments/ninject2/src/Ninject.Tests/Unit/NamedAttributeTests.cs
experiments/ninject2/src/Ninject.Tests/Unit/PipelineTests.cs

experiments/ninject2/src/Ninject.Tests/Unit/PropertyInjectionDirectiveTests.cs
experiments/ninject2/src/Ninject.Tests/Unit/StartableStrategyTests.cs
experiments/ninject2/src/Ninject/Activation/IRequest.cs
experiments/ninject2/src/Ninject/Components/ComponentContainer.cs
experiments/ninject2/src/Ninject/IKernel.cs
experiments/ninject2/src/Ninject/KernelBase.cs
experiments/ninject2/src/Ninject/Ninject.csproj
experiments/ninject2/src/Ninject/Planning/Bindings/Binding.cs
experiments/ninject2/src/Ninject/Planning/Bindings/BindingBuilder.cs
experiments/ninject2/src/Ninject/Planning/Targets/Target.cs
experiments/ninject2/src/Ninject/Syntax/IResolutionRoot.cs
experiments/ninject2/src/Ninject/Syntax/ResolutionExtensions.cs
experiments/ninject2/src/SharedAssemblyInfo.cs

Log:


Modified:
experiments/ninject2/src/Ninject.Tests/Integration/ActivationScopeTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Integration/ActivationScopeTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Integration/ActivationScopeTests.cs
Tue Feb 24 20:04:41 2009
@@ -1,53 +1,53 @@
using System;
-using Ninject.Activation.Scope;
-using Ninject.Infrastructure.Disposal;
+using Ninject.Activation.Blocks;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

-namespace Ninject.Tests.Integration.ActivationScopeTests
+namespace Ninject.Tests.Integration.ActivationBlockTests
{
- public class ActivationScopeContext
+ public class ActivationBlockContext
{
protected readonly StandardKernel kernel;
- protected readonly ActivationScope scope;
+ protected readonly ActivationBlock block;

- public ActivationScopeContext()
+ public ActivationBlockContext()
{
kernel = new StandardKernel();
- scope = new ActivationScope(kernel);
+ block = new ActivationBlock(kernel);
}
}

- public class WhenScopeIsCreated : ActivationScopeContext
+ public class WhenBlockIsCreated : ActivationBlockContext
{
[Fact]
- public void FirstActivatedInstanceIsReusedWithinScope()
+ public void FirstActivatedInstanceIsReusedWithinBlock()
{
kernel.Bind<IWeapon>().To<Sword>();

- var weapon1 = scope.Get<IWeapon>();
- var weapon2 = scope.Get<IWeapon>();
+ var weapon1 = block.Get<IWeapon>();
+ var weapon2 = block.Get<IWeapon>();

weapon1.ShouldBeSameAs(weapon2);
}

[Fact]
- public void ScopeDoesNotInterfereWithExternalResolution()
+ public void BlockDoesNotInterfereWithExternalResolution()
{
kernel.Bind<IWeapon>().To<Sword>();

- var weapon1 = scope.Get<IWeapon>();
+ var weapon1 = block.Get<IWeapon>();
var weapon2 = kernel.Get<IWeapon>();

weapon1.ShouldNotBeSameAs(weapon2);
}

[Fact]
- public void InstancesAreNotGarbageCollectedAsLongAsScopeRemainsAlive()
+ public void InstancesAreNotGarbageCollectedAsLongAsBlockRemainsAlive()
{
kernel.Bind<NotifiesWhenDisposed>().ToSelf();

- var instance = scope.Get<NotifiesWhenDisposed>();
+ var instance = block.Get<NotifiesWhenDisposed>();

GC.Collect();
GC.WaitForPendingFinalizers();
@@ -56,15 +56,15 @@
}
}

- public class WhenScopeIsDisposed : ActivationScopeContext
+ public class WhenBlockIsDisposed : ActivationBlockContext
{
[Fact]
- public void InstancesActivatedWithinScopeAreDeactivated()
+ public void InstancesActivatedWithinBlockAreDeactivated()
{
kernel.Bind<NotifiesWhenDisposed>().ToSelf();

- var instance = scope.Get<NotifiesWhenDisposed>();
- scope.Dispose();
+ var instance = block.Get<NotifiesWhenDisposed>();
+ block.Dispose();

instance.IsDisposed.ShouldBeTrue();
}

Modified:
experiments/ninject2/src/Ninject.Tests/Integration/CircularDependenciesTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Integration/CircularDependenciesTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Integration/CircularDependenciesTests.cs
Tue Feb 24 20:04:41 2009
@@ -3,6 +3,7 @@
using Ninject.Activation;
using Ninject.Parameters;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Integration.CircularDependenciesTests
{
@@ -28,7 +29,7 @@
public void DoesNotThrowExceptionIfHookIsCreated()
{
var request = new Request(typeof(TwoWayConstructorFoo), null,
Enumerable.Empty<IParameter>(), null, false);
- Assert.DoesNotThrow(() => kernel.Resolve(request));
+ Assert.DoesNotThrow(() =>
kernel.Resolve<TwoWayConstructorFoo>(request));
}

[Fact]
@@ -76,7 +77,7 @@
public void DoesNotThrowExceptionIfHookIsCreated()
{
var request = new Request(typeof(ThreeWayConstructorFoo), null,
Enumerable.Empty<IParameter>(), null, false);
- Assert.DoesNotThrow(() => kernel.Resolve(request));
+ Assert.DoesNotThrow(() =>
kernel.Resolve<ThreeWayConstructorFoo>(request));
}

[Fact]

Modified:
experiments/ninject2/src/Ninject.Tests/Integration/EnumerableDependenciesTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Integration/EnumerableDependenciesTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Integration/EnumerableDependenciesTests.cs
Tue Feb 24 20:04:41 2009
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Integration.EnumerableDependenciesTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Integration/ExternalInjectionTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Integration/ExternalInjectionTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Integration/ExternalInjectionTests.cs
Tue Feb 24 20:04:41 2009
@@ -1,6 +1,7 @@
using System;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Integration.ExternalInjectionTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Integration/RequestScopeTests.cs
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Integration/RequestScopeTests.cs
(original)
+++ experiments/ninject2/src/Ninject.Tests/Integration/RequestScopeTests.cs
Tue Feb 24 20:04:41 2009
@@ -5,6 +5,7 @@
using Ninject.Infrastructure.Disposal;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Integration.RequestScopeTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Integration/SingletonScopeTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Integration/SingletonScopeTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Integration/SingletonScopeTests.cs
Tue Feb 24 20:04:41 2009
@@ -3,6 +3,7 @@
using Ninject.Infrastructure.Disposal;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Integration.SingletonScopeTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Integration/SpecialResolutionTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Integration/SpecialResolutionTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Integration/SpecialResolutionTests.cs
Tue Feb 24 20:04:41 2009
@@ -1,5 +1,6 @@
using System;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Integration.SpecialResolutionTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Integration/StandardKernelTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Integration/StandardKernelTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Integration/StandardKernelTests.cs
Tue Feb 24 20:04:41 2009
@@ -3,6 +3,7 @@
using System.Linq;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Integration.StandardKernelTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Integration/ThreadScopeTests.cs
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Integration/ThreadScopeTests.cs
(original)
+++ experiments/ninject2/src/Ninject.Tests/Integration/ThreadScopeTests.cs
Tue Feb 24 20:04:41 2009
@@ -1,9 +1,9 @@
using System;
using System.Threading;
using Ninject.Activation.Caching;
-using Ninject.Infrastructure.Disposal;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Integration.ThreadScopeTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Integration/TransientScopeTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Integration/TransientScopeTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Integration/TransientScopeTests.cs
Tue Feb 24 20:04:41 2009
@@ -2,6 +2,7 @@
using Ninject.Activation;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Integration.TransientScopeTests
{

Modified: experiments/ninject2/src/Ninject.Tests/Ninject.Tests.csproj
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Ninject.Tests.csproj (original)
+++ experiments/ninject2/src/Ninject.Tests/Ninject.Tests.csproj Tue Feb 24
20:04:41 2009
@@ -57,12 +57,15 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\tools\xunit.net\xunit.dll</HintPath>
</Reference>
+ <Reference Include="xunit.should, Version=1.0.0.0, Culture=neutral,
processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\tools\xunit.net\xunit.should.dll</HintPath>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Integration\RequestScopeTests.cs" />
<Compile Include="Integration\ExternalInjectionTests.cs" />
<Compile Include="Fakes\NotifiesWhenDisposed.cs" />
- <Compile Include="ShouldExtensions.cs" />
<Compile Include="ExtensionsForIEnumerable.cs" />
<Compile Include="Integration\CircularDependenciesTests.cs" />
<Compile Include="Integration\TransientScopeTests.cs" />
@@ -74,7 +77,7 @@
<Compile Include="Integration\ActivationScopeTests.cs" />
<Compile Include="Unit\CallbackProviderTests.cs" />
<Compile Include="Unit\ConstantProviderTests.cs" />
- <Compile Include="Unit\ActivationScopeTests.cs" />
+ <Compile Include="Unit\ActivationBlockTests.cs" />
<Compile Include="Unit\BindingActionStrategyTests.cs" />
<Compile Include="Unit\NamedAttributeTests.cs" />
<Compile Include="Unit\PropertyInjectionStrategyTests.cs" />

Copied: experiments/ninject2/src/Ninject.Tests/Unit/ActivationBlockTests.cs
(from r151,
/experiments/ninject2/src/Ninject.Tests/Unit/ActivationScopeTests.cs)
==============================================================================
--- /experiments/ninject2/src/Ninject.Tests/Unit/ActivationScopeTests.cs
(original)
+++ experiments/ninject2/src/Ninject.Tests/Unit/ActivationBlockTests.cs Tue
Feb 24 20:04:41 2009
@@ -1,65 +1,45 @@
using System;
using Moq;
using Ninject.Activation;
-using Ninject.Activation.Scope;
-using Ninject.Parameters;
-using Ninject.Planning.Bindings;
+using Ninject.Activation.Blocks;
using Ninject.Syntax;
-using Ninject.Tests.Fakes;
using Xunit;

-namespace Ninject.Tests.Unit.ActivationScopeTests
+namespace Ninject.Tests.Unit.ActivationBlockTests
{
- public class ActivationScopeContext
+ public class ActivationBlockContext
{
- protected readonly ActivationScope scope;
+ protected readonly ActivationBlock block;
protected readonly Mock<IResolutionRoot> parentMock;
protected readonly Mock<IRequest> requestMock;

- public ActivationScopeContext()
+ public ActivationBlockContext()
{
parentMock = new Mock<IResolutionRoot>();
requestMock = new Mock<IRequest>();
- scope = new ActivationScope(parentMock.Object);
+ block = new ActivationBlock(parentMock.Object);
}
}

- public class WhenCanResolveIsCalled : ActivationScopeContext
+ public class WhenCanResolveIsCalled : ActivationBlockContext
{
[Fact]
- public void ScopeDelegatesCallToParent()
+ public void DelegatesCallToParent()
{
IRequest request = requestMock.Object;
- scope.CanResolve(request);
+ block.CanResolve(request);
parentMock.Verify(x => x.CanResolve(request));
}
}

- public class WhenResolveIsCalledWithRequestObject : ActivationScopeContext
+ public class WhenResolveIsCalledWithRequestObject : ActivationBlockContext
{
[Fact]
- public void ScopeDelegatesCallToParent()
+ public void DelegatesCallToParent()
{
IRequest request = requestMock.Object;
- scope.Resolve(request);
- parentMock.Verify(x => x.Resolve(request));
- }
- }
-
- public class WhenResolveIsCalledWithServiceType : ActivationScopeContext
- {
- [Fact]
- public void ScopeCreatesRequestAndDelegatesCallToParent()
- {
- scope.Resolve(typeof(IWeapon), null, new IParameter[0], false);
- parentMock.Verify(x => x.Resolve(It.Is<Request>(r => r.Service ==
typeof(IWeapon) && r.Constraint == null && r.Parameters.Count == 0)));
- }
-
- [Fact]
- public void ScopeCreatesRequestWithItselfAsScope()
- {
- scope.Resolve(typeof(IWeapon), null, new IParameter[0], false);
- parentMock.Verify(x => x.Resolve(It.Is<Request>(r =>
ReferenceEquals(r.ScopeCallback(), scope))));
+ block.Resolve<object>(request);
+ parentMock.Verify(x => x.Resolve<object>(request));
}
}
}

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/BindingActionStrategyTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Unit/BindingActionStrategyTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Unit/BindingActionStrategyTests.cs
Tue Feb 24 20:04:41 2009
@@ -4,6 +4,7 @@
using Ninject.Activation.Strategies;
using Ninject.Planning.Bindings;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.BindingActionStrategyTests
{

Modified: experiments/ninject2/src/Ninject.Tests/Unit/CacheTests.cs
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Unit/CacheTests.cs (original)
+++ experiments/ninject2/src/Ninject.Tests/Unit/CacheTests.cs Tue Feb 24
20:04:41 2009
@@ -6,6 +6,7 @@
using Ninject.Planning.Bindings;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.CacheTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/CallbackProviderTests.cs
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Unit/CallbackProviderTests.cs
(original)
+++ experiments/ninject2/src/Ninject.Tests/Unit/CallbackProviderTests.cs
Tue Feb 24 20:04:41 2009
@@ -4,6 +4,7 @@
using Ninject.Activation.Providers;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.CallbackProviderTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/ComponentContainerTests.cs
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Unit/ComponentContainerTests.cs
(original)
+++ experiments/ninject2/src/Ninject.Tests/Unit/ComponentContainerTests.cs
Tue Feb 24 20:04:41 2009
@@ -5,6 +5,7 @@
using Ninject.Components;
using Ninject.Infrastructure.Disposal;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.ComponentContainerTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/ConstantProviderTests.cs
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Unit/ConstantProviderTests.cs
(original)
+++ experiments/ninject2/src/Ninject.Tests/Unit/ConstantProviderTests.cs
Tue Feb 24 20:04:41 2009
@@ -4,6 +4,7 @@
using Ninject.Activation.Providers;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.ConstantProviderTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/DisposableStrategyTests.cs
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Unit/DisposableStrategyTests.cs
(original)
+++ experiments/ninject2/src/Ninject.Tests/Unit/DisposableStrategyTests.cs
Tue Feb 24 20:04:41 2009
@@ -5,6 +5,7 @@
using Ninject.Infrastructure.Disposal;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.DisposableStrategyTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionConstructorInjectorTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionConstructorInjectorTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionConstructorInjectorTests.cs
Tue Feb 24 20:04:41 2009
@@ -3,6 +3,7 @@
using Ninject.Injection.Expressions;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.ExpressionConstructorInjectorTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionMethodInjectorTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionMethodInjectorTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionMethodInjectorTests.cs
Tue Feb 24 20:04:41 2009
@@ -3,6 +3,7 @@
using Ninject.Injection.Expressions;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.ExpressionMethodInjectorTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionPropertyInjectorTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionPropertyInjectorTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionPropertyInjectorTests.cs
Tue Feb 24 20:04:41 2009
@@ -3,6 +3,7 @@
using Ninject.Injection.Expressions;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.ExpressionPropertyInjectorTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionVoidMethodInjectorTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionVoidMethodInjectorTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Unit/ExpressionVoidMethodInjectorTests.cs
Tue Feb 24 20:04:41 2009
@@ -3,6 +3,7 @@
using Ninject.Injection.Expressions;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.ExpressionVoidMethodInjectorTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/InitializableStrategyTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Unit/InitializableStrategyTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Unit/InitializableStrategyTests.cs
Tue Feb 24 20:04:41 2009
@@ -3,6 +3,7 @@
using Ninject.Activation;
using Ninject.Activation.Strategies;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.InitializableStrategyTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/MethodInjectionDirectiveBaseTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Unit/MethodInjectionDirectiveBaseTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Unit/MethodInjectionDirectiveBaseTests.cs
Tue Feb 24 20:04:41 2009
@@ -4,6 +4,7 @@
using Ninject.Planning.Targets;
using Ninject.Tests.Fakes;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.MethodInjectionDirectiveBaseTests
{

Modified: experiments/ninject2/src/Ninject.Tests/Unit/NamedAttributeTests.cs
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Unit/NamedAttributeTests.cs
(original)
+++ experiments/ninject2/src/Ninject.Tests/Unit/NamedAttributeTests.cs Tue
Feb 24 20:04:41 2009
@@ -2,6 +2,7 @@
using Moq;
using Ninject.Planning.Bindings;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.NamedAttributeTests
{

Modified: experiments/ninject2/src/Ninject.Tests/Unit/PipelineTests.cs
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Unit/PipelineTests.cs (original)
+++ experiments/ninject2/src/Ninject.Tests/Unit/PipelineTests.cs Tue Feb 24
20:04:41 2009
@@ -5,6 +5,7 @@
using Ninject.Activation;
using Ninject.Activation.Strategies;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.PipelineTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/PropertyInjectionDirectiveTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Unit/PropertyInjectionDirectiveTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Unit/PropertyInjectionDirectiveTests.cs
Tue Feb 24 20:04:41 2009
@@ -1,6 +1,7 @@
using System;
using Ninject.Planning.Directives;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.PropertyInjectionDirectiveTests
{

Modified:
experiments/ninject2/src/Ninject.Tests/Unit/StartableStrategyTests.cs
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Unit/StartableStrategyTests.cs
(original)
+++ experiments/ninject2/src/Ninject.Tests/Unit/StartableStrategyTests.cs
Tue Feb 24 20:04:41 2009
@@ -3,6 +3,7 @@
using Ninject.Activation;
using Ninject.Activation.Strategies;
using Xunit;
+using Xunit.Should;

namespace Ninject.Tests.Unit.StartableStrategyTests
{

Copied:
experiments/ninject2/src/Ninject/Activation/Blocks/ActivationBlock.cs (from
r151, /experiments/ninject2/src/Ninject/Activation/Scope/ActivationScope.cs)
==============================================================================
--- /experiments/ninject2/src/Ninject/Activation/Scope/ActivationScope.cs
(original)
+++ experiments/ninject2/src/Ninject/Activation/Blocks/ActivationBlock.cs
Tue Feb 24 20:04:41 2009
@@ -17,20 +17,19 @@
#region Using Directives
using System;
using System.Collections.Generic;
-using Ninject.Activation.Hooks;
using Ninject.Infrastructure.Disposal;
using Ninject.Parameters;
using Ninject.Planning.Bindings;
using Ninject.Syntax;
#endregion

-namespace Ninject.Activation.Scope
+namespace Ninject.Activation.Blocks
{
/// <summary>
- /// A scope used for deterministic disposal of activated instances. When
the scope is
+ /// A block used for deterministic disposal of activated instances. When
the block is
/// disposed, all instances activated via it will be deactivated.
/// </summary>
- public class ActivationScope : DisposableObject, IActivationScope
+ public class ActivationBlock : DisposableObject, IActivationBlock
{
/// <summary>
/// Gets or sets the parent resolution root (usually the kernel).
@@ -38,10 +37,10 @@
public IResolutionRoot Parent { get; private set; }

/// <summary>
- /// Initializes a new instance of the <see cref="ActivationScope"/>
class.
+ /// Initializes a new instance of the <see cref="ActivationBlock"/>
class.
/// </summary>
/// <param name="parent">The parent resolution root.</param>
- public ActivationScope(IResolutionRoot parent)
+ public ActivationBlock(IResolutionRoot parent)
{
Parent = parent;
}
@@ -57,44 +56,27 @@
}

/// <summary>
- /// Resolves the specified request.
- /// </summary>
- /// <param name="service">The service to resolve.</param>
- /// <param name="constraint">The constraint to apply to the bindings to
determine if they match the request.</param>
- /// <param name="parameters">The parameters to pass to the
resolution.</param>
- /// <param name="isOptional"><c>True</c> if the request is optional;
otherwise, <c>false</c>.</param>
- /// <returns>A series of hooks that can be used to resolve instances
that match the request.</returns>
- public IEnumerable<IHook> Resolve(Type service, Func<IBindingMetadata,
bool> constraint, IEnumerable<IParameter> parameters, bool isOptional)
- {
- return Resolve(CreateDirectRequest(service, constraint, parameters,
isOptional));
- }
-
- /// <summary>
- /// Resolves the specified request.
+ /// Resolves activation hooks for the specified request.
/// </summary>
+ /// <typeparam name="T">The type of object that will be returned by the
hook (not necessarily the service).</typeparam>
/// <param name="request">The request to resolve.</param>
/// <returns>A series of hooks that can be used to resolve instances
that match the request.</returns>
- public IEnumerable<IHook> Resolve(IRequest request)
+ public IEnumerable<Hook<T>> Resolve<T>(IRequest request)
{
- return Parent.Resolve(request);
+ return Parent.Resolve<T>(request);
}

/// <summary>
/// Creates a request for the specified service.
/// </summary>
- /// <param name="service">The service to resolve.</param>
- /// <param name="constraint">The constraints to apply to the bindings to
determine if they match the request.</param>
+ /// <param name="service">The service that is being requested.</param>
+ /// <param name="constraint">The constraint to apply to the bindings to
determine if they match the request.</param>
/// <param name="parameters">The parameters to pass to the
resolution.</param>
/// <param name="isOptional"><c>True</c> if the request is optional;
otherwise, <c>false</c>.</param>
/// <returns>The created request.</returns>
- protected virtual IRequest CreateDirectRequest(Type service,
Func<IBindingMetadata, bool> constraint, IEnumerable<IParameter>
parameters, bool isOptional)
+ public virtual IRequest CreateRequest(Type service,
Func<IBindingMetadata, bool> constraint, IEnumerable<IParameter>
parameters, bool isOptional)
{
return new Request(service, constraint, parameters, () => this,
isOptional);
- }
-
- object IServiceProvider.GetService(Type serviceType)
- {
- return this.Get(serviceType);
}
}
}

Copied:
experiments/ninject2/src/Ninject/Activation/Blocks/IActivationBlock.cs
(from r151,
/experiments/ninject2/src/Ninject/Activation/Scope/IActivationScope.cs)
==============================================================================
--- /experiments/ninject2/src/Ninject/Activation/Scope/IActivationScope.cs
(original)
+++ experiments/ninject2/src/Ninject/Activation/Blocks/IActivationBlock.cs
Tue Feb 24 20:04:41 2009
@@ -20,11 +20,11 @@
using Ninject.Syntax;
#endregion

-namespace Ninject.Activation.Scope
+namespace Ninject.Activation.Blocks
{
/// <summary>
- /// A scope used for deterministic disposal of activated instances. When
the scope is
+ /// A block used for deterministic disposal of activated instances. When
the block is
/// disposed, all instances activated via it will be deactivated.
/// </summary>
- public interface IActivationScope : IResolutionRoot, INotifyWhenDisposed
{ }
+ public interface IActivationBlock : IResolutionRoot, INotifyWhenDisposed
{ }
}

Added: experiments/ninject2/src/Ninject/Activation/Hook.cs
==============================================================================
--- (empty file)
+++ experiments/ninject2/src/Ninject/Activation/Hook.cs Tue Feb 24 20:04:41
2009
@@ -0,0 +1,54 @@
+#region License
+// Author: Nate Kohari <na...@enkari.com>
+// Copyright (c) 2007-2009, Enkari, Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#endregion
+#region Using Directives
+using System;
+#endregion
+
+namespace Ninject.Activation
+{
+ /// <summary>
+ /// A placeholder for an instance of a service.
+ /// </summary>
+ public class Hook<T>
+ {
+ private readonly Func<object> _callback;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="Hook&lt;T&gt;"/> class.
+ /// </summary>
+ /// <param name="callback">The callback that will be triggered to
resolve the hook's instance.</param>
+ public Hook(Func<object> callback)
+ {
+ _callback = callback;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="Hook&lt;T&gt;"/> class.
+ /// </summary>
+ /// <param name="instance">The instance value that will be
returned.</param>
+ public Hook(object instance) : this(() => instance) { }
+
+ /// <summary>
+ /// Resolves the instance for the hook.
+ /// </summary>
+ /// <returns>The resolved instance.</returns>
+ public T Resolve()
+ {
+ return (T)_callback();
+ }
+ }
+}
\ No newline at end of file

Modified: experiments/ninject2/src/Ninject/Activation/IRequest.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Activation/IRequest.cs (original)
+++ experiments/ninject2/src/Ninject/Activation/IRequest.cs Tue Feb 24
20:04:41 2009
@@ -20,6 +20,7 @@
using Ninject.Parameters;
using Ninject.Planning.Bindings;
using Ninject.Planning.Targets;
+using Ninject.Syntax;
#endregion

namespace Ninject.Activation

Modified: experiments/ninject2/src/Ninject/Components/ComponentContainer.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Components/ComponentContainer.cs
(original)
+++ experiments/ninject2/src/Ninject/Components/ComponentContainer.cs Tue
Feb 24 20:04:41 2009
@@ -134,7 +134,7 @@
Type argument = component.GetGenericArguments()[0];

if (gtd.IsInterface && typeof(IEnumerable<>).IsAssignableFrom(gtd))
- return LinqReflection.CastSlow(GetAll(argument), argument);
+ return GetAll(argument).CastSlow(argument);
}

Type implementation = _mappings[component].FirstOrDefault();

Modified: experiments/ninject2/src/Ninject/IKernel.cs
==============================================================================
--- experiments/ninject2/src/Ninject/IKernel.cs (original)
+++ experiments/ninject2/src/Ninject/IKernel.cs Tue Feb 24 20:04:41 2009
@@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
using Ninject.Activation;
+using Ninject.Activation.Blocks;
using Ninject.Components;
using Ninject.Events;
using Ninject.Infrastructure.Disposal;
@@ -88,9 +89,9 @@
IEnumerable<IBinding> GetBindings(IRequest request);

/// <summary>
- /// Begins a new activation scope, which can be used to
deterministically dispose resolved instances.
+ /// Begins a new activation block, which can be used to
deterministically dispose resolved instances.
/// </summary>
- /// <returns>The new activation scope.</returns>
- IResolutionRoot BeginScope();
+ /// <returns>The new activation block.</returns>
+ IActivationBlock BeginBlock();
}
}

Copied:
experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerable.cs
(from r151,
/experiments/ninject2/src/Ninject/Infrastructure/LinqReflection.cs)
==============================================================================
--- /experiments/ninject2/src/Ninject/Infrastructure/LinqReflection.cs
(original)
+++
experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerable.cs
Tue Feb 24 20:04:41 2009
@@ -17,26 +17,29 @@
#region Using Directives
using System;
using System.Collections;
+using System.Collections.Generic;
using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
#endregion

-namespace Ninject.Infrastructure
+namespace Ninject.Infrastructure.Language
{
- internal static class LinqReflection
+ internal static class ExtensionsForIEnumerable
{
- public static object CastSlow(IEnumerable series, Type elementType)
+ public static IEnumerable CastSlow(this IEnumerable series, Type
elementType)
{
var method =
typeof(Enumerable).GetMethod("Cast").MakeGenericMethod(elementType);
- return method.Invoke(null, new[] { series });
+ return method.Invoke(null, new[] { series }) as IEnumerable;
}

- public static Array ToArraySlow(IEnumerable series, Type elementType)
+ public static Array ToArraySlow(this IEnumerable series, Type
elementType)
{
var method =
typeof(Enumerable).GetMethod("ToArray").MakeGenericMethod(elementType);
return method.Invoke(null, new[] { series }) as Array;
}

- public static IList ToListSlow(IEnumerable series, Type elementType)
+ public static IList ToListSlow(this IEnumerable series, Type elementType)
{
var method =
typeof(Enumerable).GetMethod("ToList").MakeGenericMethod(elementType);
return method.Invoke(null, new[] { series }) as IList;

Copied:
experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerableOfT.cs
(from r151,
/experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerable.cs)
==============================================================================
---
/experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerable.cs
(original)
+++
experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerableOfT.cs
Tue Feb 24 20:04:41 2009
@@ -22,7 +22,7 @@

namespace Ninject.Infrastructure.Language
{
- internal static class ExtensionsForIEnumerable
+ internal static class ExtensionsForIEnumerableOfT
{
public static void Map<T>(this IEnumerable<T> series, Action<T> action)
{

Copied:
experiments/ninject2/src/Ninject/Infrastructure/StandardScopeCallbacks.cs
(from r151, /experiments/ninject2/src/Ninject/Infrastructure/IHaveKernel.cs)
==============================================================================
--- /experiments/ninject2/src/Ninject/Infrastructure/IHaveKernel.cs
(original)
+++
experiments/ninject2/src/Ninject/Infrastructure/StandardScopeCallbacks.cs
Tue Feb 24 20:04:41 2009
@@ -16,18 +16,17 @@
#endregion
#region Using Directives
using System;
+using System.Web;
+using Ninject.Activation;
#endregion

namespace Ninject.Infrastructure
{
- /// <summary>
- /// Indicates that the object has a reference to an <see cref="IKernel"/>.
- /// </summary>
- public interface IHaveKernel
+ internal class StandardScopeCallbacks
{
- /// <summary>
- /// Gets the kernel.
- /// </summary>
- IKernel Kernel { get; }
+ public static readonly Func<IContext, object> Transient = ctx => null;
+ public static readonly Func<IContext, object> Singleton = ctx =>
ctx.Kernel;
+ public static readonly Func<IContext, object> Thread = ctx =>
System.Threading.Thread.CurrentThread;
+ public static readonly Func<IContext, object> Request = ctx =>
HttpContext.Current;
}
}

Modified: experiments/ninject2/src/Ninject/KernelBase.cs
==============================================================================
--- experiments/ninject2/src/Ninject/KernelBase.cs (original)
+++ experiments/ninject2/src/Ninject/KernelBase.cs Tue Feb 24 20:04:41 2009
@@ -19,9 +19,9 @@
using System.Collections.Generic;
using System.Linq;
using Ninject.Activation;
+using Ninject.Activation.Blocks;
using Ninject.Activation.Caching;
using Ninject.Activation.Providers;
-using Ninject.Activation.Scope;
using Ninject.Components;
using Ninject.Events;
using Ninject.Infrastructure;
@@ -211,8 +211,8 @@
var planner = Components.Get<IPlanner>();
var pipeline = Components.Get<IPipeline>();

- var binding = new Binding(service) { ScopeCallback = null };
- var request = CreateDirectRequest(service, null, parameters, false);
+ var binding = new Binding(service) { ScopeCallback =
StandardScopeCallbacks.Transient };
+ var request = CreateRequest(service, null, parameters, false);
var context = CreateContext(request, binding);

context.Plan = planner.GetPlan(service);
@@ -238,39 +238,41 @@
}

/// <summary>
- /// Resolves the specified request.
- /// </summary>
- /// <param name="service">The service to resolve.</param>
- /// <param name="constraint">The constraint to apply to the bindings to
determine if they match the request.</param>
- /// <param name="parameters">The parameters to pass to the
resolution.</param>
- /// <param name="isOptional"><c>True</c> if the request is optional;
otherwise, <c>false</c>.</param>
- /// <returns>A series of hooks that can be used to resolve instances
that match the request.</returns>
- public virtual IEnumerable<Hook> Resolve(Type service,
Func<IBindingMetadata, bool> constraint, IEnumerable<IParameter>
parameters, bool isOptional)
- {
- return Resolve(CreateDirectRequest(service, constraint, parameters,
isOptional));
- }
-
- /// <summary>
- /// Resolves the specified request.
+ /// Resolves activation hooks for the specified request.
/// </summary>
+ /// <typeparam name="T">The type of object that will be returned by the
hook (not necessarily the service).</typeparam>
/// <param name="request">The request to resolve.</param>
/// <returns>A series of hooks that can be used to resolve instances
that match the request.</returns>
- public virtual IEnumerable<Hook> Resolve(IRequest request)
+ public virtual IEnumerable<Hook<T>> Resolve<T>(IRequest request)
{
if (request.Service == typeof(IKernel))
- return new[] { new Hook(this) };
+ return new[] { new Hook<T>(this) };

if (!CanResolve(request)
&& !TryRegisterImplicitSelfBinding(request.Service))
{
if (request.IsOptional)
- return Enumerable.Empty<Hook>();
+ return Enumerable.Empty<Hook<T>>();
else
throw new
ActivationException(ExceptionFormatter.CouldNotResolveBinding(request));
}

return GetBindings(request)
.Where(binding => binding.Matches(request) && request.Matches(binding))
- .Select(binding => CreateHook(CreateContext(request, binding)));
+ .Select(binding => CreateContext(request, binding))
+ .Select(context => CreateHook<T>(context));
+ }
+
+ /// <summary>
+ /// Creates a request for the specified service.
+ /// </summary>
+ /// <param name="service">The service that is being requested.</param>
+ /// <param name="constraint">The constraint to apply to the bindings to
determine if they match the request.</param>
+ /// <param name="parameters">The parameters to pass to the
resolution.</param>
+ /// <param name="isOptional"><c>True</c> if the request is optional;
otherwise, <c>false</c>.</param>
+ /// <returns>The created request.</returns>
+ public virtual IRequest CreateRequest(Type service,
Func<IBindingMetadata, bool> constraint, IEnumerable<IParameter>
parameters, bool isOptional)
+ {
+ return new Request(service, constraint, parameters, null, isOptional);
}

/// <summary>
@@ -293,12 +295,12 @@
}

/// <summary>
- /// Begins a new activation scope, which can be used to
deterministically dispose resolved instances.
+ /// Begins a new activation block, which can be used to
deterministically dispose resolved instances.
/// </summary>
- /// <returns>The new activation scope.</returns>
- public IResolutionRoot BeginScope()
+ /// <returns>The new activation block.</returns>
+ public IActivationBlock BeginBlock()
{
- return new ActivationScope(this);
+ return new ActivationBlock(this);
}

/// <summary>
@@ -341,19 +343,6 @@
}

/// <summary>
- /// Creates a request for the specified service.
- /// </summary>
- /// <param name="service">The service to resolve.</param>
- /// <param name="constraint">The constraint to apply to the bindings to
determine if they match the request.</param>
- /// <param name="parameters">The parameters to pass to the
resolution.</param>
- /// <param name="isOptional"><c>True</c> if the request is optional;
otherwise, <c>false</c>.</param>
- /// <returns>The created request.</returns>
- protected virtual IRequest CreateDirectRequest(Type service,
Func<IBindingMetadata, bool> constraint, IEnumerable<IParameter>
parameters, bool isOptional)
- {
- return new Request(service, constraint, parameters, null, isOptional);
- }
-
- /// <summary>
/// Creates a context for the specified request and binding.
/// </summary>
/// <param name="request">The request.</param>
@@ -369,14 +358,9 @@
/// </summary>
/// <param name="context">The context.</param>
/// <returns>The created hook.</returns>
- protected virtual Hook CreateHook(IContext context)
- {
- return new Hook(() => context.Resolve());
- }
-
- object IServiceProvider.GetService(Type serviceType)
+ protected virtual Hook<T> CreateHook<T>(IContext context)
{
- return this.Get(serviceType);
+ return new Hook<T>(context.Resolve);
}
}
}

Modified: experiments/ninject2/src/Ninject/Ninject.csproj
==============================================================================
--- experiments/ninject2/src/Ninject/Ninject.csproj (original)
+++ experiments/ninject2/src/Ninject/Ninject.csproj Tue Feb 24 20:04:41 2009
@@ -59,6 +59,7 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="Activation\Caching\ICachePruner.cs" />
+ <Compile Include="Activation\Hook.cs" />
<Compile Include="Attributes\OptionalAttribute.cs" />
<Compile Include="Activation\Caching\GarbageCollectionCachePruner.cs">
<SubType>Code</SubType>
@@ -69,7 +70,6 @@
<Compile Include="Activation\Context.cs">
<SubType>Code</SubType>
</Compile>
- <Compile Include="Activation\Hook.cs" />
<Compile Include="Activation\Request.cs" />
<Compile Include="Activation\IContext.cs">
<SubType>Code</SubType>
@@ -106,6 +106,7 @@
<Compile Include="Attributes\NamedAttribute.cs" />
<Compile Include="Attributes\InjectAttribute.cs" />
<Compile Include="ActivationException.cs" />
+ <Compile Include="Infrastructure\StandardScopeCallbacks.cs" />
<Compile Include="Infrastructure\Introspection\ExceptionFormatter.cs"
/>
<Compile Include="Infrastructure\Introspection\FormatExtensions.cs" />
<Compile Include="Infrastructure\Language\ExtensionsForIDictionary.cs"
/>
@@ -124,11 +125,11 @@
<Compile Include="Components\NinjectComponent.cs" />
<Compile Include="INinjectSettings.cs" />
<Compile Include="Infrastructure\Disposal\DisposableObject.cs" />
- <Compile Include="Activation\Scope\IActivationScope.cs" />
+ <Compile Include="Activation\Blocks\IActivationBlock.cs" />
<Compile Include="Infrastructure\Disposal\INotifyWhenDisposed.cs" />
<Compile
Include="Infrastructure\Language\ExtensionsForEventHandler.cs" />
<Compile Include="Syntax\IResolutionRoot.cs" />
- <Compile Include="Activation\Scope\ActivationScope.cs" />
+ <Compile Include="Activation\Blocks\ActivationBlock.cs" />
<Compile
Include="Injection\Expressions\ExpressionMethodInjectorBase.cs" />
<Compile
Include="Injection\Expressions\ExpressionVoidMethodInjector.cs" />
<Compile Include="NinjectSettings.cs" />
@@ -136,7 +137,7 @@
<Compile Include="Activation\Provider.cs" />
<Compile Include="Syntax\ResolutionExtensions.cs" />
<Compile Include="Activation\Providers\ConstantProvider.cs" />
- <Compile Include="Infrastructure\LinqReflection.cs" />
+ <Compile Include="Infrastructure\Language\ExtensionsForIEnumerable.cs"
/>
<Compile Include="Components\INinjectComponent.cs" />
<Compile Include="Components\ComponentContainer.cs" />
<Compile Include="Components\IComponentContainer.cs" />
@@ -191,7 +192,7 @@
<Compile Include="Infrastructure\Language\ExtensionsForICollection.cs"
/>
<Compile
Include="Infrastructure\Language\ExtensionsForTargetInvocationException.cs"
/>
<Compile
Include="Infrastructure\Language\ExtensionsForICustomAttributeProvider.cs"
/>
- <Compile Include="Infrastructure\Language\ExtensionsForIEnumerable.cs"
/>
+ <Compile
Include="Infrastructure\Language\ExtensionsForIEnumerableOfT.cs" />
<Compile Include="Syntax\BindingSyntax.cs" />
<Compile Include="Planning\Bindings\IBinding.cs" />
<Compile Include="IKernel.cs" />

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 Tue Feb
24 20:04:41 2009
@@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
using Ninject.Activation;
+using Ninject.Infrastructure;
using Ninject.Parameters;
#endregion

@@ -96,6 +97,7 @@
Parameters = new List<IParameter>();
ActivationActions = new List<Action<IContext>>();
DeactivationActions = new List<Action<IContext>>();
+ ScopeCallback = StandardScopeCallbacks.Singleton;
}

/// <summary>
@@ -115,7 +117,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)
{
- return ScopeCallback == null ? null : ScopeCallback(context);
+ return ScopeCallback(context);
}

/// <summary>

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
Tue Feb 24 20:04:41 2009
@@ -22,6 +22,7 @@
#endif
using Ninject.Activation;
using Ninject.Activation.Providers;
+using Ninject.Infrastructure;
using Ninject.Infrastructure.Introspection;
using Ninject.Infrastructure.Language;
using Ninject.Parameters;
@@ -257,7 +258,7 @@
/// </summary>
public IBindingNamedWithOrOnSyntax<T> InSingletonScope()
{
- Binding.ScopeCallback = ctx => ctx.Kernel;
+ Binding.ScopeCallback = StandardScopeCallbacks.Singleton;
return this;
}

@@ -267,7 +268,7 @@
/// </summary>
public IBindingNamedWithOrOnSyntax<T> InTransientScope()
{
- Binding.ScopeCallback = null;
+ Binding.ScopeCallback = StandardScopeCallbacks.Transient;
return this;
}

@@ -276,7 +277,7 @@
/// </summary>
public IBindingNamedWithOrOnSyntax<T> InThreadScope()
{
- Binding.ScopeCallback = ctx => Thread.CurrentThread;
+ Binding.ScopeCallback = StandardScopeCallbacks.Thread;
return this;
}

@@ -287,7 +288,7 @@
/// </summary>
public IBindingNamedWithOrOnSyntax<T> InRequestScope()
{
- Binding.ScopeCallback = ctx => HttpContext.Current;
+ Binding.ScopeCallback = StandardScopeCallbacks.Request;
return this;
}
#endif

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 Tue Feb 24
20:04:41 2009
@@ -20,7 +20,6 @@
using System.Linq;
using System.Reflection;
using Ninject.Activation;
-using Ninject.Infrastructure;
using Ninject.Infrastructure.Language;
using Ninject.Planning.Bindings;
#endregion
@@ -129,7 +128,7 @@
if (Type.IsArray)
{
Type service = Type.GetElementType();
- return LinqReflection.ToArraySlow(ResolveInstances(service, parent),
service);
+ return ResolveInstances(service, parent).ToArraySlow(service);
}

if (Type.IsGenericType)
@@ -138,10 +137,10 @@
Type service = Type.GetGenericArguments()[0];

if (typeof(ICollection<>).IsAssignableFrom(gtd))
- return LinqReflection.ToListSlow(ResolveInstances(service, parent),
service);
+ return ResolveInstances(service, parent).ToListSlow(service);

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

return ResolveInstances(Type, parent).FirstOrDefault();
@@ -150,7 +149,7 @@
private IEnumerable<object> ResolveInstances(Type service, IContext
parent)
{
var request = parent.Request.CreateChild(service, this);
- return parent.Kernel.Resolve(request).Select(hook => hook.Resolve());
+ return parent.Kernel.Resolve<object>(request).Select(hook =>
hook.Resolve());
}

private Func<IBindingMetadata, bool> ReadConstraintFromAttributes()

Modified: experiments/ninject2/src/Ninject/Syntax/IResolutionRoot.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Syntax/IResolutionRoot.cs (original)
+++ experiments/ninject2/src/Ninject/Syntax/IResolutionRoot.cs Tue Feb 24
20:04:41 2009
@@ -27,7 +27,7 @@
/// <summary>
/// Provides a path to resolve instances.
/// </summary>
- public interface IResolutionRoot : IServiceProvider
+ public interface IResolutionRoot
{
/// <summary>
/// Determines whether the specified request can be resolved.
@@ -37,20 +37,21 @@
bool CanResolve(IRequest request);

/// <summary>
- /// Resolves the specified request.
+ /// Resolves activation hooks for the specified request.
/// </summary>
- /// <param name="service">The service to resolve.</param>
- /// <param name="constraint">The constraint to apply to the bindings to
determine if they match the request.</param>
- /// <param name="parameters">The parameters to pass to the
resolution.</param>
- /// <param name="isOptional"><c>True</c> if the request is optional;
otherwise, <c>false</c>.</param>
+ /// <typeparam name="T">The type of object that will be returned by the
hook (not necessarily the service).</typeparam>
+ /// <param name="request">The request to resolve.</param>
/// <returns>A series of hooks that can be used to resolve instances
that match the request.</returns>
- IEnumerable<Hook> Resolve(Type service, Func<IBindingMetadata, bool>
constraint, IEnumerable<IParameter> parameters, bool isOptional);
+ IEnumerable<Hook<T>> Resolve<T>(IRequest request);

/// <summary>
- /// Resolves the specified request.
+ /// Creates a request for the specified service.
/// </summary>
- /// <param name="request">The request to resolve.</param>
- /// <returns>A series of hooks that can be used to resolve instances
that match the request.</returns>
- IEnumerable<Hook> Resolve(IRequest request);
+ /// <param name="service">The service that is being requested.</param>
+ /// <param name="constraint">The constraint to apply to the bindings to
determine if they match the request.</param>
+ /// <param name="parameters">The parameters to pass to the
resolution.</param>
+ /// <param name="isOptional"><c>True</c> if the request is optional;
otherwise, <c>false</c>.</param>
+ /// <returns>The created request.</returns>
+ IRequest CreateRequest(Type service, Func<IBindingMetadata, bool>
constraint, IEnumerable<IParameter> parameters, bool isOptional);
}
}

Modified: experiments/ninject2/src/Ninject/Syntax/ResolutionExtensions.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Syntax/ResolutionExtensions.cs
(original)
+++ experiments/ninject2/src/Ninject/Syntax/ResolutionExtensions.cs Tue Feb
24 20:04:41 2009
@@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using Ninject.Activation;
using Ninject.Parameters;
using Ninject.Planning.Bindings;
using Ninject.Syntax;
@@ -39,7 +40,7 @@
/// <returns>An instance of the service.</returns>
public static T Get<T>(this IResolutionRoot root, params IParameter[]
parameters)
{
- return (T)root.Get(typeof(T), parameters);
+ return GetResolutionIterator<T>(root, typeof(T), null, parameters,
false).FirstOrDefault();
}

/// <summary>
@@ -52,7 +53,7 @@
/// <returns>An instance of the service.</returns>
public static T Get<T>(this IResolutionRoot root, string name, params
IParameter[] parameters)
{
- return (T)root.Get(typeof(T), m => m.Name == name, parameters);
+ return GetResolutionIterator<T>(root, typeof(T), b => b.Name == name,
parameters, false).FirstOrDefault();
}

/// <summary>
@@ -65,7 +66,7 @@
/// <returns>An instance of the service.</returns>
public static T Get<T>(this IResolutionRoot root, Func<IBindingMetadata,
bool> constraint, params IParameter[] parameters)
{
- return (T)root.Get(typeof(T), constraint, parameters);
+ return GetResolutionIterator<T>(root, typeof(T), constraint,
parameters, false).FirstOrDefault();
}

/// <summary>
@@ -77,7 +78,7 @@
/// <returns>An instance of the service, or <see langword="null"/> if no
implementation was available.</returns>
public static T TryGet<T>(this IResolutionRoot root, params IParameter[]
parameters)
{
- return (T)root.TryGet(typeof(T), parameters);
+ return GetResolutionIterator<T>(root, typeof(T), null, parameters,
true).FirstOrDefault();
}

/// <summary>
@@ -90,7 +91,7 @@
/// <returns>An instance of the service, or <see langword="null"/> if no
implementation was available.</returns>
public static T TryGet<T>(this IResolutionRoot root, string name, params
IParameter[] parameters)
{
- return (T)root.TryGet(typeof(T), m => m.Name == name, parameters);
+ return GetResolutionIterator<T>(root, typeof(T), b => b.Name == name,
parameters, true).FirstOrDefault();
}

/// <summary>
@@ -103,7 +104,7 @@
/// <returns>An instance of the service, or <see langword="null"/> if no
implementation was available.</returns>
public static T TryGet<T>(this IResolutionRoot root,
Func<IBindingMetadata, bool> constraint, params IParameter[] parameters)
{
- return (T)root.TryGet(typeof(T), constraint, parameters);
+ return GetResolutionIterator<T>(root, typeof(T), constraint,
parameters, true).FirstOrDefault();
}

/// <summary>
@@ -115,7 +116,7 @@
/// <returns>A series of instances of the service.</returns>
public static IEnumerable<T> GetAll<T>(this IResolutionRoot root, params
IParameter[] parameters)
{
- return root.GetAll(typeof(T), parameters).Cast<T>();
+ return GetResolutionIterator<T>(root, typeof(T), null, parameters,
true);
}

/// <summary>
@@ -128,7 +129,7 @@
/// <returns>A series of instances of the service.</returns>
public static IEnumerable<T> GetAll<T>(this IResolutionRoot root, string
name, params IParameter[] parameters)
{
- return root.GetAll(typeof(T), m => m.Name == name,
parameters).Cast<T>();
+ return GetResolutionIterator<T>(root, typeof(T), b => b.Name == name,
parameters, true);
}

/// <summary>
@@ -141,7 +142,7 @@
/// <returns>A series of instances of the service.</returns>
public static IEnumerable<T> GetAll<T>(this IResolutionRoot root,
Func<IBindingMetadata, bool> constraint, params IParameter[] parameters)
{
- return root.GetAll(typeof(T), constraint, parameters).Cast<T>();
+ return GetResolutionIterator<T>(root, typeof(T), constraint,
parameters, true);
}

/// <summary>
@@ -153,7 +154,7 @@
/// <returns>An instance of the service.</returns>
public static object Get(this IResolutionRoot root, Type service, params
IParameter[] parameters)
{
- return root.GetAll(service, parameters).FirstOrDefault();
+ return GetResolutionIterator<object>(root, service, null, parameters,
false).FirstOrDefault();
}

/// <summary>
@@ -166,7 +167,7 @@
/// <returns>An instance of the service.</returns>
public static object Get(this IResolutionRoot root, Type service, string
name, params IParameter[] parameters)
{
- return root.GetAll(service, m => m.Name == name,
parameters).FirstOrDefault();
+ return GetResolutionIterator<object>(root, service, b => b.Name ==
name, parameters, false).FirstOrDefault();
}

/// <summary>
@@ -179,7 +180,7 @@
/// <returns>An instance of the service.</returns>
public static object Get(this IResolutionRoot root, Type service,
Func<IBindingMetadata, bool> constraint, params IParameter[] parameters)
{
- return root.GetAll(service, constraint, parameters).FirstOrDefault();
+ return GetResolutionIterator<object>(root, service, constraint,
parameters, false).FirstOrDefault();
}

/// <summary>
@@ -191,7 +192,7 @@
/// <returns>An instance of the service, or <see langword="null"/> if no
implementation was available.</returns>
public static object TryGet(this IResolutionRoot root, Type service,
params IParameter[] parameters)
{
- return root.Resolve(service, null, parameters, true).Select(hook =>
hook.Resolve()).FirstOrDefault();
+ return GetResolutionIterator<object>(root, service, null, parameters,
true).FirstOrDefault();
}

/// <summary>
@@ -204,7 +205,7 @@
/// <returns>An instance of the service, or <see langword="null"/> if no
implementation was available.</returns>
public static object TryGet(this IResolutionRoot root, Type service,
string name, params IParameter[] parameters)
{
- return root.Resolve(service, m => m.Name == name, parameters,
true).Select(hook => hook.Resolve()).FirstOrDefault();
+ return GetResolutionIterator<object>(root, service, b => b.Name ==
name, parameters, true).FirstOrDefault();
}

/// <summary>
@@ -217,7 +218,7 @@
/// <returns>An instance of the service, or <see langword="null"/> if no
implementation was available.</returns>
public static object TryGet(this IResolutionRoot root, Type service,
Func<IBindingMetadata, bool> constraint, params IParameter[] parameters)
{
- return root.Resolve(service, constraint, parameters, true).Select(hook
=> hook.Resolve()).FirstOrDefault();
+ return GetResolutionIterator<object>(root, service, constraint,
parameters, true).FirstOrDefault();
}

/// <summary>
@@ -229,7 +230,7 @@
/// <returns>A series of instances of the service.</returns>
public static IEnumerable<object> GetAll(this IResolutionRoot root, Type
service, params IParameter[] parameters)
{
- return root.Resolve(service, null, parameters, false).Select(hook =>
hook.Resolve());
+ return GetResolutionIterator<object>(root, service, null, parameters,
true);
}

/// <summary>
@@ -242,7 +243,7 @@
/// <returns>A series of instances of the service.</returns>
public static IEnumerable<object> GetAll(this IResolutionRoot root, Type
service, string name, params IParameter[] parameters)
{
- return root.Resolve(service, m => m.Name == name, parameters,
false).Select(hook => hook.Resolve());
+ return GetResolutionIterator<object>(root, service, b => b.Name ==
name, parameters, true);
}

/// <summary>
@@ -255,7 +256,13 @@
/// <returns>A series of instances of the service.</returns>
public static IEnumerable<object> GetAll(this IResolutionRoot root, Type
service, Func<IBindingMetadata, bool> constraint, params IParameter[]
parameters)
{
- return root.Resolve(service, constraint, parameters, false).Select(hook
=> hook.Resolve());
+ return GetResolutionIterator<object>(root, service, constraint,
parameters, true);
+ }
+
+ private static IEnumerable<T> GetResolutionIterator<T>(IResolutionRoot
root, Type service, Func<IBindingMetadata, bool> constraint,
IEnumerable<IParameter> parameters, bool isOptional)
+ {
+ IRequest request = root.CreateRequest(service, constraint, parameters,
isOptional);
+ return root.Resolve<T>(request).Select(hook => hook.Resolve());
}
}
}

Modified: experiments/ninject2/src/SharedAssemblyInfo.cs
==============================================================================
--- experiments/ninject2/src/SharedAssemblyInfo.cs (original)
+++ experiments/ninject2/src/SharedAssemblyInfo.cs Tue Feb 24 20:04:41 2009
@@ -15,7 +15,7 @@
[assembly: AssemblyProductAttribute("Ninject: Lightweight dependency
injection for .NET")]
[assembly: AssemblyCompanyAttribute("Enkari, Ltd.")]
[assembly: AssemblyCopyrightAttribute("Copyright � 2007-2009 Enkari, Ltd.
and contributors")]
-[assembly: AssemblyVersionAttribute("2.0.0.145")]
+[assembly: AssemblyVersionAttribute("2.0.0.151")]
[assembly: ComVisibleAttribute(false)]
[assembly: CLSCompliantAttribute(true)]


Added: experiments/ninject2/tools/xunit.net/xunit.should.dll
==============================================================================
Binary file. No diff available.
Reply all
Reply to author
Forward
0 new messages