private void BuildUp(BuildObject build, ErrorTracer errorTracer, BuildParameter[] buildParameters)
 {
     lock (build.Export)
     {
         var context = new DefaultBuildContext(build, container, errorTracer, buildParameters);
         build.Instance = context.Target;
         Pipeline.Build(context);
     }
 }
        /// <summary>
        ///     The add build.
        /// </summary>
        /// <param name="instance">
        ///     The instance.
        /// </param>
        public void AddBuild(BuildObject instance)
        {
            Contract.Requires<ArgumentNullException>(instance != null, "instance");

            lock (this)
            {
                _objects[instance.Metadata].Add(instance);
            }
        }
        /// <summary>
        ///     The build up.
        /// </summary>
        /// <param name="export">
        ///     The export.
        /// </param>
        /// <param name="contractName">
        ///     The contract name.
        /// </param>
        /// <param name="tracer"></param>
        /// <param name="buildParameters"></param>
        /// <returns>
        ///     The <see cref="object" />.
        /// </returns>
        public object BuildUp(IExport export, string contractName, ErrorTracer tracer, BuildParameter[] buildParameters)
        {
            Contract.Requires<ArgumentNullException>(export != null, "export");

            lock (export)
            {
                try
                {
                    tracer.Phase = "Begin Building Up";
                    var context = new DefaultBuildContext(export, BuildMode.Resolve, container, contractName,
                        tracer, buildParameters, _componentRegistry.GetAll<IResolverExtension>().ToArray());
                    var buildObject = new BuildObject(export.ImportMetadata, context.Metadata, buildParameters);
                    Pipeline.Build(context);
                    if (tracer.Exceptional) return null;
                    buildObject.Instance = context.Target;
                    if (!export.ExternalInfo.External && !export.ExternalInfo.HandlesLiftime)
                        RebuildManager.AddBuild(buildObject);

                    Contract.Assume(context.Target != null);
                    return context.Target;
                }
                catch (Exception e)
                {
                    tracer.Exceptional = true;
                    tracer.Exception = e;
                    return null;
                }
            }
        }