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); }
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); }
public ExtensionImpl(QuickInjectContainer container) { this.container = container; }