对象绑定类型的后期绑定事件处理程序和事件签名仅对于后期绑定程序集是已知的

时间:2018-10-14 17:32:06

标签: c# visual-studio event-listener late-binding method-signature

这很奇怪。我还没有发现其他人在这样做,这可能是有原因的。

我试图通过动态加载dll文件来进行一些后期绑定,然后创建该类的对象。基本上,我需要消耗一个dll而不实际添加对该dll的引用。

到目前为止,我使我的对象成为“动态的”而不是特定类的成员,使用Assembly.LoadFile()来获取dll。然后,我调用.GetTypes()并使用LINQ查找所需的特定类型。最后,我调用了Activator.CreateInstance(type,parameters [])来实例化它们。据我所知,在我在Visual Studio中查看对象时,所有内容都起作用,它表示它是我期望的类型。

我还无法弄清楚的部分是正确地填充了事件监听器。 (对不起,我不知道确切的正确术语,这可能无助于寻找答案。)主要问题是该方法具有对象类型作为dll已知但不是我的类已知的参数。 。所以我不能只像普通的那样创建方法:

%MyVariable%

...因为我的班不知道什么是UnknownObjectType。我已经看过有关MethodInfo对象的内容,但是我无法找到一种方法来自行创建具有品牌影响力的新方法“对象”,如果那是正确的处理方法。

问题的另一面是我实际上无法进行订阅。如果您去:

private void Listener_ThatsMyEvent(object sender, UnknownObjectType ItsAMystery)
{
    ItsAMystery.MysteryMethod();
}

...它抱怨它不能使用方法组作为动态调度的运算符的参数。我尝试将其设为“对象”,但似乎只是表现为自身的重载(什么都没有碰到我的断点),我在某处读到,使其成为动态对象与用于重载目的的对象相同。

我知道我可以获取Listener类型并从中获取AddMethod MethodInfo,但这是我所得到的。我试图在这种情况下找到“ + =”的非语法糖版本,以查看是否可以从那里开始工作,但是没有找到它。

0 个答案:

没有答案