Home All Groups Group Topic Archive Search About

??? Dynamically loading a generic type ???

Author
2 Mar 2007 9:03 PM
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

Author
2 Mar 2007 11:39 PM
David Browne
"Amil Hanish" <amilhan***@hotmail.com> wrote in message
news:#m5H14QXHHA.1016@TK2MSFTNGP04.phx.gbl...
>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
Author
2 Mar 2007 11:56 PM
Amil Hanish
Perfect!  Many thanks!

Amil

Show quote
"David Browne" <davidbaxterbrowne no potted m***@hotmail.com> wrote in
message news:%23AgwEQSXHHA.4624@TK2MSFTNGP03.phx.gbl...
>
>
> "Amil Hanish" <amilhan***@hotmail.com> wrote in message
> news:#m5H14QXHHA.1016@TK2MSFTNGP04.phx.gbl...
>>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

AddThis Social Bookmark Button