私は次のようなAPIを公開しようとしています
RegisterCallback<T>(Action<T> func)
{
someObj.FuncPointer = func;
}
後で func(obj) を呼び出します .. obj はユーザーが言った型 T です。
より具体的な例:
var callbackRegistrar = new CBRegistrar();
callbackRegistrar.RegisterCallback<ISomeClass>(SomeFunc);
public static void SomeFunc(ISomeClass data)
{
//
}
EDIT:だから私は明確ではないかもしれないので、コードを追加します:
CBRegistrar の「1 つの」オブジェクトのみを作成し、それを多くの Callbacks に接続します。
var callbackRegistrar = new CBRegistrar();
callbackRegistrar.RegisterCallback<ISomeClass>(SomeFunc);
callbackRegistrar.RegisterCallback<ISomeOtherClass>(SomeFunc2);
...
実際、上記のコードは、プラグインのディレクトリを反映して呼び出されます。
ユーザーはこれをコードに入れます -->
public static void SomeFunc(ISomeClass data)
{
//
}
public static void SumFunc2(ISomeOtherClass data)
{
//
}
Genericsなどを使用するとこれが不可能であるかのように見えます。私がしなければならないように見えるのは、IPluginまたは何かと呼ばれるインターフェースを作成し、ユーザーにこれを行うように依頼することです..
[PluginIdentifier(typeof(ISomeClass))]
public static void SomeFunc(IPluginData data)
{
var castedStuff = data as ISomeClass; // ISomeClass inherits from IPluginData
}
ユーザーに処理を依頼しているように見えますが、とにかく ...