private void InitializeBuilderState() { registeredNames = new NamedTypesRegistry(ParentNameRegistry); extensions = new List<UnityContainerExtension>(); lifetimeContainer = new LifetimeContainer(); strategies = new StagedStrategyChain<UnityBuildStage>(ParentStrategies); buildPlanStrategies = new StagedStrategyChain<UnityBuildStage>(ParentBuildPlanStrategies); policies = new PolicyList(ParentPolicies); policies.Set<IRegisteredNamesPolicy>(new RegisteredNamesPolicy(registeredNames), null); cachedStrategies = null; cachedStrategiesLock = new object(); }
/// <summary> /// Dispose this container instance. /// </summary> /// <remarks> /// This class doesn't have a finalizer, so <paramref name="disposing"/> will always be true.</remarks> /// <param name="disposing">True if being called from the IDisposable.Dispose /// method, false if being called from a finalizer.</param> protected virtual void Dispose(bool disposing) { if (disposing) { if (lifetimeContainer != null) { lifetimeContainer.Dispose(); lifetimeContainer = null; if (parent != null && parent.lifetimeContainer != null) { parent.lifetimeContainer.Remove(this); } } extensions.OfType<IDisposable>().ForEach(ex => ex.Dispose()); extensions.Clear(); } }