/// <summary>
 /// Dependency injection constructor.
 /// Intended for unit testing.
 /// </summary>
 /// <param name="baseBonus">The base armor class bonus.</param>
 /// <param name="enhancementBonuses">Tracks enhancement bonuses to the base bonus.</param>
 /// <exception cref="System.ArgumentNullException">Throw when an argument is null.</exception>
 internal ArmorClassAggregator(byte baseBonus, IModifierTracker enhancementBonuses)
 {
     this.BaseBonus          = baseBonus;
     this.EnhancementBonuses = enhancementBonuses ?? throw new ArgumentNullException(nameof(enhancementBonuses), "Argument may not be null.");
 }
 /// <summary>
 /// Dependency injection constructor.
 /// Intended for unit testing.
 /// </summary>
 /// <param name="baseHitPoints">The base hit points.</param>
 /// <param name="enhancementBonuses">Tracks enhancement bonuses to the base bonus.</param>
 /// <exception cref="System.ArgumentNullException">Thrown when an argument is null.</exception>
 internal HitPointsAggregator(Func <ushort> baseHitPoints, IModifierTracker enhancementBonuses)
 {
     this.BaseHitPoints      = baseHitPoints ?? throw new ArgumentNullException(nameof(baseHitPoints), "Argument may not be null.");
     this.EnhancementBonuses = enhancementBonuses ?? throw new ArgumentNullException(nameof(enhancementBonuses), "Argument may not be null.");
 }
 /// <summary>
 /// Dependency injection constructor.
 /// Intended for unit testing.
 /// </summary>
 /// <param name="materialHardness">The material's base hardness.</param>
 /// <param name="enhancementBonuses">Tracks enhancement bonuses to the base bonus.</param>
 /// <exception cref="System.ArgumentNullException">Thrown when an argument is null.</exception>
 internal HardnessAggregator(byte materialHardness, IModifierTracker enhancementBonuses)
 {
     this.MaterialHardness   = materialHardness;
     this.EnhancementBonuses = enhancementBonuses ?? throw new ArgumentNullException(nameof(enhancementBonuses), "Argument may not be null.");
 }