PageRenderTime 59ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Ninject.Tests/Integration/EnumerableDependenciesTests.cs

https://github.com/developingchris/ninject
C# | 253 lines | 205 code | 48 blank | 0 comment | 0 complexity | 511aa292747a83be3f5f249e8004e9d2 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Xunit;
  5. using Xunit.Should;
  6. namespace Ninject.Tests.Integration.EnumerableDependenciesTests
  7. {
  8. public abstract class EnumerableDependenciesContext
  9. {
  10. protected readonly StandardKernel kernel;
  11. protected EnumerableDependenciesContext()
  12. {
  13. kernel = new StandardKernel();
  14. }
  15. protected abstract void VerifyInjection(IParent parent);
  16. }
  17. public class UnconstrainedDependenciesContext : EnumerableDependenciesContext
  18. {
  19. protected override void VerifyInjection(IParent parent)
  20. {
  21. parent.ShouldNotBeNull();
  22. parent.Children.ShouldNotBeNull();
  23. parent.Children.Count.ShouldBe(2);
  24. parent.Children[0].ShouldBeInstanceOf<ChildA>();
  25. parent.Children[1].ShouldBeInstanceOf<ChildB>();
  26. }
  27. }
  28. public class ConstrainedDependenciesContext : EnumerableDependenciesContext
  29. {
  30. protected override void VerifyInjection(IParent parent)
  31. {
  32. parent.ShouldNotBeNull();
  33. parent.Children.ShouldNotBeNull();
  34. parent.Children.Count.ShouldBe(1);
  35. parent.Children[0].ShouldBeInstanceOf<ChildB>();
  36. }
  37. }
  38. public class WhenServiceRequestsUnconstrainedEnumerableOfDependencies : UnconstrainedDependenciesContext
  39. {
  40. [Fact]
  41. public void ServiceIsInjectedWithEnumeratorOfAllAvailableDependencies()
  42. {
  43. kernel.Bind<IParent>().To<RequestsEnumerable>();
  44. kernel.Bind<IChild>().To<ChildA>();
  45. kernel.Bind<IChild>().To<ChildB>();
  46. var parent = kernel.Get<IParent>();
  47. VerifyInjection(parent);
  48. }
  49. }
  50. public class WhenServiceRequestsUnconstrainedListOfDependencies : UnconstrainedDependenciesContext
  51. {
  52. [Fact]
  53. public void ServiceIsInjectedWithListOfAllAvailableDependencies()
  54. {
  55. kernel.Bind<IParent>().To<RequestsList>();
  56. kernel.Bind<IChild>().To<ChildA>();
  57. kernel.Bind<IChild>().To<ChildB>();
  58. var parent = kernel.Get<IParent>();
  59. VerifyInjection(parent);
  60. }
  61. [Fact]
  62. public void ServiceIsInjectedWithListOfAllAvailableDependenciesWhenDefaultCtorIsAvailable()
  63. {
  64. kernel.Bind<IParent>().To<RequestsListWithDefaultCtor>();
  65. kernel.Bind<IChild>().To<ChildA>();
  66. kernel.Bind<IChild>().To<ChildB>();
  67. var parent = kernel.Get<IParent>();
  68. VerifyInjection(parent);
  69. }
  70. }
  71. public class WhenServiceRequestsUnconstrainedArrayOfDependencies : UnconstrainedDependenciesContext
  72. {
  73. [Fact]
  74. public void ServiceIsInjectedWithArrayOfAllAvailableDependencies()
  75. {
  76. kernel.Bind<IParent>().To<RequestsArray>();
  77. kernel.Bind<IChild>().To<ChildA>();
  78. kernel.Bind<IChild>().To<ChildB>();
  79. var parent = kernel.Get<IParent>();
  80. VerifyInjection(parent);
  81. }
  82. [Fact]
  83. public void ServiceIsInjectedWithArrayOfAllAvailableDependenciesWhenDefaultCtorIsAvailable()
  84. {
  85. kernel.Bind<IParent>().To<RequestsArrayWithDefaultCtor>();
  86. kernel.Bind<IChild>().To<ChildA>();
  87. kernel.Bind<IChild>().To<ChildB>();
  88. var parent = kernel.Get<IParent>();
  89. VerifyInjection(parent);
  90. }
  91. }
  92. public class WhenServiceRequestsConstrainedEnumerableOfDependencies : ConstrainedDependenciesContext
  93. {
  94. [Fact]
  95. public void ServiceIsInjectedWithAllDependenciesThatMatchTheConstraint()
  96. {
  97. kernel.Bind<IParent>().To<RequestsConstrainedEnumerable>();
  98. kernel.Bind<IChild>().To<ChildA>().Named("joe");
  99. kernel.Bind<IChild>().To<ChildB>().Named("bob");
  100. var parent = kernel.Get<IParent>();
  101. VerifyInjection(parent);
  102. }
  103. }
  104. public class WhenServiceRequestsConstrainedListOfDependencies : ConstrainedDependenciesContext
  105. {
  106. [Fact]
  107. public void ServiceIsInjectedWithAllDependenciesThatMatchTheConstraint()
  108. {
  109. kernel.Bind<IParent>().To<RequestsConstrainedList>();
  110. kernel.Bind<IChild>().To<ChildA>().Named("joe");
  111. kernel.Bind<IChild>().To<ChildB>().Named("bob");
  112. var parent = kernel.Get<IParent>();
  113. VerifyInjection(parent);
  114. }
  115. }
  116. public class WhenServiceRequestsConstrainedArrayOfDependencies : ConstrainedDependenciesContext
  117. {
  118. [Fact]
  119. public void ServiceIsInjectedWithAllDependenciesThatMatchTheConstraint()
  120. {
  121. kernel.Bind<IParent>().To<RequestsConstrainedArray>();
  122. kernel.Bind<IChild>().To<ChildA>().Named("joe");
  123. kernel.Bind<IChild>().To<ChildB>().Named("bob");
  124. var parent = kernel.Get<IParent>();
  125. VerifyInjection(parent);
  126. }
  127. }
  128. public interface IChild { }
  129. public class ChildA : IChild { }
  130. public class ChildB : IChild { }
  131. public interface IParent
  132. {
  133. IList<IChild> Children { get; }
  134. }
  135. public class RequestsEnumerable : IParent
  136. {
  137. public IList<IChild> Children { get; private set; }
  138. public RequestsEnumerable(IEnumerable<IChild> children)
  139. {
  140. Children = children.ToList();
  141. }
  142. }
  143. public class RequestsList : IParent
  144. {
  145. public IList<IChild> Children { get; private set; }
  146. public RequestsList(List<IChild> children)
  147. {
  148. Children = children;
  149. }
  150. }
  151. public class RequestsListWithDefaultCtor : RequestsList
  152. {
  153. public RequestsListWithDefaultCtor()
  154. : base(new List<IChild>())
  155. {
  156. }
  157. public RequestsListWithDefaultCtor(List<IChild> children)
  158. : base(children)
  159. {
  160. }
  161. }
  162. public class RequestsArray : IParent
  163. {
  164. public IList<IChild> Children { get; private set; }
  165. public RequestsArray(IChild[] children)
  166. {
  167. Children = children;
  168. }
  169. }
  170. public class RequestsArrayWithDefaultCtor : RequestsArray
  171. {
  172. public RequestsArrayWithDefaultCtor()
  173. :base(new IChild[0])
  174. {
  175. }
  176. public RequestsArrayWithDefaultCtor(IChild[] children)
  177. :base(children)
  178. {
  179. }
  180. }
  181. public class RequestsConstrainedEnumerable : IParent
  182. {
  183. public IList<IChild> Children { get; private set; }
  184. public RequestsConstrainedEnumerable([Named("bob")] IEnumerable<IChild> children)
  185. {
  186. Children = children.ToList();
  187. }
  188. }
  189. public class RequestsConstrainedList : IParent
  190. {
  191. public IList<IChild> Children { get; private set; }
  192. public RequestsConstrainedList([Named("bob")] List<IChild> children)
  193. {
  194. Children = children;
  195. }
  196. }
  197. public class RequestsConstrainedArray : IParent
  198. {
  199. public IList<IChild> Children { get; private set; }
  200. public RequestsConstrainedArray([Named("bob")] IChild[] children)
  201. {
  202. Children = children;
  203. }
  204. }
  205. }