/// <summary>
        /// Find the object to pass the method call through to.
        /// </summary>
        /// <typeparam name="T">Type implementing method.</typeparam>
        /// <param name="query">Query string in URI format.</param>
        /// <param name="wcfserviceParams">WCF service connection parameters.</param>
        /// <param name="services">Object registry.</param>
        /// <param name="createService1">Function to create Dbus Service taking service connection parameters.</param>
        /// <param name="createService2">Function to create Dbus Service taking service connection parameters and Dbus connection parameters.</param>
        /// <param name="defaultConnectionParameters">Default Dbus connection parameters for Dbus Service.</param>
        /// <returns>Object implementing method.</returns>
        static public T GetWCFMethodTarget <T>(string query
                                               , Udbus.WCF.Host.WCFServiceParams wcfserviceParams
                                               , System.Collections.Generic.IDictionary <DbusServiceKey, T> services
                                               , System.Func <Udbus.Core.ServiceConnectionParams, T> createService1
                                               , System.Func <Udbus.Core.ServiceConnectionParams, Udbus.Serialization.DbusConnectionParameters, T> createService2
                                               , Udbus.Serialization.ReadonlyDbusConnectionParameters defaultConnectionParameters)
        {
            // Look for query parameters.
            string busnameValue;
            string pathValue;

            GetDbusParametersFromQuery(query, out busnameValue, out pathValue);

            // Lookup existing service.
            DbusServiceKey find = new DbusServiceKey(busnameValue, pathValue);
            T result;

            if (services.TryGetValue(find, out result) == false) // If object not in registry
            {
                result = CreateDbusService(wcfserviceParams, createService1, createService2, defaultConnectionParameters, busnameValue, pathValue);

                // Store new service for future generations.
                services[find] = result;
            } // Ends if object not in registry

            return(result);
        }
        public override bool Equals(object obj)
        {
            bool equal = obj is DbusServiceKey;

            if (equal)
            {
                DbusServiceKey other = (DbusServiceKey)obj;
                if (equal)
                {
                    equal = this.Busname.Equals(other.Busname);

                    if (equal)
                    {
                        equal = this.Path.Equals(other.Path);
                    }
                }
            }
            return(equal);
        }