/// <summary>
        ///     Registers a dependency to a given software model.
        /// </summary>
        public void AddDependency(SoftwareModel container, SoftwareModel softwareModel, string description = null)
        {
            Guard.ArgumentNotNull(container, nameof(container));
            Guard.ArgumentNotNull(softwareModel, nameof(softwareModel));

            var dependency = new SoftwareModelDependency(container, softwareModel, description);

            if (dependency.SoftwareModelId == dependency.SoftwareModelDependencyId)
            {
                throw new RuleException("Cannot register self as a dependency.");
            }

            _softwareModelDependencyService.Add(dependency);
        }
        /// <summary>
        ///     Add a set of software model dependencies with a common description.
        /// </summary>
        public void AddDependencies(SoftwareModel container, IEnumerable <SoftwareModel> softwareModels, string description = null)
        {
            Guard.ArgumentNotNull(container, nameof(container));
            Guard.ArgumentNotNull(softwareModels, nameof(softwareModels));

            var dependenciesToAdd = new List <SoftwareModelDependency>();

            softwareModels.Each(m =>
            {
                var dependency = new SoftwareModelDependency(container, m, description);

                if (dependency.SoftwareModelId == dependency.SoftwareModelDependencyId)
                {
                    throw new RuleException("Cannot register self as a dependency.");
                }

                dependenciesToAdd.Add(dependency);
            });

            _softwareModelDependencyService.Add(dependenciesToAdd);
        }