creates three instances of the same type. A local and two remote proxies to object instances are constructed:

   
 

using System;
using System.Reflection;
using System.Runtime.Remoting;


class MyClass {
    public void MethodA(DateTime dt) {
        Console.WriteLine("MethodA invoked at " + dt.ToLongTimeString());
    }
}

class Starter {

    static void Main() {
        CreateLocal();
        CreateRemote1();
        CreateRemote2();
    }

    static void CreateLocal() {
        object obj = Activator.CreateInstance(typeof(MyClass));
        ((MyClass)obj).MethodA(DateTime.Now);
    }

    static void CreateRemote1() {
        ObjectHandle hObj = Activator.CreateInstance("library","MyClass");
        object obj = hObj.Unwrap();

        MethodInfo method = obj.GetType().GetMethod("MethodA");
        method.Invoke(obj, new object[1] { DateTime.Now });
    }

    static void CreateRemote2() {
        AppDomain domain = AppDomain.CurrentDomain;
        object obj = domain.CreateInstanceFromAndUnwrap("library.dll","MyClass");
        MethodInfo method = obj.GetType().GetMethod("MethodA");
        method.Invoke(obj, new object[1] { DateTime.Now });
    }
}

    


FriendlyName

   
 

using System;
using System.Collections.Generic;
using System.Text;

class Program {
    static void Main(string[] args) {
        AppDomain currentDomain = AppDomain.CurrentDomain;
        Console.WriteLine(currentDomain.FriendlyName);
        AppDomain secondDomain = AppDomain.CreateDomain("New AppDomain");
        secondDomain.CreateInstance("AssemblyA", "AppDomains.Demo", true,System.Reflection.BindingFlags.CreateInstance, null, new object[] { 7, 3 }, null, null, null);
    }
}

    


SetPrincipalPolicy

   
 
using System;
using System.Security;
using System.Security.Principal;
using System.Security.Permissions;

class Program {
    static void Main(string[] args) {
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
        try {
            ShowMessage();
        } catch (SecurityException exception) {
            Console.WriteLine(exception.Message);
        }
    }

    [PrincipalPermissionAttribute(SecurityAction.Demand,Role = "BUILTINUsers")]
    static void ShowMessage() {
        Console.WriteLine("The current principal is logged in locally ");
        Console.WriteLine("(they are a member of the local Users group)");
    }
}

    


Configure the AppDomainSetup

   

using System;

class Test
{
    public static void Main()
    {
        AppDomainSetup setupInfo = new AppDomainSetup();

        setupInfo.ApplicationBase = @"C:MyRootDirectory";
        setupInfo.ConfigurationFile = "MyApp.config";
        setupInfo.PrivateBinPath = "bin;plugins;external";

        AppDomain newDomain = 
            AppDomain.CreateDomain("My New AppDomain", null, setupInfo);
    }
}



           
          


SetData, GetData

   
 

using System; 
using System.Reflection;
using System.Collections;

class ListModifier{
    public ListModifier()
    {
        ArrayList list = (ArrayList)AppDomain.CurrentDomain.GetData("Pets");
        list.Add("turtle");
    }
}
class MainClass{
      public static void Main(){
          AppDomain domain = AppDomain.CreateDomain("Test");

          ArrayList list = new ArrayList();
          list.Add("dog");
          list.Add("cat");
          list.Add("fish");

          domain.SetData("Pets", list);

          domain.CreateInstance("MainClass","Apress.VisualCSharpRecipes.Chapter03.ListModifier");

          foreach (string s in (ArrayList)domain.GetData("Pets")) {
              Console.WriteLine(s);
          }
      }
}

    


AppDomain.CreateDomain

   
 


using System; 

    class MainClass
    {
        public static void Main()
        {
            AppDomainSetup setupInfo = new AppDomainSetup();

            setupInfo.ApplicationBase = @"C:MyRootDirectory";
            setupInfo.ConfigurationFile = "MyApp.config";
            setupInfo.PrivateBinPath = "bin;plugins;external";

            AppDomain newDomain = AppDomain.CreateDomain("My New AppDomain", null, setupInfo);

        }
    }

    


ClientCertificates

   
 

using System;
using System.Net;
using System.Security.Cryptography.X509Certificates;

class MainClass {
    public static void Main() {
        WebRequest requestA = WebRequest.Create("http://www.yoursite.com");
        requestA.Credentials = new NetworkCredential("userName", "password");
        requestA.PreAuthenticate = true;
        WebRequest requestB = WebRequest.Create("http://www.yoursite.com");
        requestB.Credentials = CredentialCache.DefaultCredentials;
        requestB.PreAuthenticate = true;

        HttpWebRequest requestC = (HttpWebRequest)WebRequest.Create("http://www.yoursite.com");
        X509Certificate cert1 = X509Certificate.CreateFromCertFile("TestCertificate.cer");
        requestC.ClientCertificates.Add(cert1);
        HttpWebRequest requestD = (HttpWebRequest)WebRequest.Create("http://www.yoursite.com");
        X509Store store = new X509Store();
        X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName,"Joe", false);

        if (certs.Count == 1) {
            requestD.ClientCertificates.Add(certs[0]);
        } else {
            certs = X509Certificate2UI.SelectFromCollection(
                store.Certificates,
                "Select Certificate",
                "Select the certificate to use for authentication.",
                X509SelectionFlag.SingleSelection);

            if (certs.Count != 0) {
                requestD.ClientCertificates.Add(certs[0]);
            }
        }
    }
}