Created
February 8, 2011 08:07
-
-
Save jcdickinson/816076 to your computer and use it in GitHub Desktop.
.Net 3.5 Primary AppDomain Manager
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// Represents a <see cref="AppDomainManager"/> that is | |
/// aware of the primary application AppDomain. | |
/// </summary> | |
public class PrimaryAppDomainManager : AppDomainManager | |
{ | |
private static AppDomain _primaryDomain; | |
/// <summary> | |
/// Gets the primary domain. | |
/// </summary> | |
/// <value>The primary domain.</value> | |
public static AppDomain PrimaryDomain | |
{ | |
get | |
{ | |
return _primaryDomain; | |
} | |
} | |
/// <summary> | |
/// Sets the primary domain. | |
/// </summary> | |
/// <param name="primaryDomain">The primary domain.</param> | |
private void SetPrimaryDomain(AppDomain primaryDomain) | |
{ | |
_primaryDomain = primaryDomain; | |
} | |
/// <summary> | |
/// Sets the primary domain to self. | |
/// </summary> | |
private void SetPrimaryDomainToSelf() | |
{ | |
_primaryDomain = AppDomain.CurrentDomain; | |
} | |
/// <summary> | |
/// Determines whether this is the primary domain. | |
/// </summary> | |
/// <value> | |
/// <see langword="true"/> if this instance is the primary domain; otherwise, <see langword="false"/>. | |
/// </value> | |
public static bool IsPrimaryDomain | |
{ | |
get | |
{ | |
return _primaryDomain == AppDomain.CurrentDomain; | |
} | |
} | |
/// <summary> | |
/// Initializes this instance. | |
/// </summary> | |
/// <returns>The current AppDomain.</returns> | |
public static AppDomain Initialize() | |
{ | |
if (AppDomain.CurrentDomain.DomainManager is PrimaryAppDomainManager) | |
return null; | |
var ad = AppDomain.CurrentDomain; | |
((PrimaryAppDomainManager)ad.DomainManager).SetPrimaryDomainToSelf(); | |
_primaryDomain = ad; | |
return ad; | |
} | |
/// <summary> | |
/// Returns a new or existing application domain. | |
/// </summary> | |
/// <param name="friendlyName">The friendly name of the domain.</param> | |
/// <param name="securityInfo">An object that contains evidence mapped through the security policy to establish a top-of-stack permission set.</param> | |
/// <param name="appDomainInfo">An object that contains application domain initialization information.</param> | |
/// <returns>A new or existing application domain.</returns> | |
/// <PermissionSet> | |
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="ControlEvidence, ControlAppDomain, Infrastructure"/> | |
/// </PermissionSet> | |
public override AppDomain CreateDomain(string friendlyName, Evidence securityInfo, AppDomainSetup appDomainInfo) | |
{ | |
appDomainInfo = appDomainInfo ?? new AppDomainSetup(); | |
var appDomain = base.CreateDomain(friendlyName, securityInfo, appDomainInfo); | |
((PrimaryAppDomainManager)appDomain.DomainManager).SetPrimaryDomain(_primaryDomain); | |
return appDomain; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment