在.NET SAP Connector中实现委派

问题描述 投票:0回答:1

相当具体的问题,可能在某些层面上是基本的。我对代表和事件处理的了解总体上存在差距所以我并不感到惊讶,因为我有点卡住了。但是使用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时。在发布之前我已经做了相当多的阅读但是没有得到它。

提前致谢

c# delegates event-handling sap autofac
1个回答
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.");
}
© www.soinside.com 2019 - 2024. All rights reserved.