public void AddService(Type serviceType, object serviceInstance, bool promote)
        {
            if (serviceType == null)
            {
                throw new ArgumentNullException("serviceType");
            }
            if (serviceInstance == null)
            {
                throw new ArgumentNullException("serviceInstance");
            }
            if (!(serviceInstance is ServiceCreatorCallback)
                &&
                !serviceType.IsInstanceOfType(serviceInstance))
            {
                throw new ArgumentException(
                          CommonResourceUtil.GetString(Resources.ServiceProvider_InvalidServiceInstance, serviceType.FullName, "serviceInstance"));
            }

            if (promote && ParentContainer != null)
            {
                ParentContainer.AddService(serviceType, serviceInstance, promote);
                return;
            }

            lock (this)
            {
                if (Services.ContainsKey(serviceType))
                {
                    throw new InvalidOperationException(
                              CommonResourceUtil.GetString(Resources.ServiceProvider_ServiceAlreadyExists, serviceType.FullName));
                }
                Services.Add(serviceType, serviceInstance);
            }
        }
        public void AddService(Type serviceType, ServiceCreatorCallback callback, bool promote)
        {
            if (serviceType == null)
            {
                throw new ArgumentNullException("serviceType");
            }
            if (callback == null)
            {
                throw new ArgumentNullException("callback");
            }

            if (promote && ParentContainer != null)
            {
                ParentContainer.AddService(serviceType, callback, promote);
                return;
            }

            lock (this)
            {
                if (Services.ContainsKey(serviceType))
                {
                    throw new InvalidOperationException(
                              CommonResourceUtil.GetString(Resources.ServiceProvider_ServiceAlreadyExists, serviceType.FullName));
                }
                Services.Add(serviceType, callback);
            }
        }