PageRenderTime 51ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Ninject.Tests/Integration/SingletonScopeTests.cs

https://github.com/developingchris/ninject
C# | 191 lines | 144 code | 47 blank | 0 comment | 0 complexity | 11ee8b4a0477175cad55ec88ccfb7552 MD5 | raw file
  1. using System;
  2. using Ninject.Activation;
  3. using Ninject.Infrastructure.Disposal;
  4. using Ninject.Tests.Fakes;
  5. using Xunit;
  6. using Xunit.Should;
  7. namespace Ninject.Tests.Integration.SingletonScopeTests
  8. {
  9. public class SingletonScopeContext
  10. {
  11. protected readonly StandardKernel kernel;
  12. public SingletonScopeContext()
  13. {
  14. kernel = new StandardKernel();
  15. }
  16. }
  17. public class WhenServiceIsBoundToInterfaceInSingletonScope : SingletonScopeContext
  18. {
  19. [Fact]
  20. public void FirstActivatedInstanceIsReused()
  21. {
  22. kernel.Bind<IWeapon>().To<Sword>().InSingletonScope();
  23. var instance1 = kernel.Get<IWeapon>();
  24. var instance2 = kernel.Get<IWeapon>();
  25. instance1.ShouldBeSameAs(instance2);
  26. }
  27. [Fact]
  28. public void InstancesAreNotGarbageCollectedAsLongAsKernelRemainsAlive()
  29. {
  30. kernel.Bind<IWeapon>().To<Sword>().InSingletonScope();
  31. var instance = kernel.Get<IWeapon>();
  32. var reference = new WeakReference(instance);
  33. instance = null;
  34. GC.Collect();
  35. GC.WaitForPendingFinalizers();
  36. reference.IsAlive.ShouldBeTrue();
  37. }
  38. [Fact]
  39. public void InstancesAreDeactivatedWhenKernelIsDisposed()
  40. {
  41. kernel.Bind<INotifyWhenDisposed>().To<NotifiesWhenDisposed>().InSingletonScope();
  42. var instance = kernel.Get<INotifyWhenDisposed>();
  43. kernel.Dispose();
  44. instance.IsDisposed.ShouldBeTrue();
  45. }
  46. }
  47. public class WhenServiceIsBoundToSelfInSingletonScope : SingletonScopeContext
  48. {
  49. [Fact]
  50. public void FirstActivatedInstanceIsReused()
  51. {
  52. kernel.Bind<Sword>().ToSelf().InSingletonScope();
  53. var sword1 = kernel.Get<Sword>();
  54. var sword2 = kernel.Get<Sword>();
  55. sword1.ShouldBeSameAs(sword2);
  56. }
  57. [Fact]
  58. public void InstancesAreNotGarbageCollectedAsLongAsKernelRemainsAlive()
  59. {
  60. kernel.Bind<NotifiesWhenDisposed>().ToSelf().InSingletonScope();
  61. var instance = kernel.Get<NotifiesWhenDisposed>();
  62. var reference = new WeakReference(instance);
  63. instance = null;
  64. GC.Collect();
  65. GC.WaitForPendingFinalizers();
  66. reference.IsAlive.ShouldBeTrue();
  67. }
  68. [Fact]
  69. public void InstancesAreDeactivatedWhenKernelIsDisposed()
  70. {
  71. kernel.Bind<NotifiesWhenDisposed>().ToSelf().InSingletonScope();
  72. var instance = kernel.Get<NotifiesWhenDisposed>();
  73. kernel.Dispose();
  74. instance.IsDisposed.ShouldBeTrue();
  75. }
  76. }
  77. public class WhenServiceIsBoundToProviderInSingletonScope : SingletonScopeContext
  78. {
  79. [Fact]
  80. public void FirstActivatedInstanceIsReused()
  81. {
  82. kernel.Bind<INotifyWhenDisposed>().ToProvider<NotifiesWhenDisposedProvider>().InSingletonScope();
  83. var instance1 = kernel.Get<INotifyWhenDisposed>();
  84. var instance2 = kernel.Get<INotifyWhenDisposed>();
  85. instance1.ShouldBeSameAs(instance2);
  86. }
  87. [Fact]
  88. public void InstancesAreNotGarbageCollectedAsLongAsKernelRemainsAlive()
  89. {
  90. kernel.Bind<INotifyWhenDisposed>().ToProvider<NotifiesWhenDisposedProvider>().InSingletonScope();
  91. var instance = kernel.Get<INotifyWhenDisposed>();
  92. var reference = new WeakReference(instance);
  93. instance = null;
  94. GC.Collect();
  95. GC.WaitForPendingFinalizers();
  96. reference.IsAlive.ShouldBeTrue();
  97. }
  98. [Fact]
  99. public void InstancesAreDeactivatedWhenKernelIsDisposed()
  100. {
  101. kernel.Bind<INotifyWhenDisposed>().ToProvider<NotifiesWhenDisposedProvider>().InSingletonScope();
  102. var instance = kernel.Get<INotifyWhenDisposed>();
  103. kernel.Dispose();
  104. instance.IsDisposed.ShouldBeTrue();
  105. }
  106. }
  107. public class WhenServiceIsBoundToMethodInSingletonScope : SingletonScopeContext
  108. {
  109. [Fact]
  110. public void FirstActivatedInstanceIsReused()
  111. {
  112. kernel.Bind<INotifyWhenDisposed>().ToMethod(x => new NotifiesWhenDisposed()).InSingletonScope();
  113. var instance1 = kernel.Get<INotifyWhenDisposed>();
  114. var instance2 = kernel.Get<INotifyWhenDisposed>();
  115. instance1.ShouldBeSameAs(instance2);
  116. }
  117. [Fact]
  118. public void InstancesAreNotGarbageCollectedAsLongAsKernelRemainsAlive()
  119. {
  120. kernel.Bind<INotifyWhenDisposed>().ToMethod(x => new NotifiesWhenDisposed()).InSingletonScope();
  121. var instance = kernel.Get<INotifyWhenDisposed>();
  122. var reference = new WeakReference(instance);
  123. instance = null;
  124. GC.Collect();
  125. GC.WaitForPendingFinalizers();
  126. reference.IsAlive.ShouldBeTrue();
  127. }
  128. [Fact]
  129. public void InstancesAreDeactivatedWhenKernelIsDisposed()
  130. {
  131. kernel.Bind<INotifyWhenDisposed>().ToMethod(x => new NotifiesWhenDisposed()).InSingletonScope();
  132. var instance = kernel.Get<INotifyWhenDisposed>();
  133. kernel.Dispose();
  134. instance.IsDisposed.ShouldBeTrue();
  135. }
  136. }
  137. public class NotifiesWhenDisposedProvider : Provider<NotifiesWhenDisposed>
  138. {
  139. protected override NotifiesWhenDisposed CreateInstance(IContext context)
  140. {
  141. return new NotifiesWhenDisposed();
  142. }
  143. }
  144. }