AppDomain.CreateInstanceFrom Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Создает новый экземпляр указанного типа, определенного в указанном файле сборки.
Перегрузки
| Имя | Описание |
|---|---|
| CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) |
Устаревшие..
Создает новый экземпляр указанного типа, определенного в указанном файле сборки. |
| CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) |
Создает новый экземпляр указанного типа, определенного в указанном файле сборки. |
| CreateInstanceFrom(String, String, Object[]) |
Создает новый экземпляр указанного типа, определенного в указанном файле сборки. |
| CreateInstanceFrom(String, String) |
Создает новый экземпляр указанного типа, определенного в указанном файле сборки. |
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
Внимание
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:
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
Параметры
- assemblyFile
- String
Имя, включая путь, файла, содержащего сборку, которая определяет запрошенный тип. Сборка загружается с помощью LoadFrom(String) метода.
- typeName
- String
Полное имя запрошенного типа, включая пространство имен, но не сборку, как возвращается свойством FullName .
- ignoreCase
- Boolean
Логическое значение, указывающее, следует ли выполнять поиск с учетом регистра.
- bindingAttr
- BindingFlags
Сочетание нулевых или более битовых флагов, влияющих на поиск конструктора typeName . Если bindingAttr значение равно нулю, выполняется поиск общедоступных конструкторов с учетом регистра.
- binder
- Binder
Объект, который включает привязку, приведение типов аргументов, вызов элементов и извлечение MemberInfo объектов с помощью отражения. Если binder значение null, используется привязка по умолчанию.
- args
- Object[]
Аргументы, которые необходимо передать конструктору. Этот массив аргументов должен соответствовать числу, порядку и типу параметров вызываемого конструктора. Если конструктор без параметров предпочтителен, args должен быть пустым массивом или null.
- culture
- CultureInfo
Сведения, относящиеся к языку и региональным параметрам, которые управляют приведением args формальных типов, объявленных для конструктора typeName . В противном culturenullCultureInfo случае используется текущий поток.
- activationAttributes
- Object[]
Массив одного или нескольких атрибутов, которые могут участвовать в активации. Как правило, массив, содержащий один UrlAttribute объект, указывающий URL-адрес, необходимый для активации удаленного объекта.
Этот параметр связан с объектами, активированными клиентом. Активация клиента — это устаревшая технология, которая сохраняется для обратной совместимости, но не рекомендуется для новой разработки. Распределенные приложения должны использовать Windows Communication Foundation.
- securityAttributes
- Evidence
Сведения, используемые для авторизации создания typeName.
Возвращаемое значение
Объект, который является оболочкой для нового экземпляра или nulltypeName не найден. Возвращаемое значение должно быть раскрыто для доступа к реальному объекту.
Реализации
- Атрибуты
Исключения
Вызывающий объект не может предоставлять атрибуты активации для объекта, от который не наследуется MarshalByRefObject.
–или–
securityAttributes не nullявляется . Если устаревшая политика CAS не включена, securityAttributes следует.null
Операция выполняется в выгруженном домене приложения.
assemblyFile не найден.
typeName не найден в assemblyFile.
Не найдено соответствующего общедоступного конструктора.
Вызывающий объект не имеет достаточного разрешения для вызова этого конструктора.
assemblyFile не является допустимой сборкой для текущей загруженной среды выполнения.
Сборка или модуль была загружена дважды с двумя разными доказательствами.
Этот экземпляр .null
Комментарии
Дополнительные сведения об этом методе см. в этом методе Activator.CreateInstanceFrom .
CreateInstanceFrom Если метод используется для создания экземпляра в целевом домене приложения, отличном от домена приложения, из которого выполняется вызов, сборка загружается в домен целевого приложения. Тем не менее, если экземпляр распакуется в вызывающем домене приложения, с помощью распакованного экземпляра определенным образом может привести к загрузке сборки в вызывающий домен приложения. Например, после распакованного экземпляра его сведения о типе могут запрашиваться, чтобы вызвать методы с поздней привязкой. Когда сборка загружается в домен вызывающего приложения, могут возникать исключения.
Если другая версия той же сборки ранее была загружена в вызывающий домен приложения или если путь загрузки вызывающего домена приложения отличается от целевого домена приложения, такие как MissingMethodException могут возникать.
Если вызывающий домен приложения выполняет вызовы типа экземпляра с ранней привязкой, InvalidCastException его можно вызвать при попытке приведения экземпляра.
См. также раздел
Применяется к
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
Создает новый экземпляр указанного типа, определенного в указанном файле сборки.
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")]
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);
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.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")>]
member this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> System.Runtime.Remoting.ObjectHandle
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
Параметры
- assemblyFile
- String
Имя, включая путь, файла, содержащего сборку, которая определяет запрошенный тип. Сборка загружается с помощью LoadFrom(String) метода.
- typeName
- String
Полное имя запрошенного типа, включая пространство имен, но не сборку, как возвращается свойством FullName .
- ignoreCase
- Boolean
Логическое значение, указывающее, следует ли выполнять поиск с учетом регистра.
- bindingAttr
- BindingFlags
Сочетание нулевых или более битовых флагов, влияющих на поиск конструктора typeName . Если bindingAttr значение равно нулю, выполняется поиск общедоступных конструкторов с учетом регистра.
- binder
- Binder
Объект, который включает привязку, приведение типов аргументов, вызов элементов и извлечение MemberInfo объектов с помощью отражения. Если binder значение null, используется привязка по умолчанию.
- args
- Object[]
Аргументы, которые необходимо передать конструктору. Этот массив аргументов должен соответствовать числу, порядку и типу параметров вызываемого конструктора. Если конструктор без параметров предпочтителен, args должен быть пустым массивом или null.
- culture
- CultureInfo
Сведения, относящиеся к языку и региональным параметрам, которые управляют приведением args формальных типов, объявленных для конструктора typeName . В противном culturenullCultureInfo случае используется текущий поток.
- activationAttributes
- Object[]
Массив одного или нескольких атрибутов, которые могут участвовать в активации. Как правило, массив, содержащий один UrlAttribute объект, указывающий URL-адрес, необходимый для активации удаленного объекта.
Этот параметр связан с объектами, активированными клиентом. Активация клиента — это устаревшая технология, которая сохраняется для обратной совместимости, но не рекомендуется для новой разработки. Распределенные приложения должны использовать Windows Communication Foundation.
Возвращаемое значение
Объект, который является оболочкой для нового экземпляра или nulltypeName не найден. Возвращаемое значение должно быть раскрыто для доступа к реальному объекту.
- Атрибуты
Исключения
Вызывающий объект не может предоставлять атрибуты активации для объекта, от который не наследуется MarshalByRefObject.
Операция выполняется в выгруженном домене приложения.
assemblyFile не найден.
typeName не найден в assemblyFile.
Не найдено соответствующего общедоступного конструктора.
Вызывающий объект не имеет достаточного разрешения для вызова этого конструктора.
assemblyFile не является допустимой сборкой для текущей загруженной среды выполнения.
Сборка или модуль была загружена дважды с двумя разными доказательствами.
Этот экземпляр .null
Комментарии
Дополнительные сведения см. в методе Activator.CreateInstanceFrom.
CreateInstanceFrom Если метод используется для создания экземпляра в целевом домене приложения, отличном от домена приложения, из которого выполняется вызов, сборка загружается в домен целевого приложения. Тем не менее, если экземпляр распакуется в вызывающем домене приложения, с помощью распакованного экземпляра определенным образом может привести к загрузке сборки в вызывающий домен приложения. Например, после распакованного экземпляра его сведения о типе могут запрашиваться, чтобы вызвать методы с поздней привязкой. Когда сборка загружается в домен вызывающего приложения, могут возникать исключения.
Если другая версия той же сборки ранее была загружена в вызывающий домен приложения или если путь загрузки вызывающего домена приложения отличается от целевого домена приложения, такие как MissingMethodException могут возникать.
Если вызывающий домен приложения выполняет вызовы типа экземпляра с ранней привязкой, InvalidCastException его можно вызвать при попытке приведения экземпляра.
См. также раздел
Применяется к
CreateInstanceFrom(String, String, Object[])
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
Создает новый экземпляр указанного типа, определенного в указанном файле сборки.
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")]
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom(string assemblyFile, string typeName, 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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")>]
member this.CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
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
Параметры
- assemblyFile
- String
Имя, включая путь, файла, содержащего сборку, которая определяет запрошенный тип. Сборка загружается с помощью LoadFrom(String) метода.
- typeName
- String
Полное имя запрошенного типа, включая пространство имен, но не сборку, как возвращается свойством FullName .
- activationAttributes
- Object[]
Массив одного или нескольких атрибутов, которые могут участвовать в активации. Как правило, массив, содержащий один UrlAttribute объект, указывающий URL-адрес, необходимый для активации удаленного объекта.
Этот параметр связан с объектами, активированными клиентом. Активация клиента — это устаревшая технология, которая сохраняется для обратной совместимости, но не рекомендуется для новой разработки. Распределенные приложения должны использовать Windows Communication Foundation.
Возвращаемое значение
Объект, который является оболочкой для нового экземпляра или nulltypeName не найден. Возвращаемое значение должно быть раскрыто для доступа к реальному объекту.
Реализации
- Атрибуты
Исключения
assemblyFile равно null.
assemblyFile не найден.
typeName не найден в assemblyFile.
Вызывающий объект не имеет достаточного разрешения для вызова этого конструктора.
Не найдено соответствующего общедоступного конструктора.
Вызывающий объект не может предоставлять атрибуты активации для объекта, от который не наследуется MarshalByRefObject.
Операция выполняется в выгруженном домене приложения.
assemblyFile не является допустимой сборкой для текущей загруженной среды выполнения.
Сборка или модуль была загружена дважды с двумя разными доказательствами.
Этот экземпляр .null
Комментарии
Вызывается конструктор typeName без параметров.
Дополнительные сведения об этом методе см. в этом методе Activator.CreateInstanceFrom .
CreateInstanceFrom Если метод используется для создания экземпляра в целевом домене приложения, отличном от домена приложения, из которого выполняется вызов, сборка загружается в домен целевого приложения. Тем не менее, если экземпляр распакуется в вызывающем домене приложения, с помощью распакованного экземпляра определенным образом может привести к загрузке сборки в вызывающий домен приложения. Например, после распакованного экземпляра его сведения о типе могут запрашиваться, чтобы вызвать методы с поздней привязкой. Когда сборка загружается в домен вызывающего приложения, могут возникать исключения.
Если другая версия той же сборки ранее была загружена в вызывающий домен приложения или если путь загрузки вызывающего домена приложения отличается от целевого домена приложения, такие как MissingMethodException могут возникать.
Если вызывающий домен приложения выполняет вызовы типа экземпляра с ранней привязкой, InvalidCastException его можно вызвать при попытке приведения экземпляра.
См. также раздел
Применяется к
CreateInstanceFrom(String, String)
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
- Исходный код:
- AppDomain.cs
Создает новый экземпляр указанного типа, определенного в указанном файле сборки.
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")]
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom(string assemblyFile, string typeName);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom(string assemblyFile, string typeName);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom(string assemblyFile, string typeName);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")>]
member this.CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
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
Параметры
- assemblyFile
- String
Имя, включая путь, файла, содержащего сборку, которая определяет запрошенный тип. Сборка загружается с помощью LoadFrom(String) метода.
- typeName
- String
Полное имя запрошенного типа, включая пространство имен, но не сборку, как возвращается свойством FullName .
Возвращаемое значение
Объект, который является оболочкой для нового экземпляра или nulltypeName не найден. Возвращаемое значение должно быть раскрыто для доступа к реальному объекту.
Реализации
- Атрибуты
Исключения
assemblyFile не найден.
typeName не найден в assemblyFile.
Операция выполняется в выгруженном домене приложения.
Не найден открытый конструктор без параметров.
Вызывающий объект не имеет достаточного разрешения для вызова этого конструктора.
assemblyFile не является допустимой сборкой для текущей загруженной среды выполнения.
Сборка или модуль была загружена дважды с двумя разными доказательствами.
Этот экземпляр .null
Примеры
В следующем примере показано, как использовать CreateInstanceFrom(String, String) перегрузку метода для создания экземпляра объекта в домене целевого приложения и вызова его методов.
В примере определяется MarshalableExample класс, который можно маршалировать по границам домена приложения. В примере создается путь к выполняемой сборке, создается домен целевого приложения и используется CreateInstanceFrom(String, String) перегрузка метода для загрузки примера сборки в целевой домен приложения и создание экземпляра MarshalableExample.
Замечание
Путь является абсолютным в этом примере, но относительный путь также будет работать, так как Assembly.LoadFrom метод используется для загрузки сборки.
После отмены дескриптора объекта в примере демонстрируется три способа использования объекта в целевом домене приложения:
Вызов метода с поздней привязкой с использованием отражения. Для этого требуется информация о типе, которая приводит к загрузке сборки в домен приложения вызывающего объекта. (В этом примере она уже загружена.)
Приведение объекта к интерфейсу, известному как вызывающей стороне, так и вызывающей стороне. Если интерфейс определен в вызывающей сборке или в третьей сборке, на которую ссылается вызывающий объект, и вызывающий объект, вызываемая сборка не загружается в домен приложения вызывающего объекта.
Использование объекта непосредственно, когда его тип известен вызывающей. Сборка должна быть загружена в домен приложения вызывающего объекта.
Другим способом избежать загрузки вызываемой сборки в домен приложения вызывающего объекта является получение вызывающего объекта от MarshalByRefObject класса и определение метода, который может выполняться в целевом домене приложения. Этот метод может использовать отражение для проверки целевой сборки, так как целевая сборка уже загружена в домен целевого приложения. См. пример свойства DynamicDirectory .
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'!
Комментарии
Вызывается конструктор typeName без параметров.
Дополнительные сведения см. в методе Activator.CreateInstanceFrom.
CreateInstanceFrom Если метод используется для создания экземпляра в целевом домене приложения, отличном от домена приложения, из которого выполняется вызов, сборка загружается в домен целевого приложения. Тем не менее, если экземпляр распакуется в вызывающем домене приложения, с помощью распакованного экземпляра определенным образом может привести к загрузке сборки в вызывающий домен приложения. Например, после распакованного экземпляра его сведения о типе могут запрашиваться, чтобы вызвать методы с поздней привязкой. Когда сборка загружается в домен вызывающего приложения, могут возникать исключения.
Если другая версия той же сборки ранее была загружена в вызывающий домен приложения или если путь загрузки вызывающего домена приложения отличается от целевого домена приложения, такие как MissingMethodException могут возникать.
Если вызывающий домен приложения выполняет вызовы типа экземпляра с ранней привязкой, InvalidCastException его можно вызвать при попытке приведения экземпляра.