PageRenderTime 42ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Ninject.Tests/Integration/RequestScopeTests.cs

https://github.com/ALyman/ninject
C# | 102 lines | 76 code | 26 blank | 0 comment | 0 complexity | 9662a9275dcf3922302ca97eca05b449 MD5 | raw file
  1. #if !NO_WEB
  2. using System;
  3. using System.IO;
  4. using System.Web;
  5. using Ninject.Activation.Caching;
  6. using Ninject.Infrastructure.Disposal;
  7. using Ninject.Tests.Fakes;
  8. using Xunit;
  9. using Xunit.Should;
  10. namespace Ninject.Tests.Integration.RequestScopeTests
  11. {
  12. public class RequestScopeContext
  13. {
  14. protected readonly StandardKernel kernel;
  15. public RequestScopeContext()
  16. {
  17. var settings = new NinjectSettings { CachePruningInterval = TimeSpan.MaxValue };
  18. kernel = new StandardKernel(settings);
  19. }
  20. public void BeginNewFakeWebRequest()
  21. {
  22. HttpContext.Current = GetFakeHttpContext();
  23. }
  24. public HttpContext GetFakeHttpContext()
  25. {
  26. var request = new HttpRequest("index.html", "http://example.org/index.html", String.Empty);
  27. var response = new HttpResponse(new StringWriter());
  28. return new HttpContext(request, response);
  29. }
  30. }
  31. public class WhenServiceIsBoundWithRequestScope : RequestScopeContext
  32. {
  33. [Fact]
  34. public void InstancesAreReusedWithinSameHttpContext()
  35. {
  36. kernel.Bind<IWeapon>().To<Sword>().InRequestScope();
  37. BeginNewFakeWebRequest();
  38. var weapon1 = kernel.Get<IWeapon>();
  39. var weapon2 = kernel.Get<IWeapon>();
  40. weapon1.ShouldBeSameAs(weapon2);
  41. BeginNewFakeWebRequest();
  42. GC.Collect();
  43. GC.WaitForPendingFinalizers();
  44. var weapon3 = kernel.Get<IWeapon>();
  45. weapon3.ShouldNotBeSameAs(weapon1);
  46. weapon3.ShouldNotBeSameAs(weapon2);
  47. }
  48. [Fact]
  49. public void InstancesAreDisposedWhenRequestEndsAndCacheIsPruned()
  50. {
  51. kernel.Bind<INotifyWhenDisposed>().To<NotifiesWhenDisposed>().InRequestScope();
  52. var cache = kernel.Components.Get<ICache>();
  53. BeginNewFakeWebRequest();
  54. var instance = kernel.Get<INotifyWhenDisposed>();
  55. instance.ShouldNotBeNull();
  56. instance.ShouldBeInstanceOf<NotifiesWhenDisposed>();
  57. BeginNewFakeWebRequest();
  58. GC.Collect();
  59. GC.WaitForPendingFinalizers();
  60. cache.Prune();
  61. instance.IsDisposed.ShouldBeTrue();
  62. }
  63. [Fact]
  64. public void InstancesAreDisposedViaOnePerRequestModule()
  65. {
  66. kernel.Bind<INotifyWhenDisposed>().To<NotifiesWhenDisposed>().InRequestScope();
  67. BeginNewFakeWebRequest();
  68. var instance = kernel.Get<INotifyWhenDisposed>();
  69. instance.ShouldNotBeNull();
  70. instance.ShouldBeInstanceOf<NotifiesWhenDisposed>();
  71. OnePerRequestModule.DeactivateInstancesForCurrentHttpRequest();
  72. instance.IsDisposed.ShouldBeTrue();
  73. }
  74. }
  75. }
  76. #endif //!NO_WEB