/// <summary>
        /// Check whether the product build date of the provided assemblies
        /// exceeded the <see cref="License.Expiration"/> date.
        /// </summary>
        /// <param name="validationChain">The current <see cref="IStartValidationChain"/>.</param>
        /// <param name="assemblies">The list of assemblies to check.</param>
        /// <returns>An instance of <see cref="IStartValidationChain"/>.</returns>
        public static IValidationChain ProductBuildDate(this IStartValidationChain validationChain, Assembly[] assemblies)
        {
            var validationChainBuilder = (validationChain as ValidationChainBuilder);
            var validator = validationChainBuilder.StartValidatorChain();
            validator.Validate = license => assemblies.All(
                    asm =>
                    asm.GetCustomAttributes(typeof (AssemblyBuildDateAttribute), false)
                       .Cast<AssemblyBuildDateAttribute>()
                       .All(a => a.BuildDate < license.Expiration));

            validator.FailureResult = new LicenseExpiredValidationFailure()
                                          {
                                              Message = "Licensing for this product has expired!",
                                              HowToResolve = @"Your license is expired. Please contact your distributor/vendor to renew the license."
                                          };

            return validationChainBuilder;
        }