public RefCountedAppDomain GetAppDomain(SandboxCasPolicySettings casSettings)
 {
     lock (this)
     {
         if (m_lastDispensedAppDomain != null && !IsLastAppDomainReusable(casSettings))
         {
             try
             {
                 m_lastDispensedAppDomain.Dispose();
             }
             finally
             {
                 m_lastDispensedAppDomain = null;
             }
         }
         if (m_lastDispensedAppDomain == null)
         {
             DateTime            now = DateTime.Now;
             RefCountedAppDomain refCountedAppDomain = new RefCountedAppDomain(CreateAppDomain(now, casSettings));
             if (m_areAppDomainsReusable)
             {
                 m_lastDispensedAppDomain            = refCountedAppDomain.CreateNewReference();
                 m_lastAppDomainCreationTime         = now;
                 m_settingsForLastDispensedAppDomain = casSettings.Copy();
             }
             return(refCountedAppDomain);
         }
         return(m_lastDispensedAppDomain.CreateNewReference());
     }
 }