Application Domains
Synopsis
	Application domains are used to isolate multiple
	applications on a single Mono virtual machine.  They are
	conceptually similiar to processes, the difference is that
	processes are managed by the operating system, while
	application domains are managed by the Mono virtual machine.
	
For more information on applications domains see the 
AppDomain FAQ.
		
	
The 
MonoDomain is the unmanaged representation of
	the 
System.AppDomain
	managed type, while the 
MonoAppDomain type represents
	the managed version (
MonoAppDomain has a pointer to
	a 
MonoDomain).
    mono_domain_assembly_open
    
        
        
            
            Syntax
            MonoAssembly*
mono_domain_assembly_open (MonoDomain *domain, const char *name)
            
            Parameters
            | domain | the application domain | 
| name | file name of the assembly | 
         
     
  
    mono_domain_create
    
        
        
            
            Syntax
            MonoDomain*
mono_domain_create (void)
            
             Return value
             	 New initialized MonoDomain, with no configuration or assemblies
	 loaded into it.
             Description
              	 	 Creates a new application domain, the unmanaged representation 	 of the actual domain. 	
 	 Application domains provide an isolation facilty for assemblies.   You 	 can load assemblies and execute code in them that will not be visible 	 to other application domains. This is a runtime-based virtualization 	 technology. 	
 	 It is possible to unload domains, which unloads the assemblies and 	 data that was allocated in that domain. 	
 	 When a domain is created a mempool is allocated for domain-specific 	 structures, along a dedicated code manager to hold code that is 	 associated with the domain. 	
 
         
     
  
    mono_domain_create_appdomain
    
        
        
            
            Syntax
            MonoDomain*
mono_domain_create_appdomain (char *friendly_name, char *configuration_file)
            
            Parameters
            | friendly_name | The friendly name of the appdomain to create | 
| configuration_file | The configuration file to initialize the appdomain with | 
             Return value
             	 a MonoDomain initialized with the appdomain
         
     
  
    mono_domain_finalize
    
        
        
            
            Syntax
            gboolean
mono_domain_finalize (MonoDomain *domain, guint32 timeout) 
            
            Parameters
            | domain | the domain to finalize | 
| timeout | msecs to wait for the finalization to complete, -1to wait indefinitely | 
             Return value
             	 TRUE if succeeded, FALSE if there was a timeout
             Description
              	 	 Request finalization of all finalizable objects inside 
domain. Wait 	 
timeout msecs for the finalization to complete. 	
 
         
     
  
    mono_domain_foreach
    
        
        
            
            Syntax
            void
mono_domain_foreach (MonoDomainFunc func, gpointer user_data)
            
            Parameters
            | func | function to invoke with the domain data | 
| user_data | user-defined pointer that is passed to the supplied func fo reach domain | 
             Description
              	 	 Use this method to safely iterate over all the loaded application 	 domains in the current runtime.   The provided 
func is invoked with a 	 pointer to the 
MonoDomain and is given the value of the 
user_data 	 parameter which can be used to pass state to your called routine.
 
         
     
  
    mono_domain_free
    
        
        
            
            Syntax
            void
mono_domain_free (MonoDomain *domain, gboolean force)
            
            Parameters
            | domain | the domain to release | 
| force | if TRUE, it allows the root domain to be released (used at shutdown only). | 
             Description
              	 	 This releases the resources associated with the specific domain. 	 This is a low-level function that is invoked by the AppDomain infrastructure 	 when necessary.
 
         
     
  
    mono_domain_from_appdomain
    
        
        
            
            Syntax
            MonoDomain*
mono_domain_from_appdomain (MonoAppDomain *appdomain_raw)
            
         
     
  
    mono_domain_get_by_id
    
        
        
            
            Syntax
            MonoDomain* 
mono_domain_get_by_id (gint32 domainid) 
            
            Parameters
                         Return value
             	 the domain for a specific domain id.
         
     
  
    mono_domain_get_friendly_name
    
        
        
            
            Syntax
            const char *
mono_domain_get_friendly_name (MonoDomain *domain)
            
             Return value
             	 The friendly name of domain. Can be NULL if not yet set.
             Description
              	 	 The returned string's lifetime is the same as 
domain's. Consider 	 copying it if you need to store it somewhere. 	
 
         
     
  
    mono_domain_get_id
    
        
        
            
            Syntax
            gint32
mono_domain_get_id (MonoDomain *domain)
            
             Return value
             	 The unique ID for domain.
             Description
              	 	 A domain ID is guaranteed to be unique for as long as the domain 	 using it is alive. It may be reused later once the domain has been 	 unloaded. 	
 
         
     
  
    mono_domain_get
    
        
        
            
            Syntax
            MonoDomain*
mono_domain_get ()
            
             Return value
             	 the current domain
             Description
              	 	 This method returns the value of the current 
MonoDomain that this thread 	 and code are running under.   To obtain the root domain use 	 
mono_get_root_domain API. 	
 
         
     
  
    mono_domain_has_type_resolve
    
        
        
            
            Syntax
            gboolean
mono_domain_has_type_resolve (MonoDomain *domain)
            
            Parameters
            | domain | application domain being looked up | 
             Return value
             	 TRUE if the AppDomain.TypeResolve field has been set.
             Description
             
         
     
  
    mono_domain_is_unloading
    
        
        
            
            Syntax
            gboolean
mono_domain_is_unloading (MonoDomain *domain)
            
         
     
  
    mono_domain_owns_vtable_slot
    
        
        
            
            Syntax
            gboolean
mono_domain_owns_vtable_slot (MonoDomain *domain, gpointer vtable_slot)
            
             Return value
             	 Whether vtable_slot is inside a vtable which belongs to domain.
         
     
  
    mono_domain_set_config
    
        
        
            
            Syntax
            void
mono_domain_set_config (MonoDomain *domain, const char *base_dir, const char *config_file_name)
            
            Parameters
            | domain | MonoDomaininitialized with the appdomain we want to change | 
| base_dir | new base directory for the appdomain | 
| config_file_name | path to the new configuration for the app domain | 
             Description
              	 	 Used to set the system configuration for an appdomain 	
 	 Without using this, embedded builds will get 'System.Configuration.ConfigurationErrorsException:  	 Error Initializing the configuration system. ---> System.ArgumentException:  	 The 'ExeConfigFilename' argument cannot be null.' for some managed calls.
 
         
     
  
    mono_domain_set_internal
    
        
        
            
            Syntax
            void
mono_domain_set_internal (MonoDomain *domain)
            
            Parameters
                         Description
              	 	 Sets the current domain to 
domain.
 
         
     
  
    mono_domain_set
    
        
        
            
            Syntax
            gboolean
mono_domain_set (MonoDomain *domain, gboolean force)
            
            Parameters
            | domain | domain | 
| force | force setting. | 
             Return value
             	 TRUE on success; FALSE if the domain is unloaded
             Description
              	 	 Set the current appdomain to 
domain. If 
force is set, set it even 	 if it is being unloaded. 	
 
         
     
  
    mono_domain_try_type_resolve
    
        
        
            
            Syntax
            MonoReflectionAssembly*
mono_domain_try_type_resolve (MonoDomain *domain, char *name, MonoObject *tb)
            
            Parameters
            | domain | application domainwhere the name where the type is going to be resolved | 
| name | the name of the type to resolve or NULL. | 
| tb | A System.Reflection.Emit.TypeBuilder, used if name isNULL. | 
             Return value
             	 A MonoReflectionAssembly or NULL if not found
             Description
              	 	 This routine invokes the internal 
System.AppDomain.DoTypeResolve and returns 	 the assembly that matches name. 	
 	 If 
name is null, the value of 
((TypeBuilder)tb).FullName is used instead 	
 
         
     
  
    mono_domain_try_unload
    
        
        
            
            Syntax
            mono_domain_try_unload
            
         
     
  
    mono_domain_unload
    
        
        
            
            Syntax
            void
mono_domain_try_unload (MonoDomain *domain, MonoObject **exc)
            
            Parameters
            | domain | The domain to unload | 
| exc | Exception information | 
             Description
              	 	  Unloads an appdomain. Follows the process outlined in: 	  http://blogs.gotdotnet.com/cbrumme 	
 	  If doing things the 'right' way is too hard or complex, we do it the  	  'simple' way, which means do everything needed to avoid crashes and 	  memory leaks, but not much else. 	
 	  It is required to pass a valid reference to the exc argument, upon return 	  from this function *exc will be set to the exception thrown, if any. 	
 	  If this method is not called from an icall (embedded scenario for instance), 	  it must not be called with any managed frames on the stack, since the unload 	  process could end up trying to abort the current thread.
 
         
     
Contexts
  
    mono_context_init
    
        
        
            
            Syntax
            void
mono_context_init (MonoDomain *domain)
            
            Parameters
            | domain | The domain where the System.Runtime.Remoting.Context.Contextis initialized | 
             Description
              	 Initializes the domain's default System.Runtime.Remoting 's Context.
         
     
  
    mono_context_get
    
        
        
            
            Syntax
            MonoAppContext* 
mono_context_get (void)
            
             Return value
             	 the current Mono Application Context.
             Description
             
         
     
  
    mono_context_get_domain_id
    
        
        
            
            Syntax
            gint32
mono_context_get_domain_id (MonoAppContext *context)
            
            Parameters
            | context | the context to operate on. | 
             Return value
             	 The ID of the domain that context was created in.
         
     
  
    mono_context_get_id
    
        
        
            
            Syntax
            gint32
mono_context_get_id (MonoAppContext *context)
            
            Parameters
            | context | the context to operate on. | 
             Return value
             	 The unique ID for context.
             Description
              	 	 Context IDs are guaranteed to be unique for the duration of a Mono 	 process; they are never reused. 	
 
         
     
  
    mono_context_set
    
        
        
            
            Syntax
            void 
mono_context_set (MonoAppContext * new_context)