PageRenderTime 120ms CodeModel.GetById 32ms RepoModel.GetById 12ms app.codeStats 0ms

/src/Ninject.Tests/Integration/ConditionalAttributeBindingTests.cs

https://github.com/developingchris/ninject
C# | 127 lines | 103 code | 24 blank | 0 comment | 2 complexity | bfc8c664872f8e4e6a82bed8628859bf MD5 | raw file
  1. using System;
  2. using Ninject.Infrastructure.Disposal;
  3. using Xunit;
  4. namespace Ninject.Tests.Integration
  5. {
  6. public class WeakAttribute : Attribute
  7. {
  8. }
  9. public class StrongAttribute : Attribute
  10. {
  11. }
  12. public interface IAttackAbility
  13. {
  14. int Strength { get; }
  15. }
  16. public class UnknownAttack : IAttackAbility
  17. {
  18. #region IAttackAbility Members
  19. public int Strength
  20. {
  21. get { return -1; }
  22. }
  23. #endregion
  24. }
  25. public class WeakAttack : IAttackAbility
  26. {
  27. #region IAttackAbility Members
  28. public int Strength
  29. {
  30. get { return 1; }
  31. }
  32. #endregion
  33. }
  34. public class StrongAttack : IAttackAbility
  35. {
  36. #region IAttackAbility Members
  37. public int Strength
  38. {
  39. get { return 10; }
  40. }
  41. #endregion
  42. }
  43. public interface IVarialbeWeapon
  44. {
  45. string Name { get; }
  46. IAttackAbility StrongAttack { get; set; }
  47. IAttackAbility WeakAttack { get; set; }
  48. IAttackAbility WtfAttack { get; set; }
  49. }
  50. public class Hammer : IVarialbeWeapon
  51. {
  52. #region IWeapon Members
  53. [Inject]
  54. [Weak]
  55. public IAttackAbility WeakAttack { get; set; }
  56. [Inject]
  57. [Strong]
  58. public IAttackAbility StrongAttack { get; set; }
  59. [Inject]
  60. public IAttackAbility WtfAttack { get; set; }
  61. public string Name
  62. {
  63. get { return "hammer"; }
  64. }
  65. #endregion
  66. }
  67. public class ConditionalAttributeBindingTests : DisposableObject
  68. {
  69. protected IKernel _kernel;
  70. public ConditionalAttributeBindingTests()
  71. {
  72. _kernel = new StandardKernel();
  73. _kernel.Bind<IVarialbeWeapon>().To<Hammer>();
  74. _kernel.Bind<IAttackAbility>().To<UnknownAttack>();
  75. _kernel.Bind<IAttackAbility>().To<StrongAttack>().WhenTargetHas<StrongAttribute>();
  76. _kernel.Bind<IAttackAbility>().To<WeakAttack>().WhenTargetHas<WeakAttribute>();
  77. }
  78. [Fact]
  79. public void DefaultInstanceIsResolvedWhenNoAttributesMatch()
  80. {
  81. var attackAbility = _kernel.Get<IAttackAbility>();
  82. Assert.IsType<UnknownAttack>( attackAbility );
  83. }
  84. [Fact]
  85. public void PropertiesAreInjectMatchingAttributeBindings()
  86. {
  87. var hammer = _kernel.Get<IVarialbeWeapon>();
  88. Assert.NotNull( hammer );
  89. Assert.IsType<StrongAttack>( hammer.StrongAttack );
  90. Assert.IsType<WeakAttack>( hammer.WeakAttack );
  91. Assert.IsType<UnknownAttack>( hammer.WtfAttack );
  92. }
  93. public override void Dispose( bool disposing )
  94. {
  95. if ( disposing && !IsDisposed )
  96. {
  97. _kernel.Dispose();
  98. _kernel = null;
  99. }
  100. base.Dispose( disposing );
  101. }
  102. }
  103. }