/// <summary> /// Adds scope to a node. /// </summary> /// <param name="nodesBuilder">Nodes builder of a parent node.</param> /// <param name="name">Scope should be named.</param> /// <param name="importFilter">Import filter. Controls which registrations of parent node are visible for current node.</param> /// <param name="exportToParentFilter"> /// Export to parent filter. Controls which registrations of <c>this</c> node will be /// visible in parent node. /// </param> /// <param name="exportFilter">Export to children filter. Controls which registrations of <c>this</c> node.</param> /// <param name="nodes">Action that builds children <c>nodes</c>.</param> /// <returns>Fluent syntax continuation.</returns> public static IIxBuilder <ICollection <IIxProviderNodeConfig> > AddScope( this IIxBuilder <ICollection <IIxProviderNodeConfig> > nodesBuilder, string name = null, IIxVisibilityFilterConfig importFilter = null, IIxVisibilityFilterConfig exportToParentFilter = null, IIxVisibilityFilterConfig exportFilter = null, Action <IIxBuilder <ICollection <IIxProviderNodeConfig> > > nodes = null) { if (nodesBuilder == null) { throw new ArgumentNullException(nameof(nodesBuilder)); } var scopeConfig = new IxScopeConfig { Identifier = new IxIdentifier(typeof(IxScope), name), ExportToParentFilter = exportToParentFilter, ExportFilter = exportFilter, ImportFilter = importFilter }; nodesBuilder.Config.Add(scopeConfig); nodes?.Invoke( new IxBuilder <ICollection <IIxProviderNodeConfig> > { Config = scopeConfig.Nodes }); return(nodesBuilder); }
public IxScope( IxHost host, [CanBeNull] IxProviderNode parentNode, IxScopeConfig config, IxVisibilityFilter exportFilter, IxVisibilityFilter exportToParentFilter, IxVisibilityFilter importFilter) : base( host, parentNode, config, null, exportFilter, exportToParentFilter, importFilter, host.ScopeBinderBuilder.Delegate(new IxRegistrationScopeBindingConfig()), false, obj => TaskEx.CompletedTask) { // Adding self provided as default for children. VisibleNodes.Add(new IxIdentifier(Identifier.Type), new IxResolvePath(this, new IxProviderNode[] { })); }