1

私は独自の COM アセンブリとのインターフェイスを作成している .dll ライブラリを持っています。私の目標は、作成した作品をオンラインで公開することですが、この独自の dll の配布を避けるために、COM アセンブリをプロジェクト参照として削除する必要があります。だから私ができるようにしようとしているのは、実行時にアセンブリを動的にロードし、必要な場所でメソッドを呼び出すことです。伝統的に、私は未知の型に対してオブジェクト リフレクションを使用してきましたが、これは時々遅くなる可能性があり、いくつかの醜いインスタンス化を伴います。.NET 4.0 では、すべてのメソッドをきれいに取得し、実行時に動的クラス/インターフェイスに投げ込む方法はありますか?

現在、次のようなオブジェクトを取得しています。

Type myClassType = Type.GetTypeFromProgID("MyClass.Myclass.1");
object classObj = Activator.CreateInstance(myClassType);

Type.GetMethods() を使用できると思っていましたが、一般的なもの (Equals、ToString、GetLifetime... など) しか返されません。クラスがインターフェイスを使用していることはわかっているので、インターフェイスを動的にロードすることも調べてみました。それが私を Reflection.Emit と Microsoft.Xrm.Sdk に導きましたが、これまでのところ理解できていません。

数行ごとに大量の BindingFlags をスローすることなくメソッドを呼び出す方法があれば、正しい方向に微調整していただければ幸いです。

クラスとインターフェイスの両方の GUID があれば、役に立ちます。

4

1 に答える 1

3

私があなたの状況にあった場合 (そして私が問題を正しく理解している場合):
インターフェイスのライブラリ (DLL) を実装ライブラリ (DLL) から分離します。
次に、実装ライブラリが動的にロードされ、参照されるメイン ソース コードが表示されます。 to Interface ライブラリに準拠

Type myClassType = Type.GetTypeFromProgID("MyClass.Myclass.1");
myClassIntrface classObj = 
   Activator.CreateInstance(myClassType) as myClassIntrface;
classObj.CallSomeInterfaceMethod();

これが役に立つことを願っています。

于 2013-03-28T17:54:31.257 に答える