AppDomain.CreateInstanceFrom Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
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
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
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.