相当具体的问题,可能在某些层面上是基本的。我对代表和事件处理的了解总体上存在差距所以我并不感到惊讶,因为我有点卡住了。但是使用Autofac会让我的理解更加困难。我将在下面尝试解释。
我使用.NET V3 SAP连接器连接到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.");
}
但我可以为我的生活弄清楚如何让代表联系到这个或者弄清楚如何通过autofac来做到这一点。我有过一些尝试,但我无法在网上找到任何这方面的例子。 SAP .NET Connectors似乎是一个非常小众的东西。连接器文档也仅提供非常基本的代码示例。
我认为我提到的问题只是缺乏基本的事件处理技术,或者当使用DI时。在发布之前我已经做了相当多的阅读但是没有得到它。
提前致谢
答案 0 :(得分:1)
这应该在任何好的C#书中解释:参见主题"委托"和"事件"。基本上,您只需使用+ =运算符即可在特定事件中注册事件处理程序。 (" ="也应该有效,如果你是唯一一个使用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.");
}