??? Dynamically loading a generic type ???

  • Thread starter Thread starter Amil Hanish
  • Start date Start date
A

Amil Hanish

I have a generic type that I need in another app domain? How can I do this?

I was trying to call CreateInstanceAndUnwrap, but it fails since I can't
figure out how to tell it which T (type) to use when creating? Is there
some other way to create a generic type in an app domain?

Amil
 
Amil Hanish said:
I have a generic type that I need in another app domain? How can I do
this?

I was trying to call CreateInstanceAndUnwrap, but it fails since I can't
figure out how to tell it which T (type) to use when creating? Is there
some other way to create a generic type in an app domain?

Just examine an instance of the Type you are trying to create to get its
assembly name and type name:

EG

public class Program
{

class Foo<T> : MarshalByRefObject
{
public T t;
public string MyDomain
{
get { return AppDomain.CurrentDomain.FriendlyName; }
}
}

class Bar
{
}


public static void Main(string[] args)
{
try
{
AppDomain d = AppDomain.CreateDomain("new domain");
Type t = typeof(Foo<Bar>);

Console.WriteLine(t.FullName);
Foo<Bar> remote =
(Foo<Bar>)d.CreateInstanceAndUnwrap(t.Assembly.FullName, t.FullName);
Console.WriteLine(remote.MyDomain);

}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.WriteLine("Hit any key to exit");
Console.ReadKey();
}
}

David
 
Perfect! Many thanks!

Amil

David Browne said:
Amil Hanish said:
I have a generic type that I need in another app domain? How can I do
this?

I was trying to call CreateInstanceAndUnwrap, but it fails since I can't
figure out how to tell it which T (type) to use when creating? Is there
some other way to create a generic type in an app domain?

Just examine an instance of the Type you are trying to create to get its
assembly name and type name:

EG

public class Program
{

class Foo<T> : MarshalByRefObject
{
public T t;
public string MyDomain
{
get { return AppDomain.CurrentDomain.FriendlyName; }
}
}

class Bar
{
}


public static void Main(string[] args)
{
try
{
AppDomain d = AppDomain.CreateDomain("new domain");
Type t = typeof(Foo<Bar>);

Console.WriteLine(t.FullName);
Foo<Bar> remote =
(Foo<Bar>)d.CreateInstanceAndUnwrap(t.Assembly.FullName, t.FullName);
Console.WriteLine(remote.MyDomain);

}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.WriteLine("Hit any key to exit");
Console.ReadKey();
}
}

David
 
Back
Top