Example #1
0
        /// <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);
        }
Example #2
0
        /// <summary>
        /// Adds standard provider node.
        /// </summary>
        /// <typeparam name="TContract">Registration target type.</typeparam>
        /// <param name="nodesBuilder">Nodes builder.</param>
        /// <param name="name">Registration <c>name</c>.</param>
        /// <param name="scopeBinding">Scope binding strategy config (registration, transient, etc.).</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="instanceBuilder">Instance builder config. (Class constructor, existing instance, etc.).</param>
        /// <param name="multiplicity">Multiplicity config. (Singleton, pool, <c>factory</c> etc.).</param>
        /// <param name="disposeHandler">Overrides dispose operation.</param>
        /// <param name="nodes">Action that build nested <c>nodes</c>.</param>
        /// <returns>Fluent syntax continuation.</returns>
        public static IIxBuilder <ICollection <IIxProviderNodeConfig> > Add <TContract>(
            this IIxBuilder <ICollection <IIxProviderNodeConfig> > nodesBuilder,
            string name = null,
            IIxScopeBindingConfig scopeBinding             = null,
            IIxVisibilityFilterConfig importFilter         = null,
            IIxVisibilityFilterConfig exportToParentFilter = null,
            IIxVisibilityFilterConfig exportFilter         = null,
            IIxInstanceBuilderConfig instanceBuilder       = null,
            IIxMultiplicityConfig multiplicity             = null,
            bool autoDisposeEnabled = false,
            IxDisposeHandlerDelegate disposeHandler = null,
            Action <IIxBuilder <ICollection <IIxProviderNodeConfig> > > nodes = null)
        {
            var depNode = new IxStdProviderConfig
            {
                InstanceBuilder      = instanceBuilder,
                Identifier           = new IxIdentifier(typeof(TContract), name),
                ScopeBinding         = scopeBinding,
                Multiplicity         = multiplicity,
                ImportFilter         = importFilter,
                ExportFilter         = exportFilter,
                ExportToParentFilter = exportToParentFilter,
                AutoDisposeEnabled   = autoDisposeEnabled,
                DisposeHandler       = disposeHandler
            };

            nodesBuilder.Config.Add(depNode);

            nodes?.Invoke(
                new IxBuilder <ICollection <IIxProviderNodeConfig> >
            {
                Config = depNode.Nodes
            });

            return(nodesBuilder);
        }