私は多くのプロジェクトで解決策を持っています。質問に関連するのは、API クラス ライブラリ、CustomTriggers クラス ライブラリ、および Web サイトです。CustomTriggers と Web サイトの両方が API を参照します。CustomTriggers は、API にある Interface ITrigger を実装します。
問題は、インターフェイス ITrigger の 'Run' メソッドで 1 つのパラメーターを定義すると問題なく動作することですが、2 つのパラメーターを定義すると、アセンブリからの Type 'CustomTriggers.*' の「メソッド 'Run'」 * には実装がありません。 ' 例外がスローされます。理由がわかりません。
インターフェース:
namespace projectbase{
public interface ITrigger {
string EntityTypeName { get; set; }
int EntityID { get; set; }
API.API.TriggerEventType TriggerEventType { get; set; }
void Run(KeyValuePair<string, object>[] parameters);
} }
ITrigger を実装する「CustomTriggers」プロジェクトのクラス:
public class SomeTrigger : projectbase.ITrigger {
public string EntityTypeName { get; set; }
public int EntityID { get; set; }
public API.API.TriggerEventType TriggerEventType { get; set; }
public void Run(KeyValuePair<string, object>[] parameters) {
}
}
例外をスロー [しない] メソッド [スタブ]:
string file = @"dir\CustomTriggers.dll";
string assemblyname = AssemblyName.GetAssemblyName(file).ToString();
Assembly ass = Assembly.Load(assemblyname);
Type assType = null; // funny! :-)
if (ass != null)
assType = ass.GetType("CustomTriggers.SomeTrigger", false); //throws exception here :-(
if (assType != null) {
foreach (Type t in assType.GetInterfaces()) {
if (t.Name == "ITrigger") {
blnValidTypeFound = true;
break;
}
}
} // if
したがって...このコードは準拠しており、問題なく実行されます。心配はありません。
しかし、「ITrigger」と「SomeTrigger」の両方の「Run」メソッドに別のパラメーターを追加すると、
void Run(KeyValuePair<string, object>[] parameters, string OtherParameter);
public void Run(KeyValuePair<string, object>[] parameters, string OtherParameter) {}
コメントで示された行で例外をスローします。
Method 'Run' in type 'CustomTriggers.SomeTrigger' from assembly 'CustomTriggers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.
私はすべてのアイデアがありません。少し助けて?