あなたの例についてさまざまな組み合わせを試しました。ここに唯一の動作するコードがあります。イベントが継承階層のどこで具体的に定義されているかを知る必要があるようです。
using System.Reflection;
using MS.Internal.WindowsBase;
namespace EventTest
{
class Program
{
static void Main(string[] args)
{
var test = new Test();
WeakEventManager<IBase, EventArgs>.AddHandler(test, "IBaseEvent", (s, e) => { }); // works
WeakEventManager<ITest, EventArgs>.AddHandler(test, "ITestEvent", (s, e) => { }); // works
WeakEventManager<Test, EventArgs>.AddHandler(test, "TestEvent", (s, e) => { }); // works
}
}
interface IBase
{
event EventHandler IBaseEvent;
}
interface ITest : IBase { event EventHandler ITestEvent; }
class Test : ITest
{
public event EventHandler IBaseEvent;
public event EventHandler ITestEvent;
public event EventHandler TestEvent;
}
}
これまでの組み合わせ全体 ;
WeakEventManager<IBase, EventArgs>.AddHandler(test, "IBaseEvent", (s, e) => { }); // works
WeakEventManager<IBase, EventArgs>.AddHandler(test, "ITestEvent", (s, e) => { }); // exception
WeakEventManager<IBase, EventArgs>.AddHandler(test, "TestEvent", (s, e) => { }); // exception
WeakEventManager<ITest, EventArgs>.AddHandler(test, "IBaseEvent", (s, e) => { }); // exception
WeakEventManager<ITest, EventArgs>.AddHandler(test, "ITestEvent", (s, e) => { }); // works
WeakEventManager<ITest, EventArgs>.AddHandler(test, "TestEvent", (s, e) => { }); // exception
WeakEventManager<Test, EventArgs>.AddHandler(test, "IBaseEvent", (s, e) => { }); // exception
WeakEventManager<Test, EventArgs>.AddHandler(test, "ITestEvent", (s, e) => { }); // exception
WeakEventManager<Test, EventArgs>.AddHandler(test, "TestEvent", (s, e) => { }); // works