TestFromSubContainerInstaller.cs 3.5 KB

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