Thursday, March 20, 2008

Running code from same assembly in difference application domain

Running a particular function from same assembly in a difference application domain than the default one is pretty straightforward. I guess the code below is self explainatory.

class RemoteClass : MarshalByRefObject
{
public void Action()
{
Console.WriteLine("Running From Appplication Domain :- {0}",AppDomain.CurrentDomain.FriendlyName);
}
}

class Class1
{
[STAThread]
static void Main(string[] args)
{
string ClassFullName =typeof(RemoteClass).FullName ;
string AssemblyName = Assembly.GetExecutingAssembly().FullName;

AppDomain TempDomain = AppDomain.CreateDomain("secondDomain");
TempDomain.Load(Assembly.GetExecutingAssembly().FullName);

RemoteClass objSecondDomain = TempDomain.CreateInstanceAndUnwrap( AssemblyName , ClassFullName ) as RemoteClass;
objSecondDomain.Action();
RemoteClass objMainDomain = new RemoteClass();
objMainDomain.Action();
AppDomain.Unload(TempDomain);
Console.ReadLine();
}
}



Output
------
Running From Appplication Domain :- secondDomain
Running From Appplication Domain :- ConsoleApplication1.vshost.exe


PS: Point to be noted here is that the Class whose instance is being created should inherit from MarshalByRefObject.