/// <summary>
        /// This method should be called before any of the other methods.  It effectivly initializes the Validation Engine.
        /// Use this overloaded method to provide your own custom validator and manager.
        /// </summary>
        /// <param name="validator">A <see cref="IValidator"/> representing a custom validator.</param>
        /// <param name="manager">A <see cref="IValidationManager"/> representing a custom manager.</param>
        /// <exception cref="System.InvalidOperationException">If the Engine has already been initialized, this will be thrown.</exception>
        /// <exception cref="System.ArgumentNullException">If validator or manager are null.</exception>
        public static void Initialize(IValidator validator, IValidationManager manager)
        {
            if (_isInitialized)
                throw new InvalidOperationException("Initialization of the Validation Engine can only happen once.");

            if (validator == null)
                throw new ArgumentNullException("validator");
            if (manager == null)
                throw new ArgumentNullException("manager");

            CurrentValidator = validator;
            CurrentManager = manager;

            CurrentValidator.RegisterService(typeof(IValidationManager), CurrentManager);
            CurrentValidator.RegisterService(typeof(IValidator), CurrentValidator);

            _isInitialized = true;
        }