ChildrenContainerTest.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Unity;
  2. using Xunit;
  3. namespace VCommon.Ioc.Tests
  4. {
  5. public class ChildContainerTests
  6. {
  7. public class Session
  8. {
  9. public int UserId { get; set; }
  10. }
  11. public class Setting : ISingletonIocClass
  12. {
  13. public string Value { get; set; } = "Keep";
  14. }
  15. public abstract class AbstractContext
  16. {
  17. }
  18. private class ContextImpl : AbstractContext
  19. {
  20. }
  21. public class Service : ITransientIocClass
  22. {
  23. [Dependency] public AbstractContext Context { get; set; }
  24. }
  25. [Fact]
  26. public void ChildContainerTest()
  27. {
  28. var rootContainer = new IocManager();
  29. var child1 = rootContainer.CreateChildren();
  30. var child2 = rootContainer.CreateChildren();
  31. var child3 = rootContainer.CreateChildren();
  32. child1.RegisterInstanceToContainer(new Session { UserId = 1 });
  33. child2.RegisterInstanceToContainer(new Session { UserId = 2 });
  34. child3.RegisterInstanceToContainer<AbstractContext>(new ContextImpl());
  35. Assert.Same(rootContainer, rootContainer.Resolve<IIocManager>());
  36. Assert.Same(child1, child1.Resolve<IIocManager>());
  37. Assert.Same(child2, child2.Resolve<IIocManager>());
  38. Assert.Same(child3, child3.Resolve<IIocManager>());
  39. Assert.True(rootContainer.IsRegistered<Setting>());
  40. Assert.True(child1.IsRegistered<Setting>());
  41. Assert.True(child2.IsRegistered<Setting>());
  42. Assert.Same(rootContainer.Resolve<Setting>(), child1.Resolve<Setting>());
  43. Assert.Same(rootContainer.Resolve<Setting>(), child2.Resolve<Setting>());
  44. Assert.False(rootContainer.IsRegistered<Session>());
  45. Assert.True(child1.IsRegistered<Session>());
  46. Assert.True(child2.IsRegistered<Session>());
  47. Assert.False(child3.IsRegistered<Session>());
  48. Assert.Equal(1, child1.Resolve<Session>().UserId);
  49. Assert.Equal(2, child2.Resolve<Session>().UserId);
  50. Assert.True(rootContainer.IsRegistered<Service>());
  51. Assert.True(child1.IsRegistered<Service>());
  52. Assert.True(child2.IsRegistered<Service>());
  53. Assert.True(child3.IsRegistered<Service>());
  54. Assert.Throws<ResolutionFailedException>(() => rootContainer.Resolve<Service>());
  55. Assert.Throws<ResolutionFailedException>(() => child1.Resolve<Service>());
  56. Assert.Throws<ResolutionFailedException>(() => child2.Resolve<Service>());
  57. child3.Resolve<Service>();
  58. }
  59. }
  60. }