AppDomain.CreateInstanceFrom Método

Definição

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

assemblyFile é null.

- ou -

typeName é null.

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

assemblyFile é null.

- ou -

typeName é null.

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 é null.

- ou -

typeName é null.

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.

Confira também

Aplica-se a