AppDomain.CreateInstanceFrom Método

Definición

Crea una nueva instancia de un tipo especificado definido en el archivo de ensamblado especificado.

Sobrecargas

CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
Obsoletos.

Crea una nueva instancia del tipo especificado definido en el archivo de ensamblado especificado.

CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Crea una nueva instancia del tipo especificado definido en el archivo de ensamblado especificado.

CreateInstanceFrom(String, String, Object[])

Crea una nueva instancia del tipo especificado definido en el archivo de ensamblado especificado.

CreateInstanceFrom(String, String)

Crea una nueva instancia del tipo especificado definido en el archivo de ensamblado especificado.

CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)

Precaución

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

Crea una nueva instancia del tipo especificado definido en el archivo de ensamblado especificado.

public:
 virtual System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes, System::Security::Policy::Evidence ^ securityAttributes);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);
abstract member CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
[<System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract member CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object(), securityAttributes As Evidence) As ObjectHandle

Parámetros

assemblyFile
String

Nombre, incluida la ruta de acceso, de un archivo que contiene un ensamblado que define el tipo solicitado. El ensamblado se carga mediante el método LoadFrom(String).

typeName
String

Nombre completo del tipo solicitado, incluido el espacio de nombres, pero no el ensamblado, tal y como lo devuelve la propiedad FullName.

ignoreCase
Boolean

Valor booleano que especifica si va a realizarse una búsqueda con distinción de mayúsculas y minúsculas.

bindingAttr
BindingFlags

Combinación de cero o más marcadores de bits que afectan a la búsqueda del constructor de typeName. Si bindingAttr es cero, se realiza una búsqueda de constructores públicos que distingue mayúsculas de minúsculas.

binder
Binder

Objeto que permite el enlace, la conversión de tipos de argumentos, la llamada de miembros y la recuperación de objetos MemberInfo mediante reflexión. Si binder es null, se usará el enlazador predeterminado.

args
Object[]

Argumentos que se van a pasar al constructor. Esta matriz de argumentos debe coincidir en número, orden y tipo con los parámetros del constructor que se va a invocar. Si se prefiere usar el constructor sin parámetros, args debe ser una matriz vacía o null.

culture
CultureInfo

Información específica de la referencia cultural que controla la conversión de args en los tipos formales declarados para el constructor de typeName. Si culture es null, se usa CultureInfo del subproceso actual.

activationAttributes
Object[]

Matriz de uno o más atributos que puede participar en la activación. Normalmente, una matriz que contiene un único objeto UrlAttribute que especifica la dirección URL necesaria para activar un objeto remoto.

Este parámetro está relacionado con los objetos activados por el cliente. La activación por parte del cliente es una tecnología heredada que se conserva por compatibilidad con versiones anteriores, pero no se recomienda para nuevo desarrollo. Las aplicaciones distribuidas deberían usar Windows Communication Foundation.

securityAttributes
Evidence

Información que se usa para autorizar la creación de typeName.

Devoluciones

Objeto contenedor de la nueva instancia o null, si no se encuentra el parámetro typeName. El valor devuelto debe desempaquetarse para obtener acceso al objeto real.

Implementaciones

Atributos

Excepciones

assemblyFile es null.

O bien

typeName es null.

El llamador no puede ofrecer atributos de activación para un objeto que no hereda de MarshalByRefObject.

o bien

securityAttributes no es null. Cuando no se habilita la directiva CAS heredada, securityAttributes debe ser null.

La operación se intenta en un dominio de aplicación descargado.

No se encontró assemblyFile.

No se encontró typeName en assemblyFile.

No se encontró ningún constructor público coincidente.

El autor de la llamada no tiene permiso suficiente para llamar a este constructor.

assemblyFile no es un ensamblado válido para el entorno de ejecución cargado actualmente.

Se cargó un ensamblado o módulo dos veces con dos evidencias diferentes.

La instancia es null.

Comentarios

Para obtener más información sobre este método, vea el Activator.CreateInstanceFrom método .

Cuando se usa el CreateInstanceFrom método para crear una instancia en un dominio de aplicación de destino, aparte del dominio de aplicación desde el que se realiza la llamada, el ensamblado se carga en el dominio de aplicación de destino. Sin embargo, si la instancia se desajusta en el dominio de aplicación que realiza la llamada, el uso de la instancia de desajustada de ciertas maneras puede hacer que el ensamblado se cargue en el dominio de aplicación que realiza la llamada. Por ejemplo, después de desencapsular la instancia, se podría solicitar su información de tipo para llamar a sus métodos enlazados en tiempo de ejecución. Cuando el ensamblado se carga en el dominio de aplicación que realiza la llamada, se pueden producir excepciones.

  • Si se cargó anteriormente otra versión del mismo ensamblado en el dominio de aplicación que realiza la llamada, o si la ruta de acceso de carga del dominio de aplicación que realiza la llamada es diferente de la del dominio de aplicación de destino, se pueden producir excepciones como MissingMethodException .

  • Si el dominio de aplicación que realiza la llamada realiza llamadas enlazadas en tiempo de ejecución al tipo de instancia, InvalidCastException se puede producir cuando se intenta convertir la instancia.

Consulte también

Se aplica a

CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Source:
AppDomain.cs
Source:
AppDomain.cs
Source:
AppDomain.cs

Crea una nueva instancia del tipo especificado definido en el archivo de ensamblado especificado.

public:
 System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
member this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As ObjectHandle

Parámetros

assemblyFile
String

Nombre, incluida la ruta de acceso, de un archivo que contiene un ensamblado que define el tipo solicitado. El ensamblado se carga mediante el método LoadFrom(String).

typeName
String

Nombre completo del tipo solicitado, incluido el espacio de nombres, pero no el ensamblado, tal y como lo devuelve la propiedad FullName.

ignoreCase
Boolean

Valor booleano que especifica si va a realizarse una búsqueda con distinción de mayúsculas y minúsculas.

bindingAttr
BindingFlags

Combinación de cero o más marcadores de bits que afectan a la búsqueda del constructor de typeName. Si bindingAttr es cero, se realiza una búsqueda de constructores públicos que distingue mayúsculas de minúsculas.

binder
Binder

Objeto que permite el enlace, la conversión de tipos de argumentos, la llamada de miembros y la recuperación de objetos MemberInfo mediante reflexión. Si binder es null, se usará el enlazador predeterminado.

args
Object[]

Argumentos que se van a pasar al constructor. Esta matriz de argumentos debe coincidir en número, orden y tipo con los parámetros del constructor que se va a invocar. Si se prefiere usar el constructor sin parámetros, args debe ser una matriz vacía o null.

culture
CultureInfo

Información específica de la referencia cultural que controla la conversión de args en los tipos formales declarados para el constructor de typeName. Si culture es null, se usa CultureInfo del subproceso actual.

activationAttributes
Object[]

Matriz de uno o más atributos que puede participar en la activación. Normalmente, una matriz que contiene un único objeto UrlAttribute que especifica la dirección URL necesaria para activar un objeto remoto.

Este parámetro está relacionado con los objetos activados por el cliente. La activación por parte del cliente es una tecnología heredada que se conserva por compatibilidad con versiones anteriores, pero no se recomienda para nuevo desarrollo. Las aplicaciones distribuidas deberían usar Windows Communication Foundation.

Devoluciones

Objeto contenedor de la nueva instancia o null, si no se encuentra el parámetro typeName. El valor devuelto debe desempaquetarse para obtener acceso al objeto real.

Excepciones

assemblyFile es null.

O bien

typeName es null.

El llamador no puede ofrecer atributos de activación para un objeto que no hereda de MarshalByRefObject.

La operación se intenta en un dominio de aplicación descargado.

No se encontró assemblyFile.

No se encontró typeName en assemblyFile.

No se encontró ningún constructor público coincidente.

El autor de la llamada no tiene permiso suficiente para llamar a este constructor.

assemblyFile no es un ensamblado válido para el entorno de ejecución cargado actualmente.

Se cargó un ensamblado o módulo dos veces con dos evidencias diferentes.

La instancia es null.

Comentarios

Para obtener más información, vea el método Activator.CreateInstanceFrom.

Cuando se usa el CreateInstanceFrom método para crear una instancia en un dominio de aplicación de destino, aparte del dominio de aplicación desde el que se realiza la llamada, el ensamblado se carga en el dominio de aplicación de destino. Sin embargo, si la instancia se desajusta en el dominio de aplicación que realiza la llamada, el uso de la instancia de desajustada de ciertas maneras puede hacer que el ensamblado se cargue en el dominio de aplicación que realiza la llamada. Por ejemplo, después de desencapsular la instancia, se podría solicitar su información de tipo para llamar a sus métodos enlazados en tiempo de ejecución. Cuando el ensamblado se carga en el dominio de aplicación que realiza la llamada, se pueden producir excepciones.

  • Si se cargó anteriormente otra versión del mismo ensamblado en el dominio de aplicación que realiza la llamada, o si la ruta de acceso de carga del dominio de aplicación que realiza la llamada es diferente de la del dominio de aplicación de destino, se pueden producir excepciones como MissingMethodException .

  • Si el dominio de aplicación que realiza la llamada realiza llamadas enlazadas en tiempo de ejecución al tipo de instancia, InvalidCastException se puede producir cuando se intenta convertir la instancia.

Consulte también

Se aplica a

CreateInstanceFrom(String, String, Object[])

Source:
AppDomain.cs
Source:
AppDomain.cs
Source:
AppDomain.cs

Crea una nueva instancia del tipo especificado definido en el archivo de ensamblado especificado.

public:
 System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, cli::array <System::Object ^> ^ activationAttributes);
public:
 virtual System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, cli::array <System::Object ^> ^ activationAttributes);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom (string assemblyFile, string typeName, object?[]? activationAttributes);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, object[] activationAttributes);
member this.CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
abstract member CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String, activationAttributes As Object()) As ObjectHandle

Parámetros

assemblyFile
String

Nombre, incluida la ruta de acceso, de un archivo que contiene un ensamblado que define el tipo solicitado. El ensamblado se carga mediante el método LoadFrom(String).

typeName
String

Nombre completo del tipo solicitado, incluido el espacio de nombres, pero no el ensamblado, tal y como lo devuelve la propiedad FullName.

activationAttributes
Object[]

Matriz de uno o más atributos que puede participar en la activación. Normalmente, una matriz que contiene un único objeto UrlAttribute que especifica la dirección URL necesaria para activar un objeto remoto.

Este parámetro está relacionado con los objetos activados por el cliente. La activación por parte del cliente es una tecnología heredada que se conserva para la compatibilidad con versiones anteriores, pero no se recomienda para nuevo desarrollo. Las aplicaciones distribuidas deberían usar Windows Communication Foundation.

Devoluciones

Objeto contenedor de la nueva instancia o null, si no se encuentra el parámetro typeName. El valor devuelto debe desempaquetarse para obtener acceso al objeto real.

Implementaciones

Excepciones

assemblyFile es null.

No se encontró assemblyFile.

No se encontró typeName en assemblyFile.

El autor de la llamada no tiene permiso suficiente para llamar a este constructor.

No se encontró ningún constructor público coincidente.

El llamador no puede ofrecer atributos de activación para un objeto que no hereda de MarshalByRefObject.

La operación se intenta en un dominio de aplicación descargado.

assemblyFile no es un ensamblado válido para el tiempo de ejecución cargado actualmente.

Se cargó un ensamblado o módulo dos veces con dos evidencias diferentes.

La instancia es null.

Comentarios

Se invoca el constructor sin parámetros para typeName .

Para obtener más información sobre este método, vea el Activator.CreateInstanceFrom método .

Cuando se usa el CreateInstanceFrom método para crear una instancia en un dominio de aplicación de destino, aparte del dominio de aplicación desde el que se realiza la llamada, el ensamblado se carga en el dominio de aplicación de destino. Sin embargo, si la instancia se desencapsula en el dominio de aplicación que realiza la llamada, el uso de la instancia desencapsulada de ciertas maneras puede hacer que el ensamblado se cargue en el dominio de aplicación que realiza la llamada. Por ejemplo, después de desencapsular la instancia, es posible que se solicite su información de tipo para llamar a sus métodos enlazados en tiempo de ejecución. Cuando el ensamblado se carga en el dominio de aplicación que realiza la llamada, se pueden producir excepciones.

  • Si se cargó previamente otra versión del mismo ensamblado en el dominio de aplicación que realiza la llamada o si la ruta de acceso de carga del dominio de aplicación que realiza la llamada es diferente de la del dominio de aplicación de destino, se pueden producir excepciones como MissingMethodException .

  • Si el dominio de aplicación que realiza la llamada realiza llamadas enlazadas en tiempo de ejecución al tipo de instancia, InvalidCastException se puede producir cuando se intenta convertir la instancia.

Consulte también

Se aplica a

CreateInstanceFrom(String, String)

Source:
AppDomain.cs
Source:
AppDomain.cs
Source:
AppDomain.cs

Crea una nueva instancia del tipo especificado definido en el archivo de ensamblado especificado.

public:
 System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName);
public:
 virtual System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom (string assemblyFile, string typeName);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName);
member this.CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
abstract member CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String) As ObjectHandle

Parámetros

assemblyFile
String

Nombre, incluida la ruta de acceso, de un archivo que contiene un ensamblado que define el tipo solicitado. El ensamblado se carga mediante el método LoadFrom(String).

typeName
String

Nombre completo del tipo solicitado, incluido el espacio de nombres, pero no el ensamblado, tal y como lo devuelve la propiedad FullName.

Devoluciones

Objeto contenedor de la nueva instancia o null, si no se encuentra el parámetro typeName. El valor devuelto debe desempaquetarse para obtener acceso al objeto real.

Implementaciones

Excepciones

assemblyFile es null.

O bien

typeName es null.

No se encontró assemblyFile.

No se encontró typeName en assemblyFile.

La operación se intenta en un dominio de aplicación descargado.

No se ha encontrado ningún constructor público sin parámetros.

El autor de la llamada no tiene permiso suficiente para llamar a este constructor.

assemblyFile no es un ensamblado válido para el tiempo de ejecución cargado actualmente.

Se cargó un ensamblado o módulo dos veces con dos evidencias diferentes.

La instancia es null.

Ejemplos

En el ejemplo siguiente se muestra cómo usar la sobrecarga del CreateInstanceFrom(String, String) método para crear una instancia de un objeto en un dominio de aplicación de destino y llamar a sus métodos.

En el ejemplo se define la MarshalableExample clase , que se puede serializar entre los límites del dominio de aplicación. En el ejemplo se crea una ruta de acceso al ensamblado que se ejecuta actualmente, se crea un dominio de aplicación de destino y se usa la CreateInstanceFrom(String, String) sobrecarga del método para cargar el ensamblado de ejemplo en el dominio de aplicación de destino y crear una instancia de MarshalableExample.

Nota

La ruta de acceso es absoluta en este ejemplo, pero una ruta de acceso relativa también funcionaría porque el Assembly.LoadFrom método se usa para cargar el ensamblado.

Después de desencapsular el identificador de objeto, en el ejemplo se muestran tres maneras de usar un objeto en un dominio de aplicación de destino:

  • Invocar un método con enlace en tiempo de ejecución, mediante reflexión. Esto requiere información de tipo, que hace que el ensamblado se cargue en el dominio de aplicación del autor de la llamada. (En este ejemplo, ya está cargado).

  • Convertir el objeto en una interfaz conocida tanto para el autor de la llamada como para el destinatario. Si la interfaz se define en el ensamblado que realiza la llamada o en un tercer ensamblado al que hace referencia tanto el autor de la llamada como el destinatario, el ensamblado llamado no se carga en el dominio de aplicación del llamador.

  • Usar el objeto directamente cuando se conoce su tipo al autor de la llamada. El ensamblado debe cargarse en el dominio de aplicación del autor de la llamada.

Otra manera de evitar cargar el ensamblado llamado en el dominio de aplicación del llamador es que el autor de la llamada derive de la MarshalByRefObject clase y defina un método que se pueda ejecutar en el dominio de aplicación de destino. Ese método puede usar la reflexión para examinar un ensamblado de destino, ya que el ensamblado de destino ya está cargado en el dominio de aplicación de destino. Vea el ejemplo de la DynamicDirectory propiedad .

using namespace System;

public interface class ITest
{
    void Test(String^ greeting);
};

public ref class MarshalableExample : MarshalByRefObject, ITest
{
public:
    virtual void Test(String^ greeting)
    {
        Console::WriteLine("{0} from '{1}'!", greeting,
            AppDomain::CurrentDomain->FriendlyName);
    }
};

void main()
{
    // Construct a path to the current assembly.
    String^ assemblyPath = Environment::CurrentDirectory + "\\" +
        MarshalableExample::typeid->Assembly->GetName()->Name + ".exe";

    AppDomain^ ad = AppDomain::CreateDomain("MyDomain");
 
    System::Runtime::Remoting::ObjectHandle^ oh = 
        ad->CreateInstanceFrom(assemblyPath, "MarshalableExample");

    Object^ obj = oh->Unwrap();


    // Three ways to use the newly created object, depending on how
    // much is known about the type: Late bound, early bound through 
    // a mutually known interface, or early binding of a known type.
    //
    obj->GetType()->InvokeMember("Test", 
        System::Reflection::BindingFlags::InvokeMethod, 
        Type::DefaultBinder, obj, gcnew array<Object^> { "Hello" });

    ITest^ it = (ITest^) obj;
    it->Test("Hi");

    MarshalableExample^ ex = (MarshalableExample^) obj;
    ex->Test("Goodbye");
}

/* This example produces the following output:

Hello from 'MyDomain'!
Hi from 'MyDomain'!
Goodbye from 'MyDomain'!
 */
using System;

public interface ITest
{
    void Test(string greeting);
}

public class MarshalableExample : MarshalByRefObject, ITest
{
    static void Main()
    {
        // Construct a path to the current assembly.
        string assemblyPath = Environment.CurrentDirectory + "\\" +
            typeof(MarshalableExample).Assembly.GetName().Name + ".exe";

        AppDomain ad = AppDomain.CreateDomain("MyDomain");

        System.Runtime.Remoting.ObjectHandle oh =
            ad.CreateInstanceFrom(assemblyPath, "MarshalableExample");

        object obj = oh.Unwrap();

        // Three ways to use the newly created object, depending on how
        // much is known about the type: Late bound, early bound through
        // a mutually known interface, or early binding of a known type.
        //
        obj.GetType().InvokeMember("Test",
            System.Reflection.BindingFlags.InvokeMethod,
            Type.DefaultBinder, obj, new object[] { "Hello" });

        ITest it = (ITest) obj;
        it.Test("Hi");

        MarshalableExample ex = (MarshalableExample) obj;
        ex.Test("Goodbye");
    }

    public void Test(string greeting)
    {
        Console.WriteLine("{0} from '{1}'!", greeting,
            AppDomain.CurrentDomain.FriendlyName);
    }
}

/* This example produces the following output:

Hello from 'MyDomain'!
Hi from 'MyDomain'!
Goodbye from 'MyDomain'!
 */
open System

type ITest =
    abstract Test: string -> unit

type MarshalableExample() =
    inherit MarshalByRefObject()
    
    member _.Test greeting =
        printfn $"{greeting} from '{AppDomain.CurrentDomain.FriendlyName}'!"

    interface ITest with
        member this.Test message = this.Test message 

// Construct a path to the current assembly.
let assemblyPath = 
    Environment.CurrentDirectory + "\\" + typeof<MarshalableExample>.Assembly.GetName().Name + ".exe"

let ad = AppDomain.CreateDomain "MyDomain"

let oh =
    ad.CreateInstanceFrom(assemblyPath, "MarshalableExample")

let obj = oh.Unwrap()

// Three ways to use the newly created object, depending on how
// much is known about the type: Late bound, early bound through
// a mutually known interface, or early binding of a known type.
//
obj.GetType().InvokeMember("Test",
    System.Reflection.BindingFlags.InvokeMethod,
    Type.DefaultBinder, obj, [| box "Hello" |])
|> ignore

let it = obj :?> ITest
it.Test "Hi"

let ex = obj :?> MarshalableExample
ex.Test("Goodbye")

(* This example produces the following output:

Hello from 'MyDomain'!
Hi from 'MyDomain'!
Goodbye from 'MyDomain'!
 *)
Public Interface ITest

    Sub Test(ByVal greeting As String)
End Interface

Public Class MarshalableExample 
    Inherits MarshalByRefObject
    Implements ITest

    Shared Sub Main()
    
        ' Construct a path to the current assembly.
        Dim assemblyPath As String = Environment.CurrentDirectory & "\" &
            GetType(MarshalableExample).Assembly.GetName().Name & ".exe"

        Dim ad As AppDomain = AppDomain.CreateDomain("MyDomain")
 
        Dim oh As System.Runtime.Remoting.ObjectHandle = 
            ad.CreateInstanceFrom(assemblyPath, "MarshalableExample")

        Dim obj As Object = oh.Unwrap()


        ' Three ways to use the newly created object, depending on how
        ' much is known about the type: Late bound, early bound through 
        ' a mutually known interface, or early binding of a known type.
        '
        obj.GetType().InvokeMember("Test", 
            System.Reflection.BindingFlags.InvokeMethod, 
            Type.DefaultBinder, obj, New Object() { "Hello" })

        Dim it As ITest = CType(obj, ITest) 
        it.Test("Hi")

        Dim ex As MarshalableExample = CType(obj, MarshalableExample) 
        ex.Test("Goodbye")
    End Sub

    Public Sub Test(ByVal greeting As String) Implements ITest.Test
    
        Console.WriteLine("{0} from '{1}'!", greeting,
            AppDomain.CurrentDomain.FriendlyName)
    End Sub
End Class

' This example produces the following output:
'
'Hello from 'MyDomain'!
'Hi from 'MyDomain'!
'Goodbye from 'MyDomain'!

Comentarios

Se invoca el constructor sin parámetros para typeName .

Para obtener más información, vea el método Activator.CreateInstanceFrom.

Cuando se usa el CreateInstanceFrom método para crear una instancia en un dominio de aplicación de destino, aparte del dominio de aplicación desde el que se realiza la llamada, el ensamblado se carga en el dominio de aplicación de destino. Sin embargo, si la instancia se desencapsula en el dominio de aplicación que realiza la llamada, el uso de la instancia desencapsulada de ciertas maneras puede hacer que el ensamblado se cargue en el dominio de aplicación que realiza la llamada. Por ejemplo, después de desencapsular la instancia, es posible que se solicite su información de tipo para llamar a sus métodos enlazados en tiempo de ejecución. Cuando el ensamblado se carga en el dominio de aplicación que realiza la llamada, se pueden producir excepciones.

  • Si se cargó previamente otra versión del mismo ensamblado en el dominio de aplicación que realiza la llamada o si la ruta de acceso de carga del dominio de aplicación que realiza la llamada es diferente de la del dominio de aplicación de destino, se pueden producir excepciones como MissingMethodException .

  • Si el dominio de aplicación que realiza la llamada realiza llamadas enlazadas en tiempo de ejecución al tipo de instancia, InvalidCastException se puede producir cuando se intenta convertir la instancia.

Consulte también

Se aplica a