private void EnqueueSubFeaturesFrom(Feature feature)
 {
     foreach (Feature neededFeature in feature.NeededFeatures)
     {
         this.featureQueue.Enqueue(neededFeature);
     }
 }
 private bool NotAlreadyKnownFeature(Feature feature)
 {
     return this.features.All(knownFeature => knownFeature.GetType() != feature.GetType());
 }
 private void AddExtensionsFrom(Feature feature)
 {
     foreach (INinjectModule extension in feature.NeededExtensions)
     {
         if (this.NotAlreadyKnownExtension(extension))
         {
             this.extensions.Add(extension);
         }
     }
 }
 private void AddModulesFrom(Feature feature)
 {
     foreach (INinjectModule module in feature.Modules)
     {
         if (this.NotAlreadyKnownModule(module))
         {
             this.modules.Add(module);
         }
     }
 }
            private void AddFeature(Feature feature)
            {
                if (this.NotAlreadyKnownFeature(feature))
                {
                    this.features.Add(feature);

                    var factoryFeature = feature as IFactoryFeature;
                    if (factoryFeature != null)
                    {
                        this.factories.Add(factoryFeature.FactoryType);
                    }
                }
            }
 private void AddDependenciesFrom(Feature feature)
 {
     foreach (Dependency dependency in feature.Dependencies)
     {
         if (this.NotAlreadyKnownDepedency(dependency))
         {
             this.dependencies.Add(dependency);
         }
     }
 }
 private void GetModules(Feature ninjectFeature, FeatureInfo featureInfo)
 {
     List<INinjectModule> moduleList = ninjectFeature.Modules.ToList();
     foreach (INinjectModule module in moduleList)
     {
         FeatureInfo moduleInfo = new FeatureInfo(module.GetType(), null, null, FeatureType.Module);
         moduleInfo.AddDependency(this.bindingReader.GetBindingInformations(module));
         featureInfo.AddDependency(moduleInfo);
     }
 }
 private void GetNeededExtensions(Feature ninjectFeature, FeatureInfo featureInfo)
 {
     List<INinjectModule> neededExtensionList = ninjectFeature.NeededExtensions.ToList();
     foreach (INinjectModule neededExtension in neededExtensionList)
     {
         FeatureInfo needExtensionInfo = new FeatureInfo(neededExtension.GetType(), null, null, FeatureType.NeededExtensions);
         needExtensionInfo.AddDependency(this.bindingReader.GetBindingInformations(neededExtension));
         featureInfo.AddDependency(needExtensionInfo);
     }
 }
 private void GetNeededFeatures(Feature ninjectFeature, FeatureInfo featureInfo)
 {
     IList<Feature> neededFeatureList = ninjectFeature.NeededFeatures.ToList();
     foreach (Feature neededFeature in neededFeatureList)
     {
         FeatureInfo needfeatureInfo = ProcessFeatureInstance(neededFeature.GetType());
         needfeatureInfo.ChangeFeatureType(FeatureType.NeededFeature);
         featureInfo.AddDependency(needfeatureInfo);
     }
 }