AppDomain.CreateInstanceFrom Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Cria uma nova instância de um tipo especificado definido no arquivo de assembly especificado.
Sobrecargas
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) |
Obsoleto.
Cria uma nova instância do tipo especificado definido no arquivo de assembly especificado. |
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) |
Cria uma nova instância do tipo especificado definido no arquivo de assembly especificado. |
CreateInstanceFrom(String, String, Object[]) |
Cria uma nova instância do tipo especificado definido no arquivo de assembly especificado. |
CreateInstanceFrom(String, String) |
Cria uma nova instância do tipo especificado definido no arquivo de assembly especificado. |
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
Cuidado
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.
Cria uma nova instância do tipo especificado definido no arquivo de assembly 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
O nome, inclusive o caminho, de um arquivo que contém um assembly que define o tipo solicitado. O assembly é carregado usando o método LoadFrom(String).
- typeName
- String
O nome totalmente qualificado do tipo solicitado, inclusive o namespace, mas não o assembly, como retornado pela propriedade FullName.
- ignoreCase
- Boolean
Um valor booliano especificando se é necessário executar uma pesquisa que diferencie maiúsculas de minúsculas ou não.
- bindingAttr
- BindingFlags
Uma combinação de zero ou mais sinalizadores de bit que afetam a pesquisa do construtor typeName
. Caso bindingAttr
seja zero, uma pesquisa que diferencia maiúsculas de minúsculas para construtores públicos é realizada.
- binder
- Binder
Um objeto que permite a associação, a coerção de tipos de argumento, a invocação de membros e a recuperação de objetos MemberInfo por meio da reflexão. Caso binder
seja nulo, o associador padrão é usado.
- args
- Object[]
Os argumentos a serem passados para o construtor. Esta matriz de argumentos deve corresponder em número, ordem e digitar os parâmetros do construtor a ser invocado. Caso haja preferência pelo construtor sem parâmetros, args
precisará ser uma matriz vazia ou nulo.
- culture
- CultureInfo
Informações específicas de cultura que controlam a coerção de args
para os tipos formais declarados do construtor typeName
. Caso culture
seja null
, CultureInfo para o thread atual é usado.
- activationAttributes
- Object[]
Uma matriz de um ou mais atributos que podem participar da ativação. Normalmente, uma matriz que contém um único objeto UrlAttribute que especifica a URL necessária para ativar um objeto remoto.
Esse parâmetro está relacionado a objetos ativados pelo cliente. A ativação do cliente é uma tecnologia herdada, mantida para compatibilidade com versões anteriores, mas não é recomendada para novos desenvolvimentos. Em vez disso, os aplicativos distribuídos devem usar o Windows Communication Foundation.
- securityAttributes
- Evidence
Informações usadas para autorizar a criação de typeName
.
Retornos
Um objeto que é um wrapper para a nova instância ou null
caso typeName
não seja encontrado. O valor de retorno precisa ser desencapsulado para acessar o objeto real.
Implementações
- Atributos
Exceções
O chamador não pode fornecer atributos de ativação para um objeto que não seja herdado de MarshalByRefObject.
- ou -
securityAttributes
não é null
. Quando a política CAS herdada não está habilitada, securityAttributes
deve ser null
.
A operação é tentada em um domínio de aplicativo descarregado.
assemblyFile
não foi encontrado.
typeName
não foi encontrado em assemblyFile
.
Nenhum construtor público correspondente foi encontrado.
O chamador não tem permissão suficiente para chamar esse construtor.
assemblyFile
não é um assembly válido para o runtime carregado no momento.
Um assembly ou módulo foi carregado duas vezes em com duas evidências diferentes.
Esta instância é null
.
Comentários
Para obter mais informações sobre esse método, consulte o método Activator.CreateInstanceFrom.
Quando o método CreateInstanceFrom é usado para criar uma instância em um domínio de aplicativo de destino, outro que não seja o domínio de aplicativo do qual a chamada é feita, o assembly é carregado no domínio de aplicativo de destino. No entanto, caso a instância seja desencapsulada no domínio do aplicativo de chamada, o uso da instância desencapsulada de determinadas formas pode fazer o assembly ser carregado no domínio do aplicativo de chamada. Por exemplo, depois da instância ser desencapsulada, as informações de tipo poderão ser solicitadas, para chamar a associação tardia dos métodos. Quando o assembly é carregado no domínio de aplicativo de chamada, podem ocorrer exceções.
Caso outra versão do mesmo assembly tenha sido carregada anteriormente no domínio do aplicativo de chamada ou caso o caminho de carregamento do domínio de aplicativo de chamada seja diferente do domínio do aplicativo de destino, exceções como MissingMethodException podem ocorrer.
Caso o domínio do aplicativo de chamada faça chamadas Early Bound para o tipo de instância, InvalidCastException pode ser lançado quando uma tentativa é feita para converter a instância.
Confira também
Aplica-se a
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
- Origem:
- AppDomain.cs
- Origem:
- AppDomain.cs
- Origem:
- AppDomain.cs
Cria uma nova instância do tipo especificado definido no arquivo de assembly 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
O nome, inclusive o caminho, de um arquivo que contém um assembly que define o tipo solicitado. O assembly é carregado usando o método LoadFrom(String).
- typeName
- String
O nome totalmente qualificado do tipo solicitado, inclusive o namespace, mas não o assembly, como retornado pela propriedade FullName.
- ignoreCase
- Boolean
Um valor booliano especificando se é necessário executar uma pesquisa que diferencie maiúsculas de minúsculas ou não.
- bindingAttr
- BindingFlags
Uma combinação de zero ou mais sinalizadores de bit que afetam a pesquisa do construtor typeName
. Caso bindingAttr
seja zero, uma pesquisa que diferencia maiúsculas de minúsculas para construtores públicos é realizada.
- binder
- Binder
Um objeto que permite a associação, a coerção de tipos de argumento, a invocação de membros e a recuperação de objetos MemberInfo por meio da reflexão. Caso binder
seja nulo, o associador padrão é usado.
- args
- Object[]
Os argumentos a serem passados para o construtor. Esta matriz de argumentos deve corresponder em número, ordem e digitar os parâmetros do construtor a ser invocado. Caso haja preferência pelo construtor sem parâmetros, args
precisará ser uma matriz vazia ou nulo.
- culture
- CultureInfo
Informações específicas de cultura que controlam a coerção de args
para os tipos formais declarados do construtor typeName
. Caso culture
seja null
, CultureInfo para o thread atual é usado.
- activationAttributes
- Object[]
Uma matriz de um ou mais atributos que podem participar da ativação. Normalmente, uma matriz que contém um único objeto UrlAttribute que especifica a URL necessária para ativar um objeto remoto.
Esse parâmetro está relacionado a objetos ativados pelo cliente. A ativação do cliente é uma tecnologia herdada, mantida para compatibilidade com versões anteriores, mas não é recomendada para novos desenvolvimentos. Em vez disso, os aplicativos distribuídos devem usar o Windows Communication Foundation.
Retornos
Um objeto que é um wrapper para a nova instância ou null
caso typeName
não seja encontrado. O valor de retorno precisa ser desencapsulado para acessar o objeto real.
Exceções
O chamador não pode fornecer atributos de ativação para um objeto que não seja herdado de MarshalByRefObject.
A operação é tentada em um domínio de aplicativo descarregado.
assemblyFile
não foi encontrado.
typeName
não foi encontrado em assemblyFile
.
Nenhum construtor público correspondente foi encontrado.
O chamador não tem permissão suficiente para chamar esse construtor.
assemblyFile
não é um assembly válido para o runtime carregado no momento.
Um assembly ou módulo foi carregado duas vezes em com duas evidências diferentes.
Esta instância é null
.
Comentários
Para obter mais informações, consulte o método Activator.CreateInstanceFrom.
Quando o método CreateInstanceFrom é usado para criar uma instância em um domínio de aplicativo de destino, outro que não seja o domínio de aplicativo do qual a chamada é feita, o assembly é carregado no domínio de aplicativo de destino. No entanto, caso a instância seja desencapsulada no domínio do aplicativo de chamada, o uso da instância desencapsulada de determinadas formas pode fazer o assembly ser carregado no domínio do aplicativo de chamada. Por exemplo, depois da instância ser desencapsulada, as informações de tipo poderão ser solicitadas, para chamar a associação tardia dos métodos. Quando o assembly é carregado no domínio de aplicativo de chamada, podem ocorrer exceções.
Caso outra versão do mesmo assembly tenha sido carregada anteriormente no domínio do aplicativo de chamada ou caso o caminho de carregamento do domínio de aplicativo de chamada seja diferente do domínio do aplicativo de destino, exceções como MissingMethodException podem ocorrer.
Caso o domínio do aplicativo de chamada faça chamadas Early Bound para o tipo de instância, InvalidCastException pode ser lançado quando uma tentativa é feita para converter a instância.
Confira também
Aplica-se a
CreateInstanceFrom(String, String, Object[])
- Origem:
- AppDomain.cs
- Origem:
- AppDomain.cs
- Origem:
- AppDomain.cs
Cria uma nova instância do tipo especificado definido no arquivo de assembly 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
O nome, inclusive o caminho, de um arquivo que contém um assembly que define o tipo solicitado. O assembly é carregado usando o método LoadFrom(String).
- typeName
- String
O nome totalmente qualificado do tipo solicitado, inclusive o namespace, mas não o assembly, como retornado pela propriedade FullName.
- activationAttributes
- Object[]
Uma matriz de um ou mais atributos que podem participar da ativação. Normalmente, uma matriz que contém um único objeto UrlAttribute que especifica a URL necessária para ativar um objeto remoto.
Esse parâmetro está relacionado a objetos ativados pelo cliente. A ativação pelo cliente é uma tecnologia herdada, mantida para compatibilidade com versões anteriores, mas não é recomendada para novos desenvolvimentos. Em vez disso, os aplicativos distribuídos devem usar o Windows Communication Foundation.
Retornos
Um objeto que é um wrapper para a nova instância ou null
caso typeName
não seja encontrado. O valor de retorno precisa ser desencapsulado para acessar o objeto real.
Implementações
Exceções
assemblyFile
é null
.
assemblyFile
não foi encontrado.
typeName
não foi encontrado em assemblyFile
.
O chamador não tem permissão suficiente para chamar esse construtor.
Nenhum construtor público correspondente foi encontrado.
O chamador não pode fornecer atributos de ativação para um objeto que não seja herdado de MarshalByRefObject.
A operação é tentada em um domínio de aplicativo descarregado.
assemblyFile
não é um assembly válido para o runtime carregado no momento.
Um assembly ou módulo foi carregado duas vezes em com duas evidências diferentes.
Esta instância é null
.
Comentários
O construtor sem parâmetros para typeName
é invocado.
Para obter mais informações sobre esse método, consulte o método Activator.CreateInstanceFrom.
Quando o método CreateInstanceFrom é usado para criar uma instância em um domínio de aplicativo de destino, outro que não seja o domínio de aplicativo do qual a chamada é feita, o assembly é carregado no domínio de aplicativo de destino. No entanto, caso a instância seja desencapsulada no domínio do aplicativo de chamada, o uso da instância desencapsulada de determinadas formas pode fazer o assembly ser carregado no domínio do aplicativo de chamada. Por exemplo, depois da instância ser desencapsulada, as informações de tipo poderão ser solicitadas, para chamar a associação tardia dos métodos. Quando o assembly é carregado no domínio de aplicativo de chamada, podem ocorrer exceções.
Caso outra versão do mesmo assembly tenha sido carregada anteriormente no domínio do aplicativo de chamada ou caso o caminho de carregamento do domínio de aplicativo de chamada seja diferente do domínio do aplicativo de destino, exceções como MissingMethodException podem ocorrer.
Caso o domínio do aplicativo de chamada faça chamadas Early Bound para o tipo de instância, InvalidCastException pode ser lançado quando uma tentativa é feita para converter a instância.
Confira também
Aplica-se a
CreateInstanceFrom(String, String)
- Origem:
- AppDomain.cs
- Origem:
- AppDomain.cs
- Origem:
- AppDomain.cs
Cria uma nova instância do tipo especificado definido no arquivo de assembly 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
O nome, inclusive o caminho, de um arquivo que contém um assembly que define o tipo solicitado. O assembly é carregado usando o método LoadFrom(String).
- typeName
- String
O nome totalmente qualificado do tipo solicitado, inclusive o namespace, mas não o assembly, como retornado pela propriedade FullName.
Retornos
Um objeto que é um wrapper para a nova instância ou null
caso typeName
não seja encontrado. O valor de retorno precisa ser desencapsulado para acessar o objeto real.
Implementações
Exceções
assemblyFile
não foi encontrado.
typeName
não foi encontrado em assemblyFile
.
A operação é tentada em um domínio de aplicativo descarregado.
Não foi encontrado nenhum construtor público sem parâmetros.
O chamador não tem permissão suficiente para chamar esse construtor.
assemblyFile
não é um assembly válido para o runtime carregado no momento.
Um assembly ou módulo foi carregado duas vezes em com duas evidências diferentes.
Esta instância é null
.
Exemplos
O exemplo a seguir mostra como usar a sobrecarga do CreateInstanceFrom(String, String) método para criar uma instância de um objeto em um domínio de aplicativo de destino e chamar seus métodos.
O exemplo define a MarshalableExample
classe , que pode ser marshalada entre os limites de domínio do aplicativo. O exemplo cria um caminho para o assembly em execução no momento, cria um domínio de aplicativo de destino e usa a sobrecarga do CreateInstanceFrom(String, String) método para carregar o assembly de exemplo no domínio do aplicativo de destino e criar uma instância do MarshalableExample
.
Observação
O caminho é absoluto neste exemplo, mas um caminho relativo também funcionaria porque o Assembly.LoadFrom método é usado para carregar o assembly.
Depois de desembrulhar o identificador do objeto, o exemplo demonstra três maneiras de usar um objeto em um domínio de aplicativo de destino:
Invocando um método com associação tardia, usando reflexão. Isso requer informações de tipo, o que faz com que o assembly seja carregado no domínio do aplicativo do chamador. (Neste exemplo, ele já está carregado.)
Convertendo o objeto em uma interface conhecida tanto para o chamador quanto para o chamador. Se a interface for definida no assembly de chamada ou em um terceiro assembly referenciado pelo chamador e pelo receptor, o assembly chamado não será carregado no domínio do aplicativo do chamador.
Usando o objeto diretamente quando seu tipo é conhecido pelo chamador. O assembly deve ser carregado no domínio do aplicativo do chamador.
Outra maneira de evitar carregar o assembly chamado no domínio do aplicativo do chamador é o chamador derivar da MarshalByRefObject classe e definir um método que pode ser executado no domínio do aplicativo de destino. Esse método pode usar reflexão para examinar um assembly de destino, pois o assembly de destino já está carregado no domínio do aplicativo de destino. Consulte o exemplo da DynamicDirectory propriedade .
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'!
Comentários
O construtor sem parâmetros para typeName
é invocado.
Para obter mais informações, consulte o método Activator.CreateInstanceFrom.
Quando o método CreateInstanceFrom é usado para criar uma instância em um domínio de aplicativo de destino, outro que não seja o domínio de aplicativo do qual a chamada é feita, o assembly é carregado no domínio de aplicativo de destino. No entanto, caso a instância seja desencapsulada no domínio do aplicativo de chamada, o uso da instância desencapsulada de determinadas formas pode fazer o assembly ser carregado no domínio do aplicativo de chamada. Por exemplo, depois da instância ser desencapsulada, as informações de tipo poderão ser solicitadas, para chamar a associação tardia dos métodos. Quando o assembly é carregado no domínio de aplicativo de chamada, podem ocorrer exceções.
Caso outra versão do mesmo assembly tenha sido carregada anteriormente no domínio do aplicativo de chamada ou caso o caminho de carregamento do domínio de aplicativo de chamada seja diferente do domínio do aplicativo de destino, exceções como MissingMethodException podem ocorrer.
Caso o domínio do aplicativo de chamada faça chamadas Early Bound para o tipo de instância, InvalidCastException pode ser lançado quando uma tentativa é feita para converter a instância.