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

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

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