AppDomain.CreateInstanceFrom Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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
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
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
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.