AppDomain.CreateInstanceFrom Método

Definição

Cria uma nova instância de um tipo especificado definido no ficheiro de montagem especificado.

Sobrecargas

Name Description
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
Obsoleto.

Cria uma nova instância do tipo especificado definido no ficheiro assembly especificado.

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

Cria uma nova instância do tipo especificado definido no ficheiro assembly especificado.

CreateInstanceFrom(String, String, Object[])

Cria uma nova instância do tipo especificado definido no ficheiro assembly especificado.

CreateInstanceFrom(String, String)

Cria uma nova instância do tipo especificado definido no ficheiro assembly especificado.

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

Atenção

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 ficheiro 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 ficheiro que contém um assembly que define o tipo solicitado. O conjunto é carregado usando o LoadFrom(String) método.

typeName
String

O nome totalmente qualificado do tipo solicitado, incluindo o espaço de nomes mas não a assembleia, conforme devolvido pela FullName propriedade.

ignoreCase
Boolean

Um valor Booleano que especifica se deve realizar ou não uma pesquisa sensível a maiúsculas e minúsculas.

bindingAttr
BindingFlags

Uma combinação de zero ou mais flags de bits que afetam a pesquisa pelo typeName construtor. Se bindingAttr for zero, é realizada uma pesquisa sensível a maiúsculas minúsculas por construtores públicos.

binder
Binder

Um objeto que permite a ligação, coerção de tipos de argumentos, invocação de membros e recuperação de MemberInfo objetos através da reflexão. Se binder for nulo, utiliza-se o dossier padrão.

args
Object[]

Os argumentos para passar ao construtor. Este array de argumentos deve coincidir em número, ordem e tipo dos parâmetros do construtor a invocar. Se o construtor sem parâmetros for preferido, args deve ser um array vazio ou nulo.

culture
CultureInfo

Informação específica da cultura que governa a coerção dos args tipos formais declarados para o typeName construtor. Se culture for null, é usado o CultureInfo para a thread atual.

activationAttributes
Object[]

Um conjunto de um ou mais atributos que podem participar na ativação. Normalmente, um array que contém um único UrlAttribute objeto que especifica a URL necessária para ativar um objeto remoto.

Este parâmetro está relacionado com objetos ativados pelo cliente. A ativação por clientes é uma tecnologia legada que é mantida para compatibilidade retroativa, mas não é recomendada para novos desenvolvimentos. As aplicações distribuídas deveriam antes usar o Windows Communication Foundation.

securityAttributes
Evidence

Informação usada para autorizar a criação de typeName.

Devoluções

Um objeto que é um wrapper para a nova instância, ou null se typeName não for encontrado. O valor de retorno precisa de ser desembrulhado para aceder ao objeto real.

Implementações

Atributos

Exceções

assemblyFile é null.

-ou-

typeName é null.

O chamador não pode fornecer atributos de ativação para um objeto que não herde de MarshalByRefObject.

-ou-

securityAttributes não nullé . Quando a política CAS legada não está ativada, securityAttributes deve ser null.

A operação é tentada num domínio de aplicação não carregado.

assemblyFile não foi encontrado.

typeName não foi encontrado em assemblyFile.

Não foi encontrado nenhum construtor público correspondente.

O chamador não tem permissão suficiente para chamar este construtor.

assemblyFile não é uma assembly válida para o runtime atualmente carregado.

Um conjunto ou módulo foi carregado duas vezes com duas evidências diferentes.

Esta instância é null.

Observações

Para mais informações sobre este método, consulte o Activator.CreateInstanceFrom método.

Quando o CreateInstanceFrom método é usado para criar uma instância num domínio de aplicação de destino, diferente do domínio de aplicação de onde a chamada é feita, o assembly é carregado no domínio de aplicação de destino. No entanto, se a instância for desembrulhada no domínio de aplicação que chama, usar a instância desembrulhada de certas formas pode fazer com que o assembly seja carregado no domínio de aplicação que chama. Por exemplo, depois de a instância ser desdobrada, pode ser solicitada a sua informação de tipo, para chamar os seus métodos de late-bound. Quando o assembly é carregado no domínio de aplicação chamador, podem ocorrer exceções.

  • Se outra versão do mesmo assembly tiver sido previamente carregada no domínio de aplicação que chama, ou se o caminho de carregamento do domínio de aplicação chamador for diferente do domínio de aplicação de destino, podem ocorrer exceções como MissingMethodException .

  • Se o domínio de aplicação que chama fizer chamadas de ligação antecipada ao tipo de instância, InvalidCastException pode ser lançado quando se tenta lançar a instância.

Ver também

Aplica-se a

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

Cria uma nova instância do tipo especificado definido no ficheiro 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);
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 ficheiro que contém um assembly que define o tipo solicitado. O conjunto é carregado usando o LoadFrom(String) método.

typeName
String

O nome totalmente qualificado do tipo solicitado, incluindo o espaço de nomes mas não a assembleia, conforme devolvido pela FullName propriedade.

ignoreCase
Boolean

Um valor Booleano que especifica se deve realizar ou não uma pesquisa sensível a maiúsculas e minúsculas.

bindingAttr
BindingFlags

Uma combinação de zero ou mais flags de bits que afetam a pesquisa pelo typeName construtor. Se bindingAttr for zero, é realizada uma pesquisa sensível a maiúsculas minúsculas por construtores públicos.

binder
Binder

Um objeto que permite a ligação, coerção de tipos de argumentos, invocação de membros e recuperação de MemberInfo objetos através da reflexão. Se binder for nulo, utiliza-se o dossier padrão.

args
Object[]

Os argumentos para passar ao construtor. Este array de argumentos deve coincidir em número, ordem e tipo dos parâmetros do construtor a invocar. Se o construtor sem parâmetros for preferido, args deve ser um array vazio ou nulo.

culture
CultureInfo

Informação específica da cultura que governa a coerção dos args tipos formais declarados para o typeName construtor. Se culture for null, é usado o CultureInfo para a thread atual.

activationAttributes
Object[]

Um conjunto de um ou mais atributos que podem participar na ativação. Normalmente, um array que contém um único UrlAttribute objeto que especifica a URL necessária para ativar um objeto remoto.

Este parâmetro está relacionado com objetos ativados pelo cliente. A ativação por clientes é uma tecnologia legada que é mantida para compatibilidade retroativa, mas não é recomendada para novos desenvolvimentos. As aplicações distribuídas deveriam antes usar o Windows Communication Foundation.

Devoluções

Um objeto que é um wrapper para a nova instância, ou null se typeName não for encontrado. O valor de retorno precisa de ser desembrulhado para aceder ao objeto real.

Exceções

assemblyFile é null.

-ou-

typeName é null.

O chamador não pode fornecer atributos de ativação para um objeto que não herde de MarshalByRefObject.

A operação é tentada num domínio de aplicação não carregado.

assemblyFile não foi encontrado.

typeName não foi encontrado em assemblyFile.

Não foi encontrado nenhum construtor público correspondente.

O chamador não tem permissão suficiente para chamar este construtor.

assemblyFile não é uma assembly válida para o runtime atualmente carregado.

Um conjunto ou módulo foi carregado duas vezes com duas evidências diferentes.

Esta instância é null.

Observações

Para obter mais informações, consulte o método Activator.CreateInstanceFrom.

Quando o CreateInstanceFrom método é usado para criar uma instância num domínio de aplicação de destino, diferente do domínio de aplicação de onde a chamada é feita, o assembly é carregado no domínio de aplicação de destino. No entanto, se a instância for desembrulhada no domínio de aplicação que chama, usar a instância desembrulhada de certas formas pode fazer com que o assembly seja carregado no domínio de aplicação que chama. Por exemplo, depois de a instância ser desdobrada, pode ser solicitada a sua informação de tipo, para chamar os seus métodos de late-bound. Quando o assembly é carregado no domínio de aplicação chamador, podem ocorrer exceções.

  • Se outra versão do mesmo assembly tiver sido previamente carregada no domínio de aplicação que chama, ou se o caminho de carregamento do domínio de aplicação chamador for diferente do domínio de aplicação de destino, podem ocorrer exceções como MissingMethodException .

  • Se o domínio de aplicação que chama fizer chamadas de ligação antecipada ao tipo de instância, InvalidCastException pode ser lançado quando se tenta lançar a instância.

Ver também

Aplica-se a

CreateInstanceFrom(String, String, Object[])

Cria uma nova instância do tipo especificado definido no ficheiro assembly especificado.

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);
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 ficheiro que contém um assembly que define o tipo solicitado. O conjunto é carregado usando o LoadFrom(String) método.

typeName
String

O nome totalmente qualificado do tipo solicitado, incluindo o espaço de nomes mas não a assembleia, conforme devolvido pela FullName propriedade.

activationAttributes
Object[]

Um conjunto de um ou mais atributos que podem participar na ativação. Normalmente, um array que contém um único UrlAttribute objeto que especifica a URL necessária para ativar um objeto remoto.

Este parâmetro está relacionado com objetos ativados pelo cliente. A ativação por cliente é uma tecnologia legada que é mantida para compatibilidade retroativa, mas não é recomendada para novos desenvolvimentos. As aplicações distribuídas deveriam antes usar o Windows Communication Foundation.

Devoluções

Um objeto que é um wrapper para a nova instância, ou null se typeName não for encontrado. O valor de retorno precisa de ser desembrulhado para aceder ao 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 este construtor.

Não foi encontrado nenhum construtor público correspondente.

O chamador não pode fornecer atributos de ativação para um objeto que não herde de MarshalByRefObject.

A operação é tentada num domínio de aplicação não carregado.

assemblyFile não é uma assembly válida para o runtime atualmente carregado.

Um conjunto ou módulo foi carregado duas vezes com duas evidências diferentes.

Esta instância é null.

Observações

O construtor sem parâmetros para typeName é invocado.

Para mais informações sobre este método, consulte o Activator.CreateInstanceFrom método.

Quando o CreateInstanceFrom método é usado para criar uma instância num domínio de aplicação de destino, diferente do domínio de aplicação de onde a chamada é feita, o assembly é carregado no domínio de aplicação de destino. No entanto, se a instância for desembrulhada no domínio de aplicação que chama, usar a instância desembrulhada de certas formas pode fazer com que o assembly seja carregado no domínio de aplicação que chama. Por exemplo, depois de a instância ser desdobrada, pode ser solicitada a sua informação de tipo, para chamar os seus métodos de late-bound. Quando o assembly é carregado no domínio de aplicação chamador, podem ocorrer exceções.

  • Se outra versão do mesmo assembly tiver sido previamente carregada no domínio de aplicação que chama, ou se o caminho de carregamento do domínio de aplicação chamador for diferente do domínio de aplicação de destino, podem ocorrer exceções como MissingMethodException .

  • Se o domínio de aplicação que chama fizer chamadas de ligação antecipada ao tipo de instância, InvalidCastException pode ser lançado quando se tenta lançar a instância.

Ver também

Aplica-se a

CreateInstanceFrom(String, String)

Cria uma nova instância do tipo especificado definido no ficheiro assembly especificado.

public:
 virtual System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom(string assemblyFile, string typeName);
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 ficheiro que contém um assembly que define o tipo solicitado. O conjunto é carregado usando o LoadFrom(String) método.

typeName
String

O nome totalmente qualificado do tipo solicitado, incluindo o espaço de nomes mas não a assembleia, conforme devolvido pela FullName propriedade.

Devoluções

Um objeto que é um wrapper para a nova instância, ou null se typeName não for encontrado. O valor de retorno precisa de ser desembrulhado para aceder ao objeto real.

Implementações

Exceções

assemblyFile é null.

-ou-

typeName é null.

assemblyFile não foi encontrado.

typeName não foi encontrado em assemblyFile.

A operação é tentada num domínio de aplicação não carregado.

Não foi encontrado nenhum construtor público sem parâmetros.

O chamador não tem permissão suficiente para chamar este construtor.

assemblyFile não é uma assembly válida para o runtime atualmente carregado.

Um conjunto ou módulo foi carregado duas vezes com duas evidências diferentes.

Esta instância é null.

Exemplos

O exemplo seguinte mostra como usar a CreateInstanceFrom(String, String) sobrecarga de métodos para criar uma instância de um objeto num domínio de aplicação alvo e chamar os seus métodos.

O exemplo define a MarshalableExample classe, que pode ser organizada através dos limites do domínio da aplicação. O exemplo constrói um caminho para o assembly atualmente em execução, cria um domínio de aplicação alvo e usa a CreateInstanceFrom(String, String) sobrecarga de métodos para carregar o assembly de exemplo no domínio de aplicação alvo e criar uma instância de MarshalableExample.

Note

O caminho é absoluto neste exemplo, mas um caminho relativo também funcionaria porque o Assembly.LoadFrom método é usado para carregar a montagem.

Após desembrulhar o handle do objeto, o exemplo demonstra três formas de usar um objeto num domínio de aplicação alvo:

  • Invocar um método com ligação tardia, usando reflexão. Isto requer informação de tipos, o que faz com que a assembly seja carregada no domínio de aplicação do chamador. (Neste exemplo, já está carregado.)

  • Conjurar o objeto para uma interface conhecida tanto pelo chamador como pelo chamado. Se a interface estiver definida no assembly de chamada ou num terceiro assembly referenciado tanto pelo chamador como pelo chamado, o assembly chamado não é carregado no domínio de aplicação do chamador.

  • Usar o objeto diretamente quando o seu tipo é conhecido pelo chamador. O assembly deve ser carregado no domínio de aplicação do chamador.

Outra forma de evitar carregar o assembly chamado no domínio de aplicação do chamador é o chamador derivar da MarshalByRefObject classe e definir um método que possa ser executado no domínio de aplicação de destino. Esse método pode usar reflexão para examinar uma montagem alvo, porque a montagem alvo já está carregada no domínio de aplicação alvo. 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'!

Observações

O construtor sem parâmetros para typeName é invocado.

Para obter mais informações, consulte o método Activator.CreateInstanceFrom.

Quando o CreateInstanceFrom método é usado para criar uma instância num domínio de aplicação de destino, diferente do domínio de aplicação de onde a chamada é feita, o assembly é carregado no domínio de aplicação de destino. No entanto, se a instância for desembrulhada no domínio de aplicação que chama, usar a instância desembrulhada de certas formas pode fazer com que o assembly seja carregado no domínio de aplicação que chama. Por exemplo, depois de a instância ser desdobrada, pode ser solicitada a sua informação de tipo, para chamar os seus métodos de late-bound. Quando o assembly é carregado no domínio de aplicação chamador, podem ocorrer exceções.

  • Se outra versão do mesmo assembly tiver sido previamente carregada no domínio de aplicação que chama, ou se o caminho de carregamento do domínio de aplicação chamador for diferente do domínio de aplicação de destino, podem ocorrer exceções como MissingMethodException .

  • Se o domínio de aplicação que chama fizer chamadas de ligação antecipada ao tipo de instância, InvalidCastException pode ser lançado quando se tenta lançar a instância.

Ver também

Aplica-se a