/// <summary> /// Ensures that there are no modules marked to be loaded <see cref="InitializationMode.WhenAvailable"/> /// depending on modules loaded <see cref="InitializationMode.OnDemand"/> /// </summary> protected virtual void ValidateDependenciesInitializationMode() { Log.Debug("Validating Dependencies initialization mode"); ModuleInfo moduleInfo = _synchronizationContext.Execute(() => Modules.FirstOrDefault(m => m.InitializationMode == InitializationMode.WhenAvailable && GetDependentModulesInner(m).Any(dependency => dependency.InitializationMode == InitializationMode.OnDemand))); if (moduleInfo != null) { var exception = new ModularityException(moduleInfo.ModuleName, string.Format(CultureInfo.CurrentCulture, "Module {0} is marked for automatic initialization when the application starts, but it depends on modules that are marked as OnDemand initialization. To fix this error, mark the dependency modules for InitializationMode=WhenAvailable, or remove this validation by extending the ModuleCatalog class.", moduleInfo.ModuleName)); Log.Error(exception); throw exception; } }
/// <summary> /// Ensures that all the dependencies within <paramref name="modules" /> refer to <see cref="ModuleInfo" />s /// within that list. /// </summary> /// <param name="modules">The modules to validate modules for.</param> /// <exception cref="ModularityException">Throws if a <see cref="ModuleInfo" /> in <paramref name="modules" /> depends on a module that's /// not in <paramref name="modules" />.</exception> /// <exception cref="System.ArgumentNullException">Throws if <paramref name="modules" /> is <see langword="null" />.</exception> /// <exception cref="System.ArgumentNullException">The <paramref name="modules" /> is <c>null</c>.</exception> protected static void ValidateDependencies(IEnumerable <ModuleInfo> modules) { Argument.IsNotNull("modules", modules); var moduleNames = modules.Select(m => m.ModuleName).ToList(); foreach (ModuleInfo moduleInfo in modules) { if (moduleInfo.DependsOn != null && moduleInfo.DependsOn.Except(moduleNames).Any()) { var exception = new ModularityException(moduleInfo.ModuleName, string.Format(CultureInfo.CurrentCulture, "Module {0} depends on other modules that don't belong to the same group.", moduleInfo.ModuleName)); Log.Error(exception); throw exception; } } }