///<summary> /// Clone some of the parent componentmodel properties to the generic subhandler. ///</summary> ///<remarks> /// The following properties are copied: <list type = "bullet"> /// <item> /// <description> /// The /// <see cref = "LifestyleType" /> /// </description> /// </item> /// <item> /// <description> /// The /// <see cref = "ComponentModel.Interceptors" /> /// </description> /// </item> /// </list> ///</remarks> ///<param name = "newModel"> the subhandler </param> private void CloneParentProperties(ComponentModel newModel) { // Inherits from LifeStyle's context. newModel.LifestyleType = ComponentModel.LifestyleType; // Inherit the parent handler interceptors. foreach (InterceptorReference interceptor in ComponentModel.Interceptors) { // we need to check that we are not adding the inteceptor again, if it was added // by a facility already newModel.Interceptors.AddIfNotInCollection(interceptor); } if (ComponentModel.HasCustomDependencies) { var dependencies = newModel.CustomDependencies; foreach (DictionaryEntry dependency in ComponentModel.CustomDependencies) { dependencies.Add(dependency.Key, dependency.Value); } } var metaDescriptors = ComponentModel.GetMetaDescriptors(ensureExists: false); if (metaDescriptors != null) { foreach (var descriptor in metaDescriptors) { descriptor.ConfigureComponentModel(Kernel, newModel); } } }
public ComponentModel BuildModel(IComponentModelDescriptor[] customContributors) { var model = new ComponentModel(); customContributors.ForEach(c => c.BuildComponentModel(kernel, model)); contributors.ForEach(c => c.ProcessModel(kernel, model)); var metaDescriptors = default(ICollection <IMetaComponentModelDescriptor>); customContributors.ForEach(c => { c.ConfigureComponentModel(kernel, model); var meta = c as IMetaComponentModelDescriptor; if (meta != null) { if (metaDescriptors == null) { metaDescriptors = model.GetMetaDescriptors(true); } metaDescriptors.Add(meta); } }); return(model); }