/// <summary> /// Registers dependencies with the specified provider. /// </summary> /// <param name="provider"></param> /// <param name="dependencies"></param> /// <param name="paths"></param> /// <param name="currProviders"></param> /// <remarks> /// This is the top most overloaded method /// </remarks> public void RegisterClientDependencies(BaseFileRegistrationProvider provider, IEnumerable <IClientDependencyFile> dependencies, IEnumerable <IClientDependencyPath> paths, ProviderCollection currProviders) { //find or create the ProviderDependencyList for the provider ProviderDependencyList currList = Dependencies .Where(x => x.ProviderIs(provider)) .DefaultIfEmpty(new ProviderDependencyList(provider)) .SingleOrDefault(); //add the dependencies that don't have a provider specified currList.AddDependencies(dependencies .Where(x => string.IsNullOrEmpty(x.ForceProvider))); //add the list if it is new if (!Dependencies.Contains(currList) && currList.Dependencies.Count > 0) { Dependencies.Add(currList); } //we need to look up all of the dependencies that have forced providers, //check if we've got a provider list for it, create one if not and add the dependencies //to it. var allProviderNamesInList = dependencies .Select(x => x.ForceProvider) .Where(x => !string.IsNullOrEmpty(x)) .Distinct(); var forceProviders = (from provName in allProviderNamesInList where currProviders[provName] != null select(BaseFileRegistrationProvider) currProviders[provName]).ToList(); foreach (var prov in forceProviders) { //find or create the ProviderDependencyList for the prov var p = prov; var forceList = Dependencies .Where(x => x.ProviderIs(prov)) .DefaultIfEmpty(new ProviderDependencyList(prov)) .SingleOrDefault(); //add the dependencies that don't have a force provider specified forceList.AddDependencies(dependencies .Where(x => x.ForceProvider == p.Name)); //add the list if it is new if (!Dependencies.Contains(forceList)) { Dependencies.Add(forceList); } } //add the paths, ensure no dups Paths.UnionWith(paths); }
internal bool ProviderIs(BaseFileRegistrationProvider provider) { return(Provider.Name == provider.Name); }
internal ProviderDependencyList(BaseFileRegistrationProvider provider) { Provider = provider; Dependencies = new List <IClientDependencyFile>(); }