Ejemplo n.º 1
0
        private QuickInjectContainer(QuickInjectContainer parent)
        {
            this.Registering           += (sender, args) => { };
            this.RegisteringInstance   += (sender, args) => { };
            this.ChildContainerCreated += (sender, args) => { };

            this.parentContainer = parent ?? throw new ArgumentNullException(nameof(parent));
            this.extensionImpl   = this.parentContainer.extensionImpl;

            this.perfectHashProvider = this.parentContainer.perfectHashProvider;
            this.perfectHashProvider.AddContainer(this);

            this.compilationMonitor = this.parentContainer.compilationMonitor;
            this.resolutionMonitor  = this.parentContainer.resolutionMonitor;

            this.RegisterInstance(IQuickInjectContainerType, this);
        }
Ejemplo n.º 2
0
        public IQuickInjectContainer CreateChildContainer()
        {
            QuickInjectContainer child;
            ExtensionImpl        childContext;

            // The child container collection and build plan visitor collection are enumerated during ClearBuildPlans and child container
            // instantiation, so we must synchronize to avoid modifying the collections during enumeration.
            lock (this.compileLock)
            {
                child        = new QuickInjectContainer(this);
                childContext = new ExtensionImpl(child);
                this.children.Add(child);
            }

            // Must happen outside the lock to avoid deadlock between callers
            var handler = this.ChildContainerCreated;

            handler?.Invoke(this, new ChildContainerCreatedEventArgs(childContext));

            return(child);
        }
Ejemplo n.º 3
0
 public ExtensionImpl(QuickInjectContainer container)
 {
     this.container = container;
 }