using System;using System.Globalization;using System.IO;using System.Reflection;using System.Security.Policy;namespace AppDomainSample{ static class Program { [STAThread] static void Main() { Execute(1, "connection..."); Console.ReadKey(); } public static void Execute(int id, string connectionString) { Assembly assembly = Assembly.GetExecutingAssembly(); string assemblyName = assembly.FullName; string basePath = new Uri(Path.GetDirectoryName(assembly.CodeBase)).LocalPath; AppDomain currentDomain = AppDomain.CurrentDomain; Evidence evidence = currentDomain.Evidence; AppDomainSetup ads = new AppDomainSetup(); ads.ConfigurationFile = currentDomain.SetupInformation.ConfigurationFile; ads.ApplicationBase = basePath; ads.PrivateBinPath = basePath; ads.ShadowCopyFiles = "true"; AppDomain d = AppDomain.CreateDomain("AppDomainSampleName", evidence, ads); try { MyContext context = new MyContext(id, connectionString); d.Load(assemblyName); object[] args = new object[] { context }; IMyProcess r = d.CreateInstanceAndUnwrap(assemblyName, "AppDomainSample.MyProcessImpl", false, BindingFlags.CreateInstance, null, args, CultureInfo.CurrentCulture, null, evidence) as IMyProcess; r.Process(); } finally { AppDomain.Unload(d); } } } internal class MyProcessImpl : MarshalByRefObject, IMyProcess { private readonly MyContext _context; public MyProcessImpl(MyContext context) { _context = context; } public void Process() { Console.WriteLine("ConnectionString: {0} from {1} domain.", _context.ConnectionString, AppDomain.CurrentDomain.FriendlyName); } } internal interface IMyProcess { void Process(); } internal class MyContext : MarshalByRefObject { private readonly int _id; private readonly string _connectionString; public MyContext(int id, string connectionString) { _id = id; _connectionString = connectionString; } public int Id { get { return _id; } } public string ConnectionString { get { return _connectionString; } } }}
I'm Dusty Candland a software developer in Colorado.
Email