IronPythonをホストするC#で記述されたアプリケーションを開発しています。私が計画しているのは、ユーザーがPythonスクリプトを作成することです。このスクリプトには、事前定義されたインターフェイスを実装するクラスが含まれています。
何かのようなもの:
C#コードでインターフェイスを定義します。
public interface IPlugin
{
void DoSomething();
}
Pythonコードでインターフェースを実装します。
class Plugin(IPlugin):
def DoSomething():
print "Doing stuff."
私のアプリケーションでは、Pythonスクリプトをロードし、それらのスクリプトのクラスによって実装されたメソッドを実行します。
知りたいのですが、Pythonスクリプトで指定されたインターフェイスを実装するすべてのクラスへのハンドルを取得するにはどうすればよいですか?
例:C#ですべてを行う場合、私は私を助けるために反射を持っており、アセンブリを突き出して次のようにすることができます:
Assembly assembly = Assembly.LoadFrom("plugin.dll");
Type[] types = assembly.GetTypes();
foreach(Type type in types)
{
foreach(Type interfaceType in type.GetInterface())
{
if(interfaceType == typeof(IPlugin))
{
// gotcha, invoke interface specific methods
}
}
}
アセンブリの代わりにIronPythonスクリプトを扱っている場合、どうすれば同じことができますか?ObjectOperationsとScriptScopeを使用すると、クラスの名前がわかっていれば(ここで説明します)、クラスへのハンドルを取得できることはわかっていますが、より堅牢なものを探しています。