PageRenderTime 47ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://github.com/developingchris/ninject
C# | 72 lines | 57 code | 15 blank | 0 comment | 0 complexity | 3b83d437bb120e471143eed1851e6652 MD5 | raw file
  1. using System;
  2. using Ninject.Activation.Blocks;
  3. using Ninject.Tests.Fakes;
  4. using Xunit;
  5. using Xunit.Should;
  6. namespace Ninject.Tests.Integration.ActivationBlockTests
  7. {
  8. public class ActivationBlockContext
  9. {
  10. protected readonly StandardKernel kernel;
  11. protected readonly ActivationBlock block;
  12. public ActivationBlockContext()
  13. {
  14. kernel = new StandardKernel();
  15. block = new ActivationBlock(kernel);
  16. }
  17. }
  18. public class WhenBlockIsCreated : ActivationBlockContext
  19. {
  20. [Fact]
  21. public void FirstActivatedInstanceIsReusedWithinBlock()
  22. {
  23. kernel.Bind<IWeapon>().To<Sword>();
  24. var weapon1 = block.Get<IWeapon>();
  25. var weapon2 = block.Get<IWeapon>();
  26. weapon1.ShouldBeSameAs(weapon2);
  27. }
  28. [Fact]
  29. public void BlockDoesNotInterfereWithExternalResolution()
  30. {
  31. kernel.Bind<IWeapon>().To<Sword>();
  32. var weapon1 = block.Get<IWeapon>();
  33. var weapon2 = kernel.Get<IWeapon>();
  34. weapon1.ShouldNotBeSameAs(weapon2);
  35. }
  36. [Fact]
  37. public void InstancesAreNotGarbageCollectedAsLongAsBlockRemainsAlive()
  38. {
  39. kernel.Bind<NotifiesWhenDisposed>().ToSelf();
  40. var instance = block.Get<NotifiesWhenDisposed>();
  41. GC.Collect();
  42. GC.WaitForPendingFinalizers();
  43. instance.IsDisposed.ShouldBeFalse();
  44. }
  45. }
  46. public class WhenBlockIsDisposed : ActivationBlockContext
  47. {
  48. [Fact]
  49. public void InstancesActivatedWithinBlockAreDeactivated()
  50. {
  51. kernel.Bind<NotifiesWhenDisposed>().ToSelf();
  52. var instance = block.Get<NotifiesWhenDisposed>();
  53. block.Dispose();
  54. instance.IsDisposed.ShouldBeTrue();
  55. }
  56. }
  57. }