codesite...@google.com
unread,Feb 18, 2009, 9:10:15 PM2/18/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to ninje...@googlegroups.com
Author: nkohari
Date: Wed Feb 18 18:08:24 2009
New Revision: 147
Added:
experiments/ninject2/src/Ninject.Tests/Fakes/NotifiesWhenDisposed.cs
experiments/ninject2/src/Ninject.Tests/Integration/ExternalInjectionTests.cs
- copied, changed from r146,
/experiments/ninject2/src/Ninject.Tests/Integration/SpecialResolutionTests.cs
Modified:
experiments/ninject2/src/Ninject.Tests/Integration/ActivationScopeTests.cs
experiments/ninject2/src/Ninject.Tests/Integration/SingletonScopeTests.cs
experiments/ninject2/src/Ninject.Tests/Integration/ThreadScopeTests.cs
experiments/ninject2/src/Ninject.Tests/Ninject.Tests.csproj
experiments/ninject2/src/Ninject.Tests/Unit/DisposableStrategyTests.cs
experiments/ninject2/src/Ninject/Infrastructure/Introspection/FormatExtensions.cs
experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerable.cs
experiments/ninject2/src/Ninject/KernelBase.cs
Log:
Added: experiments/ninject2/src/Ninject.Tests/Fakes/NotifiesWhenDisposed.cs
==============================================================================
--- (empty file)
+++ experiments/ninject2/src/Ninject.Tests/Fakes/NotifiesWhenDisposed.cs
Wed Feb 18 18:08:24 2009
@@ -0,0 +1,7 @@
+using System;
+using Ninject.Infrastructure.Disposal;
+
+namespace Ninject.Tests.Fakes
+{
+ public class NotifiesWhenDisposed : DisposableObject { }
+}
\ No newline at end of file
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
Wed Feb 18 18:08:24 2009
@@ -47,14 +47,10 @@
{
kernel.Bind<NotifiesWhenDisposed>().ToSelf();
- bool instanceWasDisposed = false;
-
var instance = scope.Get<NotifiesWhenDisposed>();
- instance.Disposed += (o, e) => instanceWasDisposed = true;
-
GC.Collect();
- instanceWasDisposed.ShouldBeFalse();
+ instance.IsDisposed.ShouldBeFalse();
}
}
@@ -65,16 +61,10 @@
{
kernel.Bind<NotifiesWhenDisposed>().ToSelf();
- bool instanceWasDisposed = false;
-
var instance = scope.Get<NotifiesWhenDisposed>();
- instance.Disposed += (o, e) => instanceWasDisposed = true;
-
scope.Dispose();
- instanceWasDisposed.ShouldBeTrue();
+ instance.IsDisposed.ShouldBeTrue();
}
}
-
- public class NotifiesWhenDisposed : DisposableObject { }
}
Copied:
experiments/ninject2/src/Ninject.Tests/Integration/ExternalInjectionTests.cs
(from r146,
/experiments/ninject2/src/Ninject.Tests/Integration/SpecialResolutionTests.cs)
==============================================================================
---
/experiments/ninject2/src/Ninject.Tests/Integration/SpecialResolutionTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Integration/ExternalInjectionTests.cs
Wed Feb 18 18:08:24 2009
@@ -1,39 +1,47 @@
using System;
+using Ninject.Tests.Fakes;
using Xunit;
-namespace Ninject.Tests.Integration.SpecialResolutionTests
+namespace Ninject.Tests.Integration.ExternalInjectionTests
{
- public class SpecialResolutionContext
+ public class ExternalInjectionContext
{
protected readonly StandardKernel kernel;
- public SpecialResolutionContext()
+ public ExternalInjectionContext()
{
kernel = new StandardKernel();
}
}
- public class WhenServiceRequestsKernel : SpecialResolutionContext
+ public class WhenInjectIsCalled : ExternalInjectionContext
{
[Fact]
public void InstanceOfKernelIsInjected()
{
- kernel.Bind<RequestsKernel>().ToSelf();
- var instance = kernel.Get<RequestsKernel>();
+ kernel.Bind<IWeapon>().To<Sword>();
- instance.ShouldNotBeNull();
- instance.Kernel.ShouldNotBeNull();
- instance.Kernel.ShouldBeSameAs(kernel);
- }
- }
+ var warrior = new ExternalWarrior();
+ kernel.Inject(warrior);
- public class RequestsKernel
- {
- public IKernel Kernel { get; set; }
+ warrior.Weapon.ShouldNotBeNull();
+ warrior.Weapon.ShouldBeInstanceOf<Sword>();
+ }
- public RequestsKernel(IKernel kernel)
+ [Fact]
+ public void InstanceIsNotTrackedForDeactivation()
{
- Kernel = kernel;
+ var instance = new NotifiesWhenDisposed();
+
+ kernel.Inject(instance);
+ kernel.Dispose();
+
+ instance.IsDisposed.ShouldBeFalse();
}
+ }
+
+ public class ExternalWarrior
+ {
+ [Inject] public IWeapon Weapon { get; set; }
}
}
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
Wed Feb 18 18:08:24 2009
@@ -48,14 +48,10 @@
{
kernel.Bind<INotifyWhenDisposed>().To<NotifiesWhenDisposed>().InSingletonScope();
- bool instanceWasDisposed = false;
-
var instance = kernel.Get<INotifyWhenDisposed>();
- instance.Disposed += (o, e) => instanceWasDisposed = true;
-
kernel.Dispose();
- instanceWasDisposed.ShouldBeTrue();
+ instance.IsDisposed.ShouldBeTrue();
}
}
@@ -91,14 +87,10 @@
{
kernel.Bind<NotifiesWhenDisposed>().ToSelf().InSingletonScope();
- bool instanceWasDisposed = false;
-
var instance = kernel.Get<NotifiesWhenDisposed>();
- instance.Disposed += (o, e) => instanceWasDisposed = true;
-
kernel.Dispose();
- instanceWasDisposed.ShouldBeTrue();
+ instance.IsDisposed.ShouldBeTrue();
}
}
@@ -134,14 +126,10 @@
{
kernel.Bind<INotifyWhenDisposed>().ToProvider<NotifiesWhenDisposedProvider>().InSingletonScope();
- bool instanceWasDisposed = false;
-
var instance = kernel.Get<INotifyWhenDisposed>();
- instance.Disposed += (o, e) => instanceWasDisposed = true;
-
kernel.Dispose();
- instanceWasDisposed.ShouldBeTrue();
+ instance.IsDisposed.ShouldBeTrue();
}
}
@@ -177,18 +165,12 @@
{
kernel.Bind<INotifyWhenDisposed>().ToMethod(x => new
NotifiesWhenDisposed()).InSingletonScope();
- bool instanceWasDisposed = false;
-
var instance = kernel.Get<INotifyWhenDisposed>();
- instance.Disposed += (o, e) => instanceWasDisposed = true;
-
kernel.Dispose();
- instanceWasDisposed.ShouldBeTrue();
+ instance.IsDisposed.ShouldBeTrue();
}
}
-
- public class NotifiesWhenDisposed : DisposableObject { }
public class NotifiesWhenDisposedProvider : Provider<NotifiesWhenDisposed>
{
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
Wed Feb 18 18:08:24 2009
@@ -91,6 +91,4 @@
instance.IsDisposed.ShouldBeTrue();
}
}
-
- public class NotifiesWhenDisposed : DisposableObject { }
}
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 Wed Feb 18
18:08:24 2009
@@ -53,6 +53,8 @@
</Reference>
</ItemGroup>
<ItemGroup>
+ <Compile Include="Integration\ExternalInjectionTests.cs" />
+ <Compile Include="Fakes\NotifiesWhenDisposed.cs" />
<Compile Include="SpecExtensions.cs" />
<Compile Include="ExtensionsForWeakReference.cs" />
<Compile Include="ExtensionsForIEnumerable.cs" />
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
Wed Feb 18 18:08:24 2009
@@ -3,6 +3,7 @@
using Ninject.Activation;
using Ninject.Activation.Strategies;
using Ninject.Infrastructure.Disposal;
+using Ninject.Tests.Fakes;
using Xunit;
namespace Ninject.Tests.Unit.DisposableStrategyTests
@@ -41,6 +42,4 @@
strategy.Deactivate(contextMock.Object);
}
}
-
- public class NotifiesWhenDisposed : DisposableObject { }
}
Modified:
experiments/ninject2/src/Ninject/Infrastructure/Introspection/FormatExtensions.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Infrastructure/Introspection/FormatExtensions.cs
(original)
+++
experiments/ninject2/src/Ninject/Infrastructure/Introspection/FormatExtensions.cs
Wed Feb 18 18:08:24 2009
@@ -22,6 +22,7 @@
using System.Text;
using Ninject.Activation;
using Ninject.Activation.Providers;
+using Ninject.Infrastructure.Language;
using Ninject.Planning.Bindings;
using Ninject.Planning.Targets;
#endregion
@@ -32,21 +33,18 @@
{
public static string FormatActivationPath(this IRequest request)
{
- var stack = new Stack<IRequest>();
- IRequest current = request;
-
- while (current != null)
+ using (var sw = new StringWriter())
{
- stack.Push(current);
- current = current.Parent;
- }
+ IRequest current = request;
- var sb = new StringBuilder();
+ while (current != null)
+ {
+ sw.WriteLine("{0,3}) {1}", current.Depth + 1, current.Format());
+ current = current.Parent;
+ }
- foreach (var req in stack)
- sb.AppendFormat("{0,3}) {1}{2}", req.Depth + 1, req.Format(),
Environment.NewLine);
-
- return sb.ToString();
+ return sw.ToString();
+ }
}
public static string Format(this IBinding binding, IContext context)
Modified:
experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerable.cs
==============================================================================
---
experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerable.cs
(original)
+++
experiments/ninject2/src/Ninject/Infrastructure/Language/ExtensionsForIEnumerable.cs
Wed Feb 18 18:08:24 2009
@@ -17,6 +17,7 @@
#region Using Directives
using System;
using System.Collections.Generic;
+using System.Linq;
#endregion
namespace Ninject.Infrastructure.Language
Modified: experiments/ninject2/src/Ninject/KernelBase.cs
==============================================================================
--- experiments/ninject2/src/Ninject/KernelBase.cs (original)
+++ experiments/ninject2/src/Ninject/KernelBase.cs Wed Feb 18 18:08:24 2009
@@ -205,7 +205,19 @@
/// <param name="parameters">The parameters to pass to the
request.</param>
public void Inject(object instance, params IParameter[] parameters)
{
- throw new NotImplementedException();
+ Type service = instance.GetType();
+
+ 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 context = CreateContext(request, binding);
+
+ context.Plan = planner.GetPlan(service);
+ context.Instance = instance;
+
+ pipeline.Activate(context);
}
/// <summary>