AppDomain.CreateInstanceFrom Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Tworzy nowe wystąpienie danego typu zdefiniowane w określonym pliku zestawu.
Przeciążenia
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) |
Przestarzałe.
Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu. |
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) |
Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu. |
CreateInstanceFrom(String, String, Object[]) |
Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu. |
CreateInstanceFrom(String, String) |
Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu. |
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
Przestroga
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.
Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu.
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
Parametry
- assemblyFile
- String
Nazwa (łącznie ze ścieżką) pliku zawierającego zestaw, który definiuje żądany typ. Zestaw jest ładowany przy użyciu LoadFrom(String) metody .
- typeName
- String
W pełni kwalifikowana nazwa żądanego typu, w tym przestrzeń nazw, ale nie zestaw, zwracana przez FullName właściwość .
- ignoreCase
- Boolean
Wartość logiczna określająca, czy w wyszukiwaniu ma być uwzględniana wielkość liter czy nie.
- bindingAttr
- BindingFlags
Kombinacja flag zero lub więcej bitów, które wpływają na wyszukiwanie konstruktora typeName
. Jeśli bindingAttr
wartość jest równa zero, przeprowadzane jest wyszukiwanie konstruktorów publicznych z uwzględnieniem wielkości liter.
- binder
- Binder
Obiekt, który umożliwia powiązanie, przymus typów argumentów, wywołanie elementów członkowskich i pobieranie MemberInfo obiektów przez odbicie. Jeśli binder
parametr ma wartość null, jest używany domyślny binder.
- args
- Object[]
Argumenty, które mają zostać przekazane do konstruktora. Ta tablica argumentów musi pod względem liczby, kolejności i typów parametrów odpowiadać konstruktorowi, który ma zostać wywołany. Jeśli preferowany jest konstruktor bez parametrów, args
musi być pustą tablicą lub wartością null.
- culture
- CultureInfo
Informacje specyficzne dla kultury, które regulują przymus do args
typów formalnych zadeklarowanych dla konstruktora typeName
. Jeśli culture
parametr ma null
wartość , CultureInfo jest używany dla bieżącego wątku.
- activationAttributes
- Object[]
Tablica jednego lub więcej atrybutów, które mogą brać udział w aktywacji. Zazwyczaj tablica zawierająca pojedynczy UrlAttribute obiekt, który określa adres URL wymagany do aktywowania obiektu zdalnego.
Ten parametr jest związany z obiektami aktywowanymi przez klienta. Aktywacja klienta to starsza technologia, która jest przechowywana w celu zapewnienia zgodności z poprzednimi wersjami, ale nie jest zalecana w przypadku nowego programowania. Aplikacje rozproszone powinny zamiast tego używać programu Windows Communication Foundation.
- securityAttributes
- Evidence
Informacje używane do autoryzowania tworzenia elementu typeName
.
Zwraca
Obiekt, który jest otoką dla nowego wystąpienia lub null
jeśli typeName
nie zostanie znaleziony. Zwracana wartość musi być bez otoki, aby miała dostęp do rzeczywistego obiektu.
Implementuje
- Atrybuty
Wyjątki
Obiekt wywołujący nie może podać atrybutów aktywacji dla obiektu, który nie dziedziczy z elementu MarshalByRefObject.
-lub-
securityAttributes
nie null
jest . Jeśli starsze zasady CAS nie są włączone, securityAttributes
powinna mieć wartość null
.
Próba wykonania operacji w niezaładowanej domenie aplikacji.
assemblyFile
nie można odnaleźć.
typeName
nie można odnaleźć w pliku assemblyFile
.
Nie znaleziono pasującego publicznego konstruktora.
Obiekt wywołujący nie ma wystarczających uprawnień do wywołania tego konstruktora.
assemblyFile
nie jest prawidłowym zestawem dla aktualnie załadowanego środowiska uruchomieniowego.
Zestaw lub moduł został załadowany dwukrotnie z dwoma różnymi dowodami.
To wystąpienie to null
.
Uwagi
Aby uzyskać więcej informacji na temat tej metody, zobacz metodę Activator.CreateInstanceFrom .
CreateInstanceFrom Gdy metoda jest używana do tworzenia wystąpienia w domenie aplikacji docelowej, innej niż domena aplikacji, z której jest wykonywane wywołanie, zestaw jest ładowany w domenie aplikacji docelowej. Jeśli jednak wystąpienie nie zostanie rozwinięte w domenie aplikacji wywołującej, użycie nierozwiniętych instancji w określony sposób może spowodować załadowanie zestawu do domeny aplikacji wywołującej. Na przykład po rozwinięciu danego wystąpienia można zażądać informacji o typie, aby wywołać jego metody z późnym wiązaniem. Podczas ładowania zestawu do domeny aplikacji wywołującej mogą wystąpić wyjątki.
Jeśli inna wersja tego samego zestawu została wcześniej załadowana do domeny aplikacji wywołującej lub jeśli ścieżka ładowania domeny aplikacji wywołującej różni się od tej domeny aplikacji docelowej, mogą wystąpić wyjątki, takie jak MissingMethodException .
Jeśli domena aplikacji wywołującej wykonuje wczesne wywołania typu wystąpienia, InvalidCastException może zostać zgłoszony podczas próby rzutowania wystąpienia.
Zobacz też
Dotyczy
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
- Źródło:
- AppDomain.cs
- Źródło:
- AppDomain.cs
- Źródło:
- AppDomain.cs
Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu.
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
Parametry
- assemblyFile
- String
Nazwa (łącznie ze ścieżką) pliku zawierającego zestaw, który definiuje żądany typ. Zestaw jest ładowany przy użyciu LoadFrom(String) metody .
- typeName
- String
W pełni kwalifikowana nazwa żądanego typu, w tym przestrzeń nazw, ale nie zestaw, zwracana przez FullName właściwość .
- ignoreCase
- Boolean
Wartość logiczna określająca, czy w wyszukiwaniu ma być uwzględniana wielkość liter czy nie.
- bindingAttr
- BindingFlags
Kombinacja flag zero lub więcej bitów, które wpływają na wyszukiwanie konstruktora typeName
. Jeśli bindingAttr
wartość jest równa zero, przeprowadzane jest wyszukiwanie konstruktorów publicznych z uwzględnieniem wielkości liter.
- binder
- Binder
Obiekt, który umożliwia powiązanie, przymus typów argumentów, wywołanie elementów członkowskich i pobieranie MemberInfo obiektów przez odbicie. Jeśli binder
parametr ma wartość null, jest używany domyślny binder.
- args
- Object[]
Argumenty, które mają zostać przekazane do konstruktora. Ta tablica argumentów musi pod względem liczby, kolejności i typów parametrów odpowiadać konstruktorowi, który ma zostać wywołany. Jeśli preferowany jest konstruktor bez parametrów, args
musi być pustą tablicą lub wartością null.
- culture
- CultureInfo
Informacje specyficzne dla kultury, które regulują przymus do args
typów formalnych zadeklarowanych dla konstruktora typeName
. Jeśli culture
parametr ma null
wartość , CultureInfo jest używany dla bieżącego wątku.
- activationAttributes
- Object[]
Tablica jednego lub więcej atrybutów, które mogą brać udział w aktywacji. Zazwyczaj tablica zawierająca pojedynczy UrlAttribute obiekt, który określa adres URL wymagany do aktywowania obiektu zdalnego.
Ten parametr jest związany z obiektami aktywowanymi przez klienta. Aktywacja klienta to starsza technologia, która jest przechowywana w celu zapewnienia zgodności z poprzednimi wersjami, ale nie jest zalecana w przypadku nowego programowania. Aplikacje rozproszone powinny zamiast tego używać programu Windows Communication Foundation.
Zwraca
Obiekt, który jest otoką dla nowego wystąpienia lub null
jeśli typeName
nie zostanie znaleziony. Zwracana wartość musi być bez otoki, aby miała dostęp do rzeczywistego obiektu.
Wyjątki
Obiekt wywołujący nie może podać atrybutów aktywacji dla obiektu, który nie dziedziczy z elementu MarshalByRefObject.
Próba wykonania operacji w niezaładowanej domenie aplikacji.
assemblyFile
nie można odnaleźć.
typeName
nie można odnaleźć w pliku assemblyFile
.
Nie znaleziono pasującego publicznego konstruktora.
Obiekt wywołujący nie ma wystarczających uprawnień do wywołania tego konstruktora.
assemblyFile
nie jest prawidłowym zestawem dla aktualnie załadowanego środowiska uruchomieniowego.
Zestaw lub moduł został załadowany dwukrotnie z dwoma różnymi dowodami.
To wystąpienie to null
.
Uwagi
Aby uzyskać więcej informacji, zobacz metodę Activator.CreateInstanceFrom .
CreateInstanceFrom Gdy metoda jest używana do tworzenia wystąpienia w domenie aplikacji docelowej, innej niż domena aplikacji, z której jest wykonywane wywołanie, zestaw jest ładowany w domenie aplikacji docelowej. Jeśli jednak wystąpienie nie zostanie rozwinięte w domenie aplikacji wywołującej, użycie nierozwiniętych instancji w określony sposób może spowodować załadowanie zestawu do domeny aplikacji wywołującej. Na przykład po rozwinięciu danego wystąpienia można zażądać informacji o typie, aby wywołać jego metody z późnym wiązaniem. Podczas ładowania zestawu do domeny aplikacji wywołującej mogą wystąpić wyjątki.
Jeśli inna wersja tego samego zestawu została wcześniej załadowana do domeny aplikacji wywołującej lub jeśli ścieżka ładowania domeny aplikacji wywołującej różni się od tej domeny aplikacji docelowej, mogą wystąpić wyjątki, takie jak MissingMethodException .
Jeśli domena aplikacji wywołującej wykonuje wczesne wywołania typu wystąpienia, InvalidCastException może zostać zgłoszony podczas próby rzutowania wystąpienia.
Zobacz też
Dotyczy
CreateInstanceFrom(String, String, Object[])
- Źródło:
- AppDomain.cs
- Źródło:
- AppDomain.cs
- Źródło:
- AppDomain.cs
Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu.
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
Parametry
- assemblyFile
- String
Nazwa (łącznie ze ścieżką) pliku zawierającego zestaw, który definiuje żądany typ. Zestaw jest ładowany przy użyciu LoadFrom(String) metody .
- typeName
- String
W pełni kwalifikowana nazwa żądanego typu, w tym przestrzeń nazw, ale nie zestaw, zwracana przez FullName właściwość .
- activationAttributes
- Object[]
Tablica jednego lub więcej atrybutów, które mogą brać udział w aktywacji. Zazwyczaj tablica zawierająca pojedynczy UrlAttribute obiekt, który określa adres URL wymagany do aktywowania obiektu zdalnego.
Ten parametr jest związany z obiektami aktywowanymi przez klienta. Aktywacja klienta to starsza technologia, która jest przechowywana w celu zapewnienia zgodności z poprzednimi wersjami, ale nie jest zalecana w przypadku nowego programowania. Aplikacje rozproszone powinny zamiast tego używać programu Windows Communication Foundation.
Zwraca
Obiekt, który jest otoką dla nowego wystąpienia lub null
jeśli typeName
nie zostanie znaleziony. Zwracana wartość musi być bez otoki, aby miała dostęp do rzeczywistego obiektu.
Implementuje
Wyjątki
assemblyFile
to null
.
assemblyFile
nie można odnaleźć.
typeName
nie można odnaleźć w pliku assemblyFile
.
Obiekt wywołujący nie ma wystarczających uprawnień do wywołania tego konstruktora.
Nie znaleziono pasującego publicznego konstruktora.
Obiekt wywołujący nie może podać atrybutów aktywacji dla obiektu, który nie dziedziczy z elementu MarshalByRefObject.
Próba wykonania operacji w niezaładowanej domenie aplikacji.
assemblyFile
nie jest prawidłowym zestawem dla aktualnie załadowanego środowiska uruchomieniowego.
Zestaw lub moduł został załadowany dwukrotnie z dwoma różnymi dowodami.
To wystąpienie to null
.
Uwagi
Wywoływany jest konstruktor bez parametrów dla typeName
.
Aby uzyskać więcej informacji na temat tej metody, zobacz metodę Activator.CreateInstanceFrom .
CreateInstanceFrom Gdy metoda jest używana do tworzenia wystąpienia w domenie aplikacji docelowej, innej niż domena aplikacji, z której jest wykonywane wywołanie, zestaw jest ładowany w domenie aplikacji docelowej. Jeśli jednak wystąpienie nie zostanie rozwinięte w domenie aplikacji wywołującej, użycie nierozwiniętych instancji w określony sposób może spowodować załadowanie zestawu do domeny aplikacji wywołującej. Na przykład po rozwinięciu danego wystąpienia można zażądać informacji o typie, aby wywołać jego metody z późnym wiązaniem. Podczas ładowania zestawu do domeny aplikacji wywołującej mogą wystąpić wyjątki.
Jeśli inna wersja tego samego zestawu została wcześniej załadowana do domeny aplikacji wywołującej lub jeśli ścieżka ładowania domeny aplikacji wywołującej różni się od tej domeny aplikacji docelowej, mogą wystąpić wyjątki, takie jak MissingMethodException .
Jeśli domena aplikacji wywołującej wykonuje wczesne wywołania typu wystąpienia, InvalidCastException może zostać zgłoszony podczas próby rzutowania wystąpienia.
Zobacz też
Dotyczy
CreateInstanceFrom(String, String)
- Źródło:
- AppDomain.cs
- Źródło:
- AppDomain.cs
- Źródło:
- AppDomain.cs
Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu.
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
Parametry
- assemblyFile
- String
Nazwa (łącznie ze ścieżką) pliku zawierającego zestaw, który definiuje żądany typ. Zestaw jest ładowany przy użyciu LoadFrom(String) metody .
- typeName
- String
W pełni kwalifikowana nazwa żądanego typu, w tym przestrzeń nazw, ale nie zestaw, zwracana przez FullName właściwość .
Zwraca
Obiekt, który jest otoką dla nowego wystąpienia lub null
jeśli typeName
nie zostanie znaleziony. Zwracana wartość musi być bez otoki, aby miała dostęp do rzeczywistego obiektu.
Implementuje
Wyjątki
assemblyFile
nie można odnaleźć.
typeName
nie można odnaleźć w pliku assemblyFile
.
Próba wykonania operacji w niezaładowanej domenie aplikacji.
Nie znaleziono konstruktora publicznego bez parametrów.
Obiekt wywołujący nie ma wystarczających uprawnień do wywołania tego konstruktora.
assemblyFile
nie jest prawidłowym zestawem dla aktualnie załadowanego środowiska uruchomieniowego.
Zestaw lub moduł został załadowany dwukrotnie z dwoma różnymi dowodami.
To wystąpienie to null
.
Przykłady
W poniższym przykładzie pokazano, jak użyć CreateInstanceFrom(String, String) przeciążenia metody do utworzenia wystąpienia obiektu w domenie aplikacji docelowej i wywołania jego metod.
W przykładzie zdefiniowano klasę MarshalableExample
, która może być marshaledowana przez granice domeny aplikacji. Przykład tworzy ścieżkę do aktualnie wykonywanego zestawu, tworzy domenę aplikacji docelowej i używa CreateInstanceFrom(String, String) przeciążenia metody, aby załadować przykładowy zestaw do domeny aplikacji docelowej i utworzyć wystąpienie MarshalableExample
.
Uwaga
Ścieżka jest bezwzględna w tym przykładzie, ale ścieżka względna również zadziała, ponieważ Assembly.LoadFrom metoda jest używana do ładowania zestawu.
Po rozpasaniu uchwytu obiektu w przykładzie pokazano trzy sposoby użycia obiektu w domenie aplikacji docelowej:
Wywoływanie metody z późnym powiązaniem przy użyciu odbicia. Wymaga to informacji o typie, co powoduje załadowanie zestawu do domeny aplikacji obiektu wywołującego. (W tym przykładzie jest już załadowany).
Rzutowanie obiektu do interfejsu znanego zarówno dla obiektu wywołującego, jak i wywoływanego. Jeśli interfejs jest zdefiniowany w zestawie wywołującym lub w trzecim zestawie przywoływanym zarówno przez obiekt wywołujący, jak i wywoływany, wywoływany zestaw nie jest ładowany do domeny aplikacji obiektu wywołującego.
Używanie obiektu bezpośrednio, gdy jego typ jest znany obiektowi wywołującego. Zestaw musi zostać załadowany do domeny aplikacji obiektu wywołującego.
Innym sposobem uniknięcia ładowania wywoływanego zestawu do domeny aplikacji obiektu wywołującego jest, aby obiekt wywołujący pochodził z MarshalByRefObject klasy i zdefiniować metodę, która może być uruchamiana w domenie aplikacji docelowej. Ta metoda może użyć odbicia w celu zbadania zestawu docelowego, ponieważ zestaw docelowy jest już załadowany do domeny aplikacji docelowej. Zobacz przykład DynamicDirectory właściwości .
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'!
Uwagi
Wywoływany jest konstruktor bez parametrów dla typeName
.
Aby uzyskać więcej informacji, zobacz metodę Activator.CreateInstanceFrom .
CreateInstanceFrom Gdy metoda jest używana do tworzenia wystąpienia w domenie aplikacji docelowej, innej niż domena aplikacji, z której jest wykonywane wywołanie, zestaw jest ładowany w domenie aplikacji docelowej. Jeśli jednak wystąpienie nie zostanie rozwinięte w domenie aplikacji wywołującej, użycie nierozwiniętych instancji w określony sposób może spowodować załadowanie zestawu do domeny aplikacji wywołującej. Na przykład po rozwinięciu danego wystąpienia można zażądać informacji o typie, aby wywołać jego metody z późnym wiązaniem. Podczas ładowania zestawu do domeny aplikacji wywołującej mogą wystąpić wyjątki.
Jeśli inna wersja tego samego zestawu została wcześniej załadowana do domeny aplikacji wywołującej lub jeśli ścieżka ładowania domeny aplikacji wywołującej różni się od tej domeny aplikacji docelowej, mogą wystąpić wyjątki, takie jak MissingMethodException .
Jeśli domena aplikacji wywołującej wykonuje wczesne wywołania typu wystąpienia, InvalidCastException może zostać zgłoszony podczas próby rzutowania wystąpienia.