From c488393e8610f0ffcb25ba4c8189f703b96583ea Mon Sep 17 00:00:00 2001 From: "dp%netscape.com" Date: Tue, 23 Mar 1999 08:04:18 +0000 Subject: [PATCH] registry added to faq git-svn-id: svn://10.0.0.236/trunk@24819 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/xpcom/doc/xpcom-code-faq.html | 36 +++++++++++++++++++++------ 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/mozilla/xpcom/doc/xpcom-code-faq.html b/mozilla/xpcom/doc/xpcom-code-faq.html index 397d1e699eb..ed74a0a9f3b 100644 --- a/mozilla/xpcom/doc/xpcom-code-faq.html +++ b/mozilla/xpcom/doc/xpcom-code-faq.html @@ -33,19 +33,30 @@ Is there any restriction on which static class I should call first
No restrictions. You can call any function from the static classes nsComponentManager and nsServiceManager. XPCOM will do the right -thing to initialize itself at both places.
+thing to initialize itself at both places. +

Autoregistration() can happen only after Init_XPCOM() is called since +the registy might be required by SelfRegister() functions of the dlls and +it is only in Init_XPCOM() do we create register the RegistryFactory() +with the ComponentManager.

What is the order of creation of the ServiceManager, ComponentManager and Registry

Init_XPCOM() -
    create the global component manager -
    create the global registry and register as service -with global service manager -
    create the global component manager and register -as service with the global service manager -

Now the hard problem is when to trigger Init_XPCOM() There are two static +

+
  • +create the global component manager
  • + +
  • +create the global component manager and register as service with the global +service manager
  • + +
  • +RegisterFactory(...RegistryFactory...)  Register the RegistryFactory() +with the component manager so that new registry objects can be created.
  • +
    +Now the hard problem is when to trigger Init_XPCOM() There are two static objects nsComponentManager and nsServiceManager. Any function in either of them can be called first. Today nsServiceManager::GetService() is the first one that gets called. All the members of the static nsServiceManager @@ -55,6 +66,17 @@ to get to the global component manager. Hence if we trigger Init_XPCOM() from both NS_GetGlobalComponentManager() and NS_GetGlobalServiceManager() we will be safe.
    +

    +Is there a global Registry being maintained

    + +
    No. The nsIRegistry is designed to be lightweight access to +the registry. Consumers who need to access the registry should use the +component manager to create the their own registry access object. This +is required because the open() call is supported by the nsIRegistry() and +if we maintain a global registry arbitrating which registry file is opened +is going to be a major headach. +

    The ProgID for the registry will be component://netscape/registry

    +