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
| Nome | Description |
|---|---|
| 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, incluindo o caminho, de um arquivo que contém um assembly que define o tipo solicitado. O assembly é carregado usando o LoadFrom(String) método.
- typeName
- String
O nome totalmente qualificado do tipo solicitado, incluindo o namespace, mas não o assembly, conforme retornado pela FullName propriedade.
- ignoreCase
- Boolean
Um valor booliano que especifica se uma pesquisa diferencia maiúsculas de minúsculas ou não.
- bindingAttr
- BindingFlags
Uma combinação de sinalizadores de zero ou mais bits que afetam a pesquisa do typeName construtor. Se bindingAttr for zero, uma pesquisa que diferencia maiúsculas de minúsculas por construtores públicos será 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 por meio da MemberInfo reflexão. Se binder for nulo, o associador padrão será usado.
- args
- Object[]
Os argumentos a serem passados para o construtor. Essa matriz de argumentos deve corresponder em número, ordem e digitar os parâmetros do construtor a ser invocado. Se o construtor sem parâmetros for preferencial, args deverá ser uma matriz vazia ou nula.
- culture
- CultureInfo
Informações específicas da cultura que regem a coerção dos args tipos formais declarados para o typeName construtor. Se culture for null, o CultureInfo thread atual será usado.
- activationAttributes
- Object[]
Uma matriz de um ou mais atributos que podem participar da ativação. Normalmente, uma matriz que contém um único UrlAttribute objeto 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 que é retida para compatibilidade com versões anteriores, mas não é recomendada para o novo desenvolvimento. 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 se typeName não for encontrado. O valor retornado precisa ser desembrulhado 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 herda.MarshalByRefObject
- ou -
securityAttributes não nullé . Quando a política cas herdada não estiver habilitada, securityAttributes deverá 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 com duas evidências diferentes.
Esta instância é null.
Comentários
Para obter mais informações sobre esse método, consulte o Activator.CreateInstanceFrom método.
Quando o CreateInstanceFrom método é usado para criar uma instância em um domínio de aplicativo de destino, além do domínio do aplicativo do qual a chamada é feita, o assembly é carregado no domínio do aplicativo de destino. No entanto, se a instância for desembrulhada no domínio de aplicativo de chamada, usar a instância desembrulhada de determinadas maneiras poderá fazer com que o assembly seja carregado no domínio do aplicativo de chamada. Por exemplo, depois que a instância for desembrulhada, suas informações de tipo poderão ser solicitadas, a fim de chamar seus métodos com limite tardio. Quando o assembly é carregado no domínio de aplicativo de chamada, podem ocorrer exceções.
Se outra versão do mesmo assembly tiver sido carregada anteriormente no domínio de aplicativo de chamada ou se o caminho de carga do domínio de aplicativo de chamada for diferente do domínio do aplicativo de destino, exceções como MissingMethodException podem ocorrer.
Se o domínio de aplicativo de chamada fizer chamadas com limite antecipado para o tipo de instância, InvalidCastException poderá ser gerada quando for feita uma tentativa de 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
- 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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")]
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);
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.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")>]
member this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> System.Runtime.Remoting.ObjectHandle
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, incluindo o caminho, de um arquivo que contém um assembly que define o tipo solicitado. O assembly é carregado usando o LoadFrom(String) método.
- typeName
- String
O nome totalmente qualificado do tipo solicitado, incluindo o namespace, mas não o assembly, conforme retornado pela FullName propriedade.
- ignoreCase
- Boolean
Um valor booliano que especifica se uma pesquisa diferencia maiúsculas de minúsculas ou não.
- bindingAttr
- BindingFlags
Uma combinação de sinalizadores de zero ou mais bits que afetam a pesquisa do typeName construtor. Se bindingAttr for zero, uma pesquisa que diferencia maiúsculas de minúsculas por construtores públicos será 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 por meio da MemberInfo reflexão. Se binder for nulo, o associador padrão será usado.
- args
- Object[]
Os argumentos a serem passados para o construtor. Essa matriz de argumentos deve corresponder em número, ordem e digitar os parâmetros do construtor a ser invocado. Se o construtor sem parâmetros for preferencial, args deverá ser uma matriz vazia ou nula.
- culture
- CultureInfo
Informações específicas da cultura que regem a coerção dos args tipos formais declarados para o typeName construtor. Se culture for null, o CultureInfo thread atual será usado.
- activationAttributes
- Object[]
Uma matriz de um ou mais atributos que podem participar da ativação. Normalmente, uma matriz que contém um único UrlAttribute objeto 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 que é retida para compatibilidade com versões anteriores, mas não é recomendada para o novo desenvolvimento. 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 se typeName não for encontrado. O valor retornado precisa ser desembrulhado para acessar o objeto real.
- Atributos
Exceções
O chamador não pode fornecer atributos de ativação para um objeto que não herda.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 com duas evidências diferentes.
Esta instância é null.
Comentários
Para obter mais informações, consulte o Activator.CreateInstanceFrom método.
Quando o CreateInstanceFrom método é usado para criar uma instância em um domínio de aplicativo de destino, além do domínio do aplicativo do qual a chamada é feita, o assembly é carregado no domínio do aplicativo de destino. No entanto, se a instância for desembrulhada no domínio de aplicativo de chamada, usar a instância desembrulhada de determinadas maneiras poderá fazer com que o assembly seja carregado no domínio do aplicativo de chamada. Por exemplo, depois que a instância for desembrulhada, suas informações de tipo poderão ser solicitadas, a fim de chamar seus métodos com limite tardio. Quando o assembly é carregado no domínio de aplicativo de chamada, podem ocorrer exceções.
Se outra versão do mesmo assembly tiver sido carregada anteriormente no domínio de aplicativo de chamada ou se o caminho de carga do domínio de aplicativo de chamada for diferente do domínio do aplicativo de destino, exceções como MissingMethodException podem ocorrer.
Se o domínio de aplicativo de chamada fizer chamadas com limite antecipado para o tipo de instância, InvalidCastException poderá ser gerada quando for feita uma tentativa de converter a instância.
Confira também
Aplica-se a
CreateInstanceFrom(String, String, Object[])
- Origem:
- AppDomain.cs
- Origem:
- AppDomain.cs
- 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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")]
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom(string assemblyFile, string typeName, 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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")>]
member this.CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
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, incluindo o caminho, de um arquivo que contém um assembly que define o tipo solicitado. O assembly é carregado usando o LoadFrom(String) método.
- typeName
- String
O nome totalmente qualificado do tipo solicitado, incluindo o namespace, mas não o assembly, conforme retornado pela FullName propriedade.
- activationAttributes
- Object[]
Uma matriz de um ou mais atributos que podem participar da ativação. Normalmente, uma matriz que contém um único UrlAttribute objeto 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 que é retida para compatibilidade com versões anteriores, mas não é recomendada para o novo desenvolvimento. 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 se typeName não for encontrado. O valor retornado precisa ser desembrulhado para acessar o objeto real.
Implementações
- Atributos
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 herda.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 com duas evidências diferentes.
Esta instância é null.
Comentários
O construtor sem parâmetros para typeName o qual é invocado.
Para obter mais informações sobre esse método, consulte o Activator.CreateInstanceFrom método.
Quando o CreateInstanceFrom método é usado para criar uma instância em um domínio de aplicativo de destino, além do domínio do aplicativo do qual a chamada é feita, o assembly é carregado no domínio do aplicativo de destino. No entanto, se a instância for desembrulhada no domínio de aplicativo de chamada, usar a instância desembrulhada de determinadas maneiras poderá fazer com que o assembly seja carregado no domínio do aplicativo de chamada. Por exemplo, depois que a instância for desembrulhada, suas informações de tipo poderão ser solicitadas, a fim de chamar seus métodos com limite tardio. Quando o assembly é carregado no domínio de aplicativo de chamada, podem ocorrer exceções.
Se outra versão do mesmo assembly tiver sido carregada anteriormente no domínio de aplicativo de chamada ou se o caminho de carga do domínio de aplicativo de chamada for diferente do domínio do aplicativo de destino, exceções como MissingMethodException podem ocorrer.
Se o domínio de aplicativo de chamada fizer chamadas com limite antecipado para o tipo de instância, InvalidCastException poderá ser gerada quando for feita uma tentativa de converter a instância.
Confira também
Aplica-se a
CreateInstanceFrom(String, String)
- Origem:
- AppDomain.cs
- Origem:
- AppDomain.cs
- 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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")]
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom(string assemblyFile, string typeName);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom(string assemblyFile, string typeName);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom(string assemblyFile, string typeName);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")>]
member this.CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
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, incluindo o caminho, de um arquivo que contém um assembly que define o tipo solicitado. O assembly é carregado usando o LoadFrom(String) método.
- typeName
- String
O nome totalmente qualificado do tipo solicitado, incluindo o namespace, mas não o assembly, conforme retornado pela FullName propriedade.
Retornos
Um objeto que é um wrapper para a nova instância ou null se typeName não for encontrado. O valor retornado precisa ser desembrulhado para acessar o objeto real.
Implementações
- Atributos
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.
Nenhum construtor público sem parâmetros 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 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 de 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 de 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 o carregamento do assembly chamado no domínio do aplicativo do chamador é que o chamador deriva MarshalByRefObject da classe e defina um método que pode ser executado no domínio do aplicativo de destino. Esse método pode usar a reflexão para examinar um assembly de destino, pois o assembly de destino já está carregado no domínio do aplicativo de destino. Veja 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 o qual é invocado.
Para obter mais informações, consulte o Activator.CreateInstanceFrom método.
Quando o CreateInstanceFrom método é usado para criar uma instância em um domínio de aplicativo de destino, além do domínio do aplicativo do qual a chamada é feita, o assembly é carregado no domínio do aplicativo de destino. No entanto, se a instância for desembrulhada no domínio de aplicativo de chamada, usar a instância desembrulhada de determinadas maneiras poderá fazer com que o assembly seja carregado no domínio do aplicativo de chamada. Por exemplo, depois que a instância for desembrulhada, suas informações de tipo poderão ser solicitadas, a fim de chamar seus métodos com limite tardio. Quando o assembly é carregado no domínio de aplicativo de chamada, podem ocorrer exceções.
Se outra versão do mesmo assembly tiver sido carregada anteriormente no domínio de aplicativo de chamada ou se o caminho de carga do domínio de aplicativo de chamada for diferente do domínio do aplicativo de destino, exceções como MissingMethodException podem ocorrer.
Se o domínio de aplicativo de chamada fizer chamadas com limite antecipado para o tipo de instância, InvalidCastException poderá ser gerada quando for feita uma tentativa de converter a instância.