//////////////////////////////////////////////////////////////////////////

        internal void UnregisterService(CServiceRegistration service)
        {
            m_checker.Check();
            m_systemBundle.getServiceRegistery().UnregisterService(service);

            lock (m_lock)
            {
                m_publishedServices.Remove(service);
            }
        }
        //////////////////////////////////////////////////////////////////////////

        public IServiceRegistration RegisterService(string[] clazz, object service /*, Dictionary properties*/)
        {
            m_checker.Check();
            CServiceRegistration reg = m_systemBundle.getServiceRegistery().RegisterService(clazz, service, this);

            lock (m_lock)
            {
                m_publishedServices.Add(reg);
            }

            return(reg);
        }
 //////////////////////////////////////////////////////////////////////////
 public void UnregisterService(CServiceRegistration service)
 {
     lock (m_lock)
     {
         foreach (string clz in service.getClazz())
         {
             List<CServiceRegistration> sbucket = m_services[clz];
             sbucket.Remove(service);
             if (sbucket.Count == 0)
                 m_services.Remove(clz);
         }
     }
 }
        //////////////////////////////////////////////////////////////////////////

        public void UnregisterService(CServiceRegistration service)
        {
            lock (m_lock)
            {
                foreach (string clz in service.getClazz())
                {
                    List <CServiceRegistration> sbucket = m_services[clz];
                    sbucket.Remove(service);
                    if (sbucket.Count == 0)
                    {
                        m_services.Remove(clz);
                    }
                }
            }
        }
        //////////////////////////////////////////////////////////////////////////
        public CServiceRegistration RegisterService(string[] clazz, object service/*, Dictionary properties*/, CBundleContext bundleCtx)
        {
            CServiceRegistration reg = new CServiceRegistration(clazz, service, bundleCtx);

            lock (m_lock)
            {
                foreach (string clz in clazz)
                {
                    List<CServiceRegistration> sbucket;
                    if (!m_services.TryGetValue(clz, out sbucket))
                    {
                        sbucket = new List<CServiceRegistration>();
                        m_services.Add(clz, sbucket);
                    }
                    sbucket.Add(reg);
                }
            }

            return reg;
        }
        //////////////////////////////////////////////////////////////////////////

        public CServiceRegistration RegisterService(string[] clazz, object service /*, Dictionary properties*/, CBundleContext bundleCtx)
        {
            CServiceRegistration reg = new CServiceRegistration(clazz, service, bundleCtx);

            lock (m_lock)
            {
                foreach (string clz in clazz)
                {
                    List <CServiceRegistration> sbucket;
                    if (!m_services.TryGetValue(clz, out sbucket))
                    {
                        sbucket = new List <CServiceRegistration>();
                        m_services.Add(clz, sbucket);
                    }
                    sbucket.Add(reg);
                }
            }

            return(reg);
        }
        //////////////////////////////////////////////////////////////////////////
        internal void UnregisterService(CServiceRegistration service)
        {
            m_checker.Check();
            m_systemBundle.getServiceRegistery().UnregisterService(service);

            lock (m_lock)
            {
                m_publishedServices.Remove(service);
            }
        }