/// <summary>
        /// Register Proxy
        /// </summary>
        /// <param name="services"></param>
        /// <param name="bag"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static IServiceContext RegisterProxyFrom(this IServiceContext services, DependencyProxyRegister bag)
        {
            services.CheckNull(nameof(services));

            if (bag != null)
            {
                var descriptors = bag.ExportDescriptors();

                foreach (var descriptor in descriptors)
                {
                    switch (descriptor.ProxyType)
                    {
                    case DependencyProxyType.TypeToType:
                        TypeToTypeRegister(services, descriptor);
                        break;

                    case DependencyProxyType.TypeToInstance:
                        TypeToInstanceRegister(services, descriptor);
                        break;

                    case DependencyProxyType.TypeToInstanceFunc:
                        TypeToInstanceFuncRegister(services, descriptor);
                        break;

                    case DependencyProxyType.TypeSelf:
                        TypeSelfRegister(services, descriptor);
                        break;

                    case DependencyProxyType.InstanceSelf:
                        InstanceSelfRegister(services, descriptor);
                        break;

                    case DependencyProxyType.InstanceSelfFunc:
                        InstanceSelfFuncRegister(services, descriptor);
                        break;

                    case DependencyProxyType.TypeToResolvedInstanceFunc:
                        TypeToResolvedInstanceFuncRegister(services, descriptor);
                        break;

                    case DependencyProxyType.ResolvedInstanceSelfFunc:
                        ResolvedInstanceSelfFuncRegister(services, descriptor);
                        break;
                    }
                }
            }

            return(services);
        }