PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Ninject.Tests/Integration/TransientScopeTests.cs

https://github.com/developingchris/ninject
C# | 152 lines | 115 code | 37 blank | 0 comment | 0 complexity | 4138ada46a072ec29d5581a8775ed111 MD5 | raw file
  1. using System;
  2. using Ninject.Activation;
  3. using Ninject.Activation.Caching;
  4. using Ninject.Tests.Fakes;
  5. using Xunit;
  6. using Xunit.Should;
  7. namespace Ninject.Tests.Integration.TransientScopeTests
  8. {
  9. public class TransientScopeContext
  10. {
  11. protected readonly StandardKernel kernel;
  12. public TransientScopeContext()
  13. {
  14. kernel = new StandardKernel();
  15. }
  16. }
  17. public class WhenServiceIsBoundToInterfaceInTransientScope : TransientScopeContext
  18. {
  19. [Fact]
  20. public void NewInstanceIsReturnedForEachRequest()
  21. {
  22. kernel.Bind<IWeapon>().To<Sword>().InTransientScope();
  23. var instance1 = kernel.Get<IWeapon>();
  24. var instance2 = kernel.Get<IWeapon>();
  25. instance1.ShouldNotBeSameAs(instance2);
  26. }
  27. [Fact]
  28. public void InstancesAreGarbageCollectedIfAllExternalReferencesAreDropped()
  29. {
  30. kernel.Bind<IWeapon>().To<Sword>().InTransientScope();
  31. var instance = kernel.Get<IWeapon>();
  32. var reference = new WeakReference(instance);
  33. instance = null;
  34. GC.Collect();
  35. GC.WaitForPendingFinalizers();
  36. reference.IsAlive.ShouldBeFalse();
  37. }
  38. }
  39. public class WhenServiceIsBoundToSelfInTransientScope : TransientScopeContext
  40. {
  41. [Fact]
  42. public void NewInstanceIsReturnedForEachRequest()
  43. {
  44. kernel.Bind<Sword>().ToSelf().InTransientScope();
  45. var sword1 = kernel.Get<Sword>();
  46. var sword2 = kernel.Get<Sword>();
  47. sword1.ShouldNotBeSameAs(sword2);
  48. }
  49. [Fact]
  50. public void InstancesAreGarbageCollectedIfAllExternalReferencesAreDropped()
  51. {
  52. kernel.Bind<Sword>().ToSelf().InTransientScope();
  53. var instance = kernel.Get<Sword>();
  54. var reference = new WeakReference(instance);
  55. instance = null;
  56. GC.Collect();
  57. GC.WaitForPendingFinalizers();
  58. reference.IsAlive.ShouldBeFalse();
  59. var cache = kernel.Components.Get<ICache>();
  60. cache.Prune();
  61. cache.Count.ShouldBe(0);
  62. }
  63. }
  64. public class WhenServiceIsBoundToProviderInTransientScope : TransientScopeContext
  65. {
  66. [Fact]
  67. public void NewInstanceIsReturnedForEachRequest()
  68. {
  69. kernel.Bind<IWeapon>().ToProvider<SwordProvider>().InTransientScope();
  70. var instance1 = kernel.Get<IWeapon>();
  71. var instance2 = kernel.Get<IWeapon>();
  72. instance1.ShouldNotBeSameAs(instance2);
  73. }
  74. [Fact]
  75. public void InstancesAreGarbageCollectedIfAllExternalReferencesAreDropped()
  76. {
  77. kernel.Bind<IWeapon>().ToProvider<SwordProvider>().InTransientScope();
  78. var instance = kernel.Get<IWeapon>();
  79. var reference = new WeakReference(instance);
  80. instance = null;
  81. GC.Collect();
  82. GC.WaitForPendingFinalizers();
  83. reference.IsAlive.ShouldBeFalse();
  84. }
  85. }
  86. public class WhenServiceIsBoundToMethodInTransientScope : TransientScopeContext
  87. {
  88. [Fact]
  89. public void NewInstanceIsReturnedForEachRequest()
  90. {
  91. kernel.Bind<IWeapon>().ToMethod(x => new Sword()).InTransientScope();
  92. var instance1 = kernel.Get<IWeapon>();
  93. var instance2 = kernel.Get<IWeapon>();
  94. instance1.ShouldNotBeSameAs(instance2);
  95. }
  96. [Fact]
  97. public void InstancesAreGarbageCollectedIfAllExternalReferencesAreDropped()
  98. {
  99. kernel.Bind<IWeapon>().ToMethod(x => new Sword()).InTransientScope();
  100. var instance = kernel.Get<IWeapon>();
  101. var reference = new WeakReference(instance);
  102. instance = null;
  103. GC.Collect();
  104. GC.WaitForPendingFinalizers();
  105. reference.IsAlive.ShouldBeFalse();
  106. }
  107. }
  108. public class SwordProvider : Provider<Sword>
  109. {
  110. protected override Sword CreateInstance(IContext context)
  111. {
  112. return new Sword();
  113. }
  114. }
  115. }