在 .NET SAP Connector 中实施委托
Implementing Delegate In .NET SAP Connector
相当具体的问题,在某些层面上可能很基础。我对代表和事件处理的一般知识存在差距,所以我对自己有点卡住并不感到惊讶。但是使用 Autofac 使我的理解更加复杂。我将在下面尝试解释。
我正在使用 .NET V3 SAP 连接器连接到 SAP 并实施所谓的 RFC 服务器。作为其中的一部分,SAP 的优秀人员公开了一个 RfcServerErrorEventHandler:
public delegate void RfcServerErrorEventHandler(object server, RfcServerErrorEventArgs errorEventData);
我在 class 库中启动我的服务器,其中我有我们称之为服务器管理器的东西。它用于启动服务器、停止它以及其间的所有操作。我坚持的是我到底如何在我的服务器管理器 class 中使用上述委托,它使用 AutoFac 注入到我的主程序中,实现如下:
public IServerManagerService _ServerManager;
public ApplicationLogic(IServerManagerService serverManager)
{
_ServerManager = serverManager;
}
_ServerManager.StartServer(ServerName);
上面的内容转到服务器管理器class并显然运行StartServer方法。我试图在服务器管理器 class:
中尝试注册事件(这是我模糊的地方)
public void ErrorHandler(object sender, RfcServerErrorEventHandler e)
{
throw new Exception("The method or operation is not implemented.");
}
但是我能不能在我的一生中弄清楚如何让代表连接到这个或弄清楚如何通过 autofac 来完成它。我进行了一些尝试,但我只是无法在网上的任何地方找到这方面的任何示例。看起来 SAP .NET 连接器是一个相当小众的东西。连接器文档也仅提供非常基本的代码示例。
我认为我提到的问题可能只是缺乏基本的事件处理技术,尤其是在与 DI 一起使用时。发帖前我已经阅读了大量内容,但就是不明白。
提前致谢
这应该在任何优秀的 C# 书籍中进行解释:请参阅主题 "delegate" 和 "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.");
}
相当具体的问题,在某些层面上可能很基础。我对代表和事件处理的一般知识存在差距,所以我对自己有点卡住并不感到惊讶。但是使用 Autofac 使我的理解更加复杂。我将在下面尝试解释。
我正在使用 .NET V3 SAP 连接器连接到 SAP 并实施所谓的 RFC 服务器。作为其中的一部分,SAP 的优秀人员公开了一个 RfcServerErrorEventHandler:
public delegate void RfcServerErrorEventHandler(object server, RfcServerErrorEventArgs errorEventData);
我在 class 库中启动我的服务器,其中我有我们称之为服务器管理器的东西。它用于启动服务器、停止它以及其间的所有操作。我坚持的是我到底如何在我的服务器管理器 class 中使用上述委托,它使用 AutoFac 注入到我的主程序中,实现如下:
public IServerManagerService _ServerManager;
public ApplicationLogic(IServerManagerService serverManager)
{
_ServerManager = serverManager;
}
_ServerManager.StartServer(ServerName);
上面的内容转到服务器管理器class并显然运行StartServer方法。我试图在服务器管理器 class:
中尝试注册事件(这是我模糊的地方) public void ErrorHandler(object sender, RfcServerErrorEventHandler e)
{
throw new Exception("The method or operation is not implemented.");
}
但是我能不能在我的一生中弄清楚如何让代表连接到这个或弄清楚如何通过 autofac 来完成它。我进行了一些尝试,但我只是无法在网上的任何地方找到这方面的任何示例。看起来 SAP .NET 连接器是一个相当小众的东西。连接器文档也仅提供非常基本的代码示例。
我认为我提到的问题可能只是缺乏基本的事件处理技术,尤其是在与 DI 一起使用时。发帖前我已经阅读了大量内容,但就是不明白。
提前致谢
这应该在任何优秀的 C# 书籍中进行解释:请参阅主题 "delegate" 和 "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.");
}