AppDomain.CreateInstanceFrom Metodo

Definizione

Crea una nuova istanza di un tipo specificato definito nel file di assembly specificato.

Overload

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

Crea una nuova istanza del tipo specificato definito nel file di assembly specificato.

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

Crea una nuova istanza del tipo specificato definito nel file di assembly specificato.

CreateInstanceFrom(String, String, Object[])

Crea una nuova istanza del tipo specificato definito nel file di assembly specificato.

CreateInstanceFrom(String, String)

Crea una nuova istanza del tipo specificato definito nel file di assembly specificato.

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

Attenzione

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

Crea una nuova istanza del tipo specificato definito nel file di assembly specificato.

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

Parametri

assemblyFile
String

Nome di un file, comprensivo di percorso, contenente un assembly in cui viene definito il tipo richiesto. L'assembly viene caricato utilizzando il metodo LoadFrom(String).

typeName
String

Nome completo del tipo richiesto, compreso lo spazio dei nomi ed escluso l'assembly, restituito dalla proprietà FullName.

ignoreCase
Boolean

Valore booleano che indica se deve o meno essere eseguita una ricerca con distinzione tra maiuscole e minuscole.

bindingAttr
BindingFlags

Combinazione di zero o più flag di bit che influiscono sulla ricerca del costruttore typeName. Se bindingAttr è uguale a zero, verrà eseguita una ricerca di costruttori pubblici con distinzione tra maiuscole e minuscole.

binder
Binder

Oggetto che consente l'associazione, la coercizione di tipi di argomento, la chiamata di membri e il recupero di oggetti MemberInfo tramite la reflection. Se binder è Null, verrà usato il binder predefinito.

args
Object[]

Argomenti da passare al costruttore. La matrice di argomenti deve corrispondere ai parametri del costruttore da richiamare in quanto a numero, ordine e tipo. Per usare il costruttore senza parametri, args deve essere una matrice vuota o Null.

culture
CultureInfo

Informazioni specifiche delle impostazioni cultura che regolano la coercizione di args ai tipi formali dichiarati per il costruttore typeName. Se culture è null, per il thread corrente verrà usato l'oggetto CultureInfo.

activationAttributes
Object[]

Matrice di uno o più attributi che possono prendere parte all'attivazione. In genere, matrice che contiene un singolo oggetto UrlAttribute che specifica l'URL necessario per attivare un oggetto remoto.

Il parametro è correlato agli oggetti attivati dal client. L'attivazione del client è una tecnologia legacy mantenuta per garantire la compatibilità con le versioni precedenti, ma non è consigliata per nuove attività di sviluppo. Per le applicazioni distribuite si dovrebbe usare invece Windows Communication Foundation.

securityAttributes
Evidence

Informazioni usate per autorizzare la creazione di typeName.

Restituisce

Wrapper per la nuova istanza oppure null se typeName non viene trovato. Per accedere all'oggetto reale è necessario rimuovere il wrapping del valore restituito.

Implementazioni

Attributi

Eccezioni

assemblyFile è null.

-oppure-

typeName è null.

Il chiamante non può fornire attributi di attivazione per un oggetto che non eredita da MarshalByRefObject.

-oppure-

securityAttributes non è null. Quando i criteri di sicurezza dall'accesso di codice legacy non sono abilitati, securityAttributes deve essere null.

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Il parametro assemblyFile non è stato trovato.

Non è possibile trovare typeName in assemblyFile.

Non è stato trovato alcun costruttore pubblico corrispondente.

Il chiamante non ha autorizzazioni sufficienti per chiamare il costruttore.

assemblyFile non è un assembly valido per il runtime attualmente caricato.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.

Questa istanza è null.

Commenti

Per altre informazioni su questo metodo, vedere il Activator.CreateInstanceFrom metodo .

Quando il CreateInstanceFrom metodo viene usato per creare un'istanza in un dominio applicazione di destinazione, diverso dal dominio dell'applicazione da cui viene eseguita la chiamata, l'assembly viene caricato nel dominio dell'applicazione di destinazione. Tuttavia, se l'istanza viene annullata nel dominio dell'applicazione chiamante, l'uso dell'istanza nonwrapped in determinati modi può causare il caricamento dell'assembly nel dominio applicazione chiamante. Ad esempio, dopo che l'istanza viene annullata, le informazioni sul tipo potrebbero essere richieste, per chiamare i metodi associati in ritardo. Quando l'assembly viene caricato nel dominio dell'applicazione chiamante, possono verificarsi eccezioni.

  • Se un'altra versione dello stesso assembly è stata caricata in precedenza nel dominio applicazione chiamante o se il percorso di caricamento del dominio applicazione chiamante è diverso da quello del dominio dell'applicazione di destinazione, eccezioni MissingMethodException come possono verificarsi.

  • Se il dominio applicazione chiamante effettua chiamate iniziali al tipo di istanza, InvalidCastException può essere generato quando viene eseguito un tentativo di cast dell'istanza.

Vedi anche

Si applica a

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

Origine:
AppDomain.cs
Origine:
AppDomain.cs
Origine:
AppDomain.cs

Crea una nuova istanza del tipo specificato definito nel file di assembly specificato.

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

Parametri

assemblyFile
String

Nome di un file, comprensivo di percorso, contenente un assembly in cui viene definito il tipo richiesto. L'assembly viene caricato utilizzando il metodo LoadFrom(String).

typeName
String

Nome completo del tipo richiesto, compreso lo spazio dei nomi ed escluso l'assembly, restituito dalla proprietà FullName.

ignoreCase
Boolean

Valore booleano che indica se deve o meno essere eseguita una ricerca con distinzione tra maiuscole e minuscole.

bindingAttr
BindingFlags

Combinazione di zero o più flag di bit che influiscono sulla ricerca del costruttore typeName. Se bindingAttr è uguale a zero, verrà eseguita una ricerca di costruttori pubblici con distinzione tra maiuscole e minuscole.

binder
Binder

Oggetto che consente l'associazione, la coercizione di tipi di argomento, la chiamata di membri e il recupero di oggetti MemberInfo tramite la reflection. Se binder è Null, verrà usato il binder predefinito.

args
Object[]

Argomenti da passare al costruttore. La matrice di argomenti deve corrispondere ai parametri del costruttore da richiamare in quanto a numero, ordine e tipo. Per usare il costruttore senza parametri, args deve essere una matrice vuota o Null.

culture
CultureInfo

Informazioni specifiche delle impostazioni cultura che regolano la coercizione di args ai tipi formali dichiarati per il costruttore typeName. Se culture è null, per il thread corrente verrà usato l'oggetto CultureInfo.

activationAttributes
Object[]

Matrice di uno o più attributi che possono prendere parte all'attivazione. In genere, matrice che contiene un singolo oggetto UrlAttribute che specifica l'URL necessario per attivare un oggetto remoto.

Il parametro è correlato agli oggetti attivati dal client. L'attivazione del client è una tecnologia legacy mantenuta per garantire la compatibilità con le versioni precedenti, ma non è consigliata per nuove attività di sviluppo. Per le applicazioni distribuite si dovrebbe usare invece Windows Communication Foundation.

Restituisce

Wrapper per la nuova istanza oppure null se typeName non viene trovato. Per accedere all'oggetto reale è necessario rimuovere il wrapping del valore restituito.

Eccezioni

assemblyFile è null.

-oppure-

typeName è null.

Il chiamante non può fornire attributi di attivazione per un oggetto che non eredita da MarshalByRefObject.

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Il parametro assemblyFile non è stato trovato.

Non è possibile trovare typeName in assemblyFile.

Non è stato trovato alcun costruttore pubblico corrispondente.

Il chiamante non ha autorizzazioni sufficienti per chiamare il costruttore.

assemblyFile non è un assembly valido per il runtime attualmente caricato.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.

Questa istanza è null.

Commenti

Per altre informazioni, vedere il metodo Activator.CreateInstanceFrom.

Quando il CreateInstanceFrom metodo viene usato per creare un'istanza in un dominio applicazione di destinazione, diverso dal dominio dell'applicazione da cui viene eseguita la chiamata, l'assembly viene caricato nel dominio dell'applicazione di destinazione. Tuttavia, se l'istanza viene annullata nel dominio dell'applicazione chiamante, l'uso dell'istanza nonwrapped in determinati modi può causare il caricamento dell'assembly nel dominio applicazione chiamante. Ad esempio, dopo che l'istanza viene annullata, le informazioni sul tipo potrebbero essere richieste, per chiamare i metodi associati in ritardo. Quando l'assembly viene caricato nel dominio dell'applicazione chiamante, possono verificarsi eccezioni.

  • Se un'altra versione dello stesso assembly è stata caricata in precedenza nel dominio applicazione chiamante o se il percorso di caricamento del dominio applicazione chiamante è diverso da quello del dominio dell'applicazione di destinazione, eccezioni MissingMethodException come possono verificarsi.

  • Se il dominio applicazione chiamante effettua chiamate iniziali al tipo di istanza, InvalidCastException può essere generato quando viene eseguito un tentativo di cast dell'istanza.

Vedi anche

Si applica a

CreateInstanceFrom(String, String, Object[])

Origine:
AppDomain.cs
Origine:
AppDomain.cs
Origine:
AppDomain.cs

Crea una nuova istanza del tipo specificato definito nel file di assembly specificato.

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

Parametri

assemblyFile
String

Nome di un file, comprensivo di percorso, contenente un assembly in cui viene definito il tipo richiesto. L'assembly viene caricato utilizzando il metodo LoadFrom(String).

typeName
String

Nome completo del tipo richiesto, compreso lo spazio dei nomi ed escluso l'assembly, restituito dalla proprietà FullName.

activationAttributes
Object[]

Matrice di uno o più attributi che possono prendere parte all'attivazione. In genere, matrice che contiene un singolo oggetto UrlAttribute che specifica l'URL necessario per attivare un oggetto remoto.

Il parametro è correlato agli oggetti attivati dal client. L'attivazione del client è una tecnologia legacy mantenuta per garantire la compatibilità con le versioni precedenti, ma non è consigliata per nuove attività di sviluppo. Per le applicazioni distribuite si dovrebbe usare invece Windows Communication Foundation.

Restituisce

Wrapper per la nuova istanza oppure null se typeName non viene trovato. Per accedere all'oggetto reale è necessario rimuovere il wrapping del valore restituito.

Implementazioni

Eccezioni

assemblyFile è null.

Il parametro assemblyFile non è stato trovato.

Non è possibile trovare typeName in assemblyFile.

Il chiamante non ha autorizzazioni sufficienti per chiamare il costruttore.

Non è stato trovato alcun costruttore pubblico corrispondente.

Il chiamante non può fornire attributi di attivazione per un oggetto che non eredita da MarshalByRefObject.

L'operazione viene tentata in un dominio dell'applicazione non caricato.

assemblyFile non è un assembly valido per il runtime attualmente caricato.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.

Questa istanza è null.

Commenti

Viene richiamato il costruttore senza parametri per typeName .

Per altre informazioni su questo metodo, vedere il Activator.CreateInstanceFrom metodo .

Quando il CreateInstanceFrom metodo viene usato per creare un'istanza in un dominio applicazione di destinazione, diverso dal dominio dell'applicazione da cui viene effettuata la chiamata, l'assembly viene caricato nel dominio dell'applicazione di destinazione. Tuttavia, se l'istanza viene annullata nel dominio dell'applicazione chiamante, l'uso dell'istanza non di cui è stato fatto il wrapping può causare il caricamento dell'assembly nel dominio applicazione chiamante. Ad esempio, dopo l'annullamento del wrapping dell'istanza, è possibile che vengano richieste le informazioni sul tipo per chiamare i relativi metodi con associazione tardiva. Quando l'assembly viene caricato nel dominio applicazione chiamante, possono verificarsi eccezioni.

  • Se un'altra versione dello stesso assembly è stata caricata in precedenza nel dominio applicazione chiamante o se il percorso di caricamento del dominio applicazione chiamante è diverso da quello del dominio applicazione di destinazione, possono verificarsi eccezioni, MissingMethodException ad esempio.

  • Se il dominio applicazione chiamante effettua chiamate con associazione anticipata al tipo di istanza, InvalidCastException può essere generata quando viene effettuato un tentativo di eseguire il cast dell'istanza.

Vedi anche

Si applica a

CreateInstanceFrom(String, String)

Origine:
AppDomain.cs
Origine:
AppDomain.cs
Origine:
AppDomain.cs

Crea una nuova istanza del tipo specificato definito nel file di assembly specificato.

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

Parametri

assemblyFile
String

Nome di un file, comprensivo di percorso, contenente un assembly in cui viene definito il tipo richiesto. L'assembly viene caricato utilizzando il metodo LoadFrom(String).

typeName
String

Nome completo del tipo richiesto, compreso lo spazio dei nomi ed escluso l'assembly, restituito dalla proprietà FullName.

Restituisce

Wrapper per la nuova istanza oppure null se typeName non viene trovato. Per accedere all'oggetto reale è necessario rimuovere il wrapping del valore restituito.

Implementazioni

Eccezioni

assemblyFile è null.

-oppure-

typeName è null.

Il parametro assemblyFile non è stato trovato.

Non è possibile trovare typeName in assemblyFile.

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Non è stato trovato alcun costruttore pubblico senza parametri.

Il chiamante non ha autorizzazioni sufficienti per chiamare il costruttore.

assemblyFile non è un assembly valido per il runtime attualmente caricato.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.

Questa istanza è null.

Esempio

Nell'esempio seguente viene illustrato come usare l'overload del CreateInstanceFrom(String, String) metodo per creare un'istanza di un oggetto in un dominio applicazione di destinazione e chiamare i relativi metodi.

L'esempio definisce la MarshalableExample classe , che può essere sottoposto a marshalling tra i limiti del dominio applicazione. Nell'esempio viene compilato un percorso dell'assembly attualmente in esecuzione, viene creato un dominio applicazione di destinazione e viene usato l'overload del CreateInstanceFrom(String, String) metodo per caricare l'assembly di esempio nel dominio dell'applicazione di destinazione e creare un'istanza di MarshalableExample.

Nota

Il percorso è assoluto in questo esempio, ma un percorso relativo funziona anche perché il Assembly.LoadFrom metodo viene usato per caricare l'assembly.

Dopo l'annullamento del wrapping dell'handle dell'oggetto, nell'esempio vengono illustrati tre modi per usare un oggetto in un dominio applicazione di destinazione:

  • Richiamare un metodo con associazione tardiva, usando la reflection. Ciò richiede informazioni sul tipo, che causa il caricamento dell'assembly nel dominio dell'applicazione del chiamante. In questo esempio è già caricato.

  • Cast dell'oggetto in un'interfaccia nota sia al chiamante che al chiamato. Se l'interfaccia è definita nell'assembly chiamante o in un terzo assembly a cui fa riferimento sia il chiamante che il chiamato, l'assembly chiamato non viene caricato nel dominio applicazione del chiamante.

  • Utilizzo diretto dell'oggetto quando il tipo è noto al chiamante. L'assembly deve essere caricato nel dominio dell'applicazione del chiamante.

Un altro modo per evitare di caricare l'assembly chiamato nel dominio applicazione del chiamante consiste nel fatto che il chiamante possa derivare dalla MarshalByRefObject classe e definire un metodo che può essere eseguito nel dominio dell'applicazione di destinazione. Tale metodo può usare la reflection per esaminare un assembly di destinazione, perché l'assembly di destinazione è già caricato nel dominio dell'applicazione di destinazione. Vedere l'esempio per la DynamicDirectory proprietà .

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'!

Commenti

Viene richiamato il costruttore senza parametri per typeName .

Per altre informazioni, vedere il metodo Activator.CreateInstanceFrom.

Quando il CreateInstanceFrom metodo viene usato per creare un'istanza in un dominio applicazione di destinazione, diverso dal dominio dell'applicazione da cui viene effettuata la chiamata, l'assembly viene caricato nel dominio dell'applicazione di destinazione. Tuttavia, se l'istanza viene annullata nel dominio dell'applicazione chiamante, l'uso dell'istanza non di cui è stato fatto il wrapping può causare il caricamento dell'assembly nel dominio applicazione chiamante. Ad esempio, dopo l'annullamento del wrapping dell'istanza, è possibile che vengano richieste le informazioni sul tipo per chiamare i relativi metodi con associazione tardiva. Quando l'assembly viene caricato nel dominio applicazione chiamante, possono verificarsi eccezioni.

  • Se un'altra versione dello stesso assembly è stata caricata in precedenza nel dominio applicazione chiamante o se il percorso di caricamento del dominio applicazione chiamante è diverso da quello del dominio applicazione di destinazione, possono verificarsi eccezioni, MissingMethodException ad esempio.

  • Se il dominio applicazione chiamante effettua chiamate con associazione anticipata al tipo di istanza, InvalidCastException può essere generata quando viene effettuato un tentativo di eseguire il cast dell'istanza.

Vedi anche

Si applica a