AppDomain.CreateInstanceFrom メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定したアセンブリ ファイルで定義されている、指定した型の新しいインスタンスを作成します。
オーバーロード
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) メソッドを使用して読み込まれます。
- ignoreCase
- Boolean
検索で大文字と小文字を区別するかどうかを指定する Boolean 値。
- bindingAttr
- BindingFlags
typeName
コンストラクターの検索に影響を与える 0 個以上のビット フラグの組み合わせ。
bindingAttr
が 0 の場合は、大文字と小文字を区別してパブリック コンストラクターを検索します。
- binder
- Binder
バインディング、引数型の強制変換、メンバーの呼び出し、およびリフレクションを使用した MemberInfo オブジェクトの取得を有効にするオブジェクト。
binder
が null の場合は、既定のバインダーが使用されます。
- args
- Object[]
コンストラクターに渡される引数。 この引数の配列は、呼び出すコンストラクターのパラメーターに対して、数、順序、および型を一致させる必要があります。 パラメーターなしのコンストラクターを使用する場合は、args
を空の配列または null にする必要があります。
- culture
- CultureInfo
args
から typeName
コンストラクターに対して宣言された仮引数型への強制変換を制御するカルチャ固有の情報。
culture
が null
の場合は、現在のスレッドの CultureInfo が使用されます。
- activationAttributes
- Object[]
アクティべーションに参加できる 1 つ以上の属性の配列。 通常、リモート オブジェクトをアクティブ化するために必要な URL を指定する 1 つの UrlAttribute オブジェクトを含む配列。
このパラメーターは、クライアント側でアクティブ化されるオブジェクトに関連しています。 クライアント アクティベーションは、下位互換性のために残されているレガシ テクノロジです。新規の開発には使用しないでください。 分散アプリケーションは、代わりに Windows Communication Foundation (WCF) を使用する必要があります。
- securityAttributes
- Evidence
typeName
の作成を承認するために使用される情報。
戻り値
新しいインスタンスのラッパーであるオブジェクト。typeName
が見つからない場合は null
。 実際のオブジェクトにアクセスするには、戻り値のラップを解除する必要があります。
実装
- 属性
例外
呼び出し元は、MarshalByRefObject を継承しないオブジェクトのアクティベーション属性を提供できません。
- または -
securityAttributes
が null
ではありません。 レガシ CAS ポリシーが有効でない場合は、securityAttributes
を null
にする必要があります。
アンロードされたアプリケーション ドメインで操作しようとします。
assemblyFile
が見つかりませんでした。
typeName
が assemblyFile
で見つかりませんでした。
一致するパブリック コンストラクターが見つかりませんでした。
呼び出し元には、このコンストラクターを呼び出すために必要なアクセス許可がありません。
assemblyFile
は、現在読み込まれているランタイムの有効なアセンブリではありません。
アセンブリまたはモジュールが、2 つの異なる証拠を使用して 2 回読み込まれました。
このインスタンスは null
です。
注釈
このメソッドの詳細については、 メソッドを Activator.CreateInstanceFrom 参照してください。
メソッドを CreateInstanceFrom 使用して、呼び出し元のアプリケーション ドメイン以外のターゲット アプリケーション ドメインにインスタンスを作成すると、アセンブリがターゲット アプリケーション ドメインに読み込まれます。 ただし、インスタンスが呼び出し元のアプリケーション ドメインでラップ解除されている場合、ラップされていないインスタンスを特定の方法で使用すると、アセンブリが呼び出し元のアプリケーション ドメインに読み込まれる可能性があります。 たとえば、インスタンスがラップ解除された後、遅延バインドされたメソッドを呼び出すために、その型情報が要求される場合があります。 アセンブリが呼び出し元のアプリケーション ドメインに読み込まれると、例外が発生する可能性があります。
同じアセンブリの別のバージョンが以前に呼び出し元のアプリケーション ドメインに読み込まれた場合、または呼び出し元のアプリケーション ドメインの読み込みパスがターゲット アプリケーション ドメインの読み込みパスと異なる場合は、 などの MissingMethodException 例外が発生する可能性があります。
呼び出し元のアプリケーション ドメインがインスタンス型に対して事前にバインドされた呼び出しを行う場合、 InvalidCastException インスタンスのキャストが試行されたときにスローされる可能性があります。
こちらもご覧ください
適用対象
CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
- ソース:
- 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);
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
パラメーター
- assemblyFile
- String
要求する型を定義しているアセンブリが格納されているファイルの名前 (パスを含む)。 アセンブリは LoadFrom(String) メソッドを使用して読み込まれます。
- ignoreCase
- Boolean
検索で大文字と小文字を区別するかどうかを指定する Boolean 値。
- bindingAttr
- BindingFlags
typeName
コンストラクターの検索に影響を与える 0 個以上のビット フラグの組み合わせ。
bindingAttr
が 0 の場合は、大文字と小文字を区別してパブリック コンストラクターを検索します。
- binder
- Binder
バインディング、引数型の強制変換、メンバーの呼び出し、およびリフレクションを使用した MemberInfo オブジェクトの取得を有効にするオブジェクト。
binder
が null の場合は、既定のバインダーが使用されます。
- args
- Object[]
コンストラクターに渡される引数。 この引数の配列は、呼び出すコンストラクターのパラメーターに対して、数、順序、および型を一致させる必要があります。 パラメーターなしのコンストラクターを使用する場合は、args
を空の配列または null にする必要があります。
- culture
- CultureInfo
args
から typeName
コンストラクターに対して宣言された仮引数型への強制変換を制御するカルチャ固有の情報。
culture
が null
の場合は、現在のスレッドの CultureInfo が使用されます。
- activationAttributes
- Object[]
アクティべーションに参加できる 1 つ以上の属性の配列。 通常、リモート オブジェクトをアクティブ化するために必要な URL を指定する 1 つの UrlAttribute オブジェクトを含む配列。
このパラメーターは、クライアント側でアクティブ化されるオブジェクトに関連しています。 クライアント アクティベーションは、下位互換性のために残されているレガシ テクノロジです。新規の開発には使用しないでください。 分散アプリケーションは、代わりに Windows Communication Foundation (WCF) を使用する必要があります。
戻り値
新しいインスタンスのラッパーであるオブジェクト。typeName
が見つからない場合は null
。 実際のオブジェクトにアクセスするには、戻り値のラップを解除する必要があります。
例外
呼び出し元は、MarshalByRefObject を継承しないオブジェクトのアクティベーション属性を提供できません。
アンロードされたアプリケーション ドメインで操作しようとします。
assemblyFile
が見つかりませんでした。
typeName
が assemblyFile
で見つかりませんでした。
一致するパブリック コンストラクターが見つかりませんでした。
呼び出し元には、このコンストラクターを呼び出すために必要なアクセス許可がありません。
assemblyFile
は、現在読み込まれているランタイムの有効なアセンブリではありません。
アセンブリまたはモジュールが、2 つの異なる証拠を使用して 2 回読み込まれました。
このインスタンスは null
です。
注釈
詳細については、Activator.CreateInstanceFrom メソッドを参照してください。
メソッドを CreateInstanceFrom 使用して、呼び出し元のアプリケーション ドメイン以外のターゲット アプリケーション ドメインにインスタンスを作成すると、アセンブリがターゲット アプリケーション ドメインに読み込まれます。 ただし、インスタンスが呼び出し元のアプリケーション ドメインでラップ解除されている場合、ラップされていないインスタンスを特定の方法で使用すると、アセンブリが呼び出し元のアプリケーション ドメインに読み込まれる可能性があります。 たとえば、インスタンスがラップ解除された後、遅延バインドされたメソッドを呼び出すために、その型情報が要求される場合があります。 アセンブリが呼び出し元のアプリケーション ドメインに読み込まれると、例外が発生する可能性があります。
同じアセンブリの別のバージョンが以前に呼び出し元のアプリケーション ドメインに読み込まれた場合、または呼び出し元のアプリケーション ドメインの読み込みパスがターゲット アプリケーション ドメインの読み込みパスと異なる場合は、 などの MissingMethodException 例外が発生する可能性があります。
呼び出し元のアプリケーション ドメインがインスタンス型に対して事前にバインドされた呼び出しを行う場合、 InvalidCastException インスタンスのキャストが試行されたときにスローされる可能性があります。
こちらもご覧ください
適用対象
CreateInstanceFrom(String, String, Object[])
- ソース:
- 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);
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
パラメーター
- assemblyFile
- String
要求する型を定義しているアセンブリが格納されているファイルの名前 (パスを含む)。 アセンブリは LoadFrom(String) メソッドを使用して読み込まれます。
- activationAttributes
- Object[]
アクティべーションに参加できる 1 つ以上の属性の配列。 通常、リモート オブジェクトをアクティブ化するために必要な URL を指定する 1 つの UrlAttribute オブジェクトを含む配列。
このパラメーターは、クライアント側でアクティブ化されるオブジェクトに関連しています。クライアント アクティベーションは、下位互換性のために残されているレガシ テクノロジです。新規の開発には使用しないでください。 分散アプリケーションは、代わりに Windows Communication Foundation (WCF) を使用する必要があります。
戻り値
新しいインスタンスのラッパーであるオブジェクト。typeName
が見つからない場合は null
。 実際のオブジェクトにアクセスするには、戻り値のラップを解除する必要があります。
実装
例外
assemblyFile
が null
です。
assemblyFile
が見つかりませんでした。
typeName
が assemblyFile
で見つかりませんでした。
呼び出し元には、このコンストラクターを呼び出すために必要なアクセス許可がありません。
一致するパブリック コンストラクターが見つかりませんでした。
呼び出し元は、MarshalByRefObject を継承しないオブジェクトのアクティベーション属性を提供できません。
アンロードされたアプリケーション ドメインで操作しようとします。
assemblyFile
は、現在読み込まれているランタイムの有効なアセンブリではありません。
アセンブリまたはモジュールが、2 つの異なる証拠を使用して 2 回読み込まれました。
このインスタンスは null
です。
注釈
のパラメーターなしのコンストラクター typeName
が呼び出されます。
このメソッドの詳細については、 メソッドを Activator.CreateInstanceFrom 参照してください。
メソッドを CreateInstanceFrom 使用して、呼び出し元のアプリケーション ドメイン以外のターゲット アプリケーション ドメインにインスタンスを作成すると、アセンブリがターゲット アプリケーション ドメインに読み込まれます。 ただし、インスタンスが呼び出し元のアプリケーション ドメインでラップ解除されている場合は、ラップされていないインスタンスを特定の方法で使用すると、アセンブリが呼び出し元のアプリケーション ドメインに読み込まれる可能性があります。 たとえば、インスタンスがラップ解除された後、遅延バインドされたメソッドを呼び出すために、その型情報が要求される場合があります。 アセンブリが呼び出し元のアプリケーション ドメインに読み込まれると、例外が発生する可能性があります。
同じアセンブリの別のバージョンが以前に呼び出し元のアプリケーション ドメインに読み込まれた場合、または呼び出し元のアプリケーション ドメインの読み込みパスがターゲット アプリケーション ドメインの読み込みパスと異なる場合は、 などの MissingMethodException 例外が発生する可能性があります。
呼び出し元のアプリケーション ドメインがインスタンス型に対して事前にバインドされた呼び出しを行う場合、 InvalidCastException インスタンスのキャストが試行されたときに がスローされる可能性があります。
こちらもご覧ください
適用対象
CreateInstanceFrom(String, String)
- ソース:
- 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);
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
パラメーター
- assemblyFile
- String
要求する型を定義しているアセンブリが格納されているファイルの名前 (パスを含む)。 アセンブリは LoadFrom(String) メソッドを使用して読み込まれます。
戻り値
新しいインスタンスのラッパーであるオブジェクト。typeName
が見つからない場合は null
。 実際のオブジェクトにアクセスするには、戻り値のラップを解除する必要があります。
実装
例外
assemblyFile
が見つかりませんでした。
typeName
が assemblyFile
で見つかりませんでした。
アンロードされたアプリケーション ドメインで操作しようとします。
パラメーターなしのパブリック コンストラクターが見つかりませんでした。
呼び出し元には、このコンストラクターを呼び出すために必要なアクセス許可がありません。
assemblyFile
は、現在読み込まれているランタイムの有効なアセンブリではありません。
アセンブリまたはモジュールが、2 つの異なる証拠を使用して 2 回読み込まれました。
このインスタンスは null
です。
例
次の例では、 メソッド オーバーロードを CreateInstanceFrom(String, String) 使用して、ターゲット アプリケーション ドメインにオブジェクトのインスタンスを作成し、そのメソッドを呼び出す方法を示します。
この例では、 クラスを MarshalableExample
定義します。これは、アプリケーション ドメインの境界を越えてマーシャリングできます。 この例では、現在実行中のアセンブリへのパスをビルドし、ターゲット アプリケーション ドメインを作成し、 メソッド オーバーロードを CreateInstanceFrom(String, String) 使用して、サンプル アセンブリをターゲット アプリケーション ドメインに読み込み、 の MarshalableExample
インスタンスを作成します。
注意
この例ではパスは絶対パスですが、 メソッドを使用してアセンブリを Assembly.LoadFrom 読み込むため、相対パスも機能します。
オブジェクト ハンドルのラップを解除した後、この例では、ターゲット アプリケーション ドメインでオブジェクトを使用する 3 つの方法を示します。
リフレクションを使用した遅延バインディングを使用したメソッドの呼び出し。 これには型情報が必要です。これにより、アセンブリが呼び出し元のアプリケーション ドメインに読み込まれます。 (この例では、既に読み込まれています)。
呼び出し元と呼び出し先の両方に認識されているインターフェイスに オブジェクトをキャストします。 インターフェイスが呼び出し元アセンブリまたは呼び出し元と呼び出し先の両方によって参照される 3 番目のアセンブリで定義されている場合、呼び出されたアセンブリは呼び出し元のアプリケーション ドメインに読み込まれません。
オブジェクトの型が呼び出し元に認識されている場合に、 オブジェクトを直接使用する。 アセンブリは、呼び出し元のアプリケーション ドメインに読み込む必要があります。
呼び出し元のアプリケーション ドメインに呼び出されたアセンブリを読み込むのを避けるもう 1 つの方法は、呼び出し元が 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 インスタンスのキャストが試行されたときに がスローされる可能性があります。
こちらもご覧ください
適用対象
.NET