示例#1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="IxSingletonProvider"/> class.
        /// </summary>
        /// <param name="host">IndirectX host.</param>
        public IxSingletonProvider(
            IxHost host,
            IxProviderNode parentNode,
            IxStdProviderConfig config,
            IxInstanceFactory instanceFactory,
            IxVisibilityFilter exportFilter,
            IxVisibilityFilter exportToParentFilter,
            IxVisibilityFilter importFilter,
            IxScopeBinderDelegate scopeBinder)
            : base(
                host,
                parentNode,
                config,
                instanceFactory,
                exportFilter,
                exportToParentFilter,
                importFilter,
                scopeBinder,
                config.AutoDisposeEnabled,
                config.DisposeHandler)
        {
            if (parentNode == null)
            {
                throw new ArgumentNullException(nameof(parentNode));
            }

            if (instanceFactory == null)
            {
                throw new ArgumentNullException(nameof(instanceFactory));
            }

            // Adding self provided as default for children.
            VisibleNodes.Add(new IxIdentifier(Identifier.Type), new IxResolvePath(this, new IxProviderNode[] { }));
        }
示例#2
0
            public IxResolver(
                IxHost host,
                IIxInstance ownerInstance,
                [CanBeNull] IxResolveContext parentContext,
                [CanBeNull] IxResolveFrame parentFrame)
            {
                if (host == null)
                {
                    throw new ArgumentNullException(nameof(host));
                }

                if (ownerInstance == null)
                {
                    throw new ArgumentNullException(nameof(ownerInstance));
                }

                if (parentFrame != null)
                {
                    if (parentContext == null)
                    {
                        throw new ArgumentNullException();
                    }
                }

                Host          = host;
                OwnerInstance = ownerInstance;
                ParentFrame   = parentFrame;
                ParentContext = parentContext;
            }
示例#3
0
        /// <inheritdoc/>
        public async ValueTask <IIxHost> Build()
        {
            var host = new IxHost();
            await host.Initialize(Config);

            return(host);
        }
        public IxPerResolveProvider(
            IxHost host,
            [CanBeNull] IxProviderNode parentNode,
            IxProviderNodeConfig config,
            [CanBeNull] IxInstanceFactory instanceFactory,
            IxVisibilityFilter exportFilter,
            IxVisibilityFilter exportToParentFilter,
            IxVisibilityFilter importFilter,
            IxScopeBinderDelegate scopeBinder,
            bool autoDisposeEnabled,
            IxDisposeHandlerDelegate disposeHandler)
            : base(
                host,
                parentNode,
                config,
                instanceFactory,
                exportFilter,
                exportToParentFilter,
                importFilter,
                scopeBinder,
                autoDisposeEnabled,
                disposeHandler)
        {
            VxArgs.NotNull(parentNode, nameof(parentNode));
            VxArgs.NotNull(instanceFactory, nameof(instanceFactory));

            // Adding self provided as default for children.
            VisibleNodes.Add(new IxIdentifier(Identifier.Type), new IxResolvePath(this, new IxProviderNode[] { }));
        }
示例#5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="IxArgumentProvider"/> class.
 /// </summary>
 /// <param name="host">IndirectX host.</param>
 public IxArgumentProvider(IxHost host)
     : base(
         host,
         null,
         new IxStdProviderConfig
 {
     Identifier = new IxIdentifier(typeof(object)),
 },
         null,
         identifier => true,
         identifier => true,
         identifier => true,
         async(a, b, c, d, e) =>
 {
     Critical.Assert(false, "Not supported.");
     return(null);
 },
         false,
         obj => TaskEx.CompletedTask)
 {
 }
示例#6
0
 public IxTransientScope(
     IxHost host,
     IxProviderNode parentNode,
     IxProviderNodeConfig config,
     IxInstanceFactory instanceFactory,
     IxVisibilityFilter exportFilter,
     IxVisibilityFilter exportToParentFilter,
     IxVisibilityFilter importFilter)
     : base(
         host,
         parentNode,
         config,
         instanceFactory,
         exportFilter,
         exportToParentFilter,
         importFilter,
         (a, b, c, d, e) => { throw new NotImplementedException(); },
         false,
         obj => TaskEx.CompletedTask)
 {
 }
示例#7
0
 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[] { }));
 }
示例#8
0
        public IxProviderNode(
            IxHost host,
            [CanBeNull] IxProviderNode parentNode,
            IxProviderNodeConfig config,
            [CanBeNull] IxInstanceFactory instanceFactory,
            IxVisibilityFilter exportFilter,
            IxVisibilityFilter exportToParentFilter,
            IxVisibilityFilter importFilter,
            IxScopeBinderDelegate scopeBinder,
            bool autoDisposeEnabled,
            IxDisposeHandlerDelegate disposeHandler)
        {
            if (host == null)
            {
                throw new ArgumentNullException(nameof(host));
            }

            if (exportFilter == null)
            {
                throw new ArgumentNullException(nameof(exportFilter));
            }

            if (exportToParentFilter == null)
            {
                throw new ArgumentNullException(nameof(exportToParentFilter));
            }

            if (importFilter == null)
            {
                throw new ArgumentNullException(nameof(importFilter));
            }

            if (scopeBinder == null)
            {
                throw new ArgumentNullException(nameof(scopeBinder));
            }

            if (disposeHandler == null)
            {
                throw new ArgumentNullException(nameof(disposeHandler));
            }

            _nodes     = new List <IxProviderNode>();
            _nodesById = new Dictionary <IxIdentifier, IxProviderNode>();

            Host       = host;
            ParentNode = parentNode;

            if (config.Identifier == null)
            {
                // ReSharper disable once NotResolvedInText
                throw new ArgumentNullException("config.Identifier");
            }

            Identifier           = (IxIdentifier)config.Identifier;
            InstanceFactory      = instanceFactory;
            ExportFilter         = exportFilter;
            ExportToParentFilter = exportToParentFilter;
            ImportFilter         = importFilter;
            ScopeBinder          = scopeBinder;
            AutoDisposeEnabled   = autoDisposeEnabled;
            DisposeHandler       = disposeHandler;

            ParentNode?.RegisterChild(this);
        }