这是一个非常具体的问题,在某些层面上可能是基本的。我对代表和活动处理的总体知识有差距,所以我对自己有点停滞不前并不感到惊讶。但在我的理解中,使用Autofac使事情更加复杂。我试着在下面解释。
我正在使用连接到SAP。NET V3 SAP连接器并实现所谓的RFC服务器。作为其中的一部分,SAP的优秀人员已经公开了RfcServerErrorEventHandler:
public delegate void RfcServerErrorEventHandler(object server, RfcServerErrorEventArgs errorEventData);
我在一个类库中启动我的服务器,在这个类库中我有一个我们称之为服务器管理器的东西。它是启动服务器,停止服务器以及其间的一切。我所困扰的是,我究竟如何在我的服务器管理器类中使用上述委托,该委托是使用AutoFac注入到我的主程序中的,实现如下:
public IServerManagerService _ServerManager;
public ApplicationLogic(IServerManagerService serverManager)
{
_ServerManager = serverManager;
}
_ServerManager.StartServer(ServerName);
上面的内容转到服务器管理器类,并运行StartServer方法。我尝试在服务器管理器类中注册如下事件(这是我不清楚的地方):
public void ErrorHandler(object sender, RfcServerErrorEventHandler e)
{
throw new Exception("The method or operation is not implemented.");
}
但是,我能想办法让代表与此挂钩吗?或者想办法通过自动交流完成。我已经尝试过了,但我在网上找不到任何这样的例子。似乎SAP。NET连接器是一个非常小众的东西。连接器文档也只提供了非常基本的代码示例。
我认为我提到的问题只是缺乏基本的事件处理技术——可能是,尤其是在与DI一起使用时。我在发布之前已经做了相当多的阅读,但就是没有得到它。
提前感谢
任何优秀的C#书籍都应该对此进行解释:请参阅主题"delegate"one_answers"event"。基本上,只需使用+=运算符就可以在某个事件中注册事件处理程序。(如果您是唯一一个使用RfcServer的用户,则"="也应该有效,但使用"+=",您可以有多个活动订阅者。)
例如,在您的案例中,
myServer.RfcServerError += new RfcServer.RfcServerErrorEventHandler(ErrorHandler);
但请注意,您对事件处理程序(方法ErrorHandler)的定义是错误的!第二个参数的类型应为RfcServerErrorEventArgs,而不是RfcServerErrorEventHandler!
public void ErrorHandler(object sender, RfcServerErrorEventArgs e)
{
// Do something with "e" here. Throwing an exception is probably
// not a good idea...
throw new Exception("The method or operation is not implemented.");
}