public RefCountedAppDomain GetAppDomain(SandboxCasPolicySettings casSettings) { lock (this) { if (this.m_lastDispensedAppDomain != null && !this.IsLastAppDomainReusable(casSettings)) { try { this.m_lastDispensedAppDomain.Dispose(); } finally { this.m_lastDispensedAppDomain = null; } } if (this.m_lastDispensedAppDomain == null) { DateTime now = DateTime.Now; AppDomain appDomain = this.CreateAppDomain(now, casSettings); RefCountedAppDomain refCountedAppDomain = new RefCountedAppDomain(appDomain); if (this.m_areAppDomainsReusable) { this.m_lastDispensedAppDomain = refCountedAppDomain.CreateNewReference(); this.m_lastAppDomainCreationTime = now; this.m_settingsForLastDispensedAppDomain = casSettings.Copy(); } return(refCountedAppDomain); } return(this.m_lastDispensedAppDomain.CreateNewReference()); } }
private AppDomain CreateAppDomain(DateTime timeStamp, SandboxCasPolicySettings casSettings) { if (this.m_policyChanged) { lock (this) { this.m_policyChanged = false; } } string appDomainName = "Local Processing " + timeStamp.ToString(CultureInfo.InvariantCulture); return(this.m_policyManager.CreateAppDomainWithPolicy(appDomainName, this.m_evidence, casSettings)); }
private bool IsLastAppDomainReusable(SandboxCasPolicySettings casSettings) { if (this.m_policyChanged) { return(false); } if (!object.Equals(this.m_settingsForLastDispensedAppDomain, casSettings)) { return(false); } TimeSpan t = DateTime.Now - this.m_lastAppDomainCreationTime; if (t < TimeSpan.FromMinutes(1.0)) { return(t >= TimeSpan.FromMinutes(0.0)); } return(false); }
public SandboxCasPolicySettings Copy() { SandboxCasPolicySettings sandboxCasPolicySettings = new SandboxCasPolicySettings(); if (this.m_basePermissions != null) { sandboxCasPolicySettings.m_basePermissions = this.m_basePermissions.Copy(); } if (this.m_fullTrustAssemblies != null) { { foreach (StrongName fullTrustAssembly in this.m_fullTrustAssemblies) { sandboxCasPolicySettings.AddFullTrustAssembly(fullTrustAssembly); } return(sandboxCasPolicySettings); } } return(sandboxCasPolicySettings); }
public override bool Equals(object obj) { SandboxCasPolicySettings sandboxCasPolicySettings = obj as SandboxCasPolicySettings; if (sandboxCasPolicySettings == null) { return(false); } if (!object.Equals(this.m_basePermissions, sandboxCasPolicySettings.m_basePermissions)) { return(false); } if (this.m_fullTrustAssemblies == null) { if (sandboxCasPolicySettings.m_fullTrustAssemblies != null) { return(false); } } else { if (sandboxCasPolicySettings.m_fullTrustAssemblies == null) { return(false); } int count = this.m_fullTrustAssemblies.Count; if (count != sandboxCasPolicySettings.m_fullTrustAssemblies.Count) { return(false); } for (int i = 0; i < count; i++) { if (!object.Equals(this.m_fullTrustAssemblies[i], sandboxCasPolicySettings.m_fullTrustAssemblies[i])) { return(false); } } } return(true); }
public abstract AppDomain CreateAppDomainWithPolicy(string appDomainName, Evidence evidence, SandboxCasPolicySettings casSettings);