TestFromSubContainerInstance.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using NUnit.Framework;
  2. using Assert = ModestTree.Assert;
  3. namespace Zenject.Tests.Bindings
  4. {
  5. [TestFixture]
  6. public class TestFromSubContainerInstance : ZenjectUnitTestFixture
  7. {
  8. [Test]
  9. public void TestInstallerSelfSingle()
  10. {
  11. Container.Bind<Foo>().FromSubContainerResolve()
  12. .ByInstance(CreateFooSubContainer()).AsSingle().NonLazy();
  13. Assert.IsNotNull(Container.Resolve<Foo>().Bar);
  14. }
  15. [Test]
  16. public void TestInstallerSelfTransient()
  17. {
  18. Container.Bind<Foo>().FromSubContainerResolve().ByInstance(
  19. CreateFooSubContainer()).AsTransient().NonLazy();
  20. Assert.IsNotNull(Container.Resolve<Foo>().Bar);
  21. }
  22. [Test]
  23. public void TestInstallerSelfCached()
  24. {
  25. Container.Bind<Foo>().FromSubContainerResolve()
  26. .ByInstance(CreateFooSubContainer()).AsSingle().NonLazy();
  27. Assert.IsNotNull(Container.Resolve<Foo>().Bar);
  28. }
  29. [Test]
  30. public void TestInstallerSelfSingleMultipleContracts()
  31. {
  32. Container.Bind(typeof(Foo), typeof(Bar)).FromSubContainerResolve()
  33. .ByInstance(CreateFooSubContainer()).AsSingle().NonLazy();
  34. Assert.IsEqual(Container.Resolve<Foo>().Bar, Container.Resolve<Bar>());
  35. }
  36. [Test]
  37. public void TestInstallerSelfCachedMultipleContracts()
  38. {
  39. Container.Bind(typeof(Foo), typeof(IFoo)).To<Foo>().FromSubContainerResolve()
  40. .ByInstance(CreateFooSubContainer()).AsSingle().NonLazy();
  41. Assert.IsEqual(Container.Resolve<Foo>(), Container.Resolve<IFoo>());
  42. }
  43. [Test]
  44. public void TestInstallerSelfSingleMultipleMatches()
  45. {
  46. Container.Bind<Qux>().FromSubContainerResolveAll()
  47. .ByInstance(CreateFooSubContainer()).AsSingle().NonLazy();
  48. Assert.IsEqual(Container.ResolveAll<Qux>().Count, 2);
  49. }
  50. [Test]
  51. public void TestInstallerSelfIdentifiersFails()
  52. {
  53. Container.Bind<Gorp>().FromSubContainerResolve()
  54. .ByInstance(CreateFooSubContainer()).AsSingle().NonLazy();
  55. Assert.Throws(() => Container.Resolve<Gorp>());
  56. }
  57. [Test]
  58. public void TestInstallerSelfIdentifiers()
  59. {
  60. Container.Bind<Gorp>().FromSubContainerResolve("gorp")
  61. .ByInstance(CreateFooSubContainer()).AsSingle().NonLazy();
  62. Assert.IsNotNull(Container.Resolve<Gorp>());
  63. }
  64. public class Gorp
  65. {
  66. }
  67. public class Qux
  68. {
  69. }
  70. public class Bar
  71. {
  72. }
  73. public interface IFoo
  74. {
  75. }
  76. public class Foo : IFoo
  77. {
  78. public Foo(Bar bar)
  79. {
  80. Bar = bar;
  81. }
  82. public Bar Bar
  83. {
  84. get;
  85. private set;
  86. }
  87. }
  88. DiContainer CreateFooSubContainer()
  89. {
  90. var subContainer = new DiContainer();
  91. subContainer.Bind<Foo>().AsSingle();
  92. subContainer.Bind<Bar>().AsSingle();
  93. subContainer.Bind<Qux>().AsTransient();
  94. subContainer.Bind<Qux>().FromInstance(new Qux());
  95. subContainer.Bind<Gorp>().WithId("gorp").AsTransient();
  96. return subContainer;
  97. }
  98. }
  99. }