【问题标题】:Implementing Delegate In .NET SAP Connector在 .NET SAP 连接器中实现委托
【发布时间】:2017-11-01 09:45:29
【问题描述】:

相当具体的问题,在某些层面上可能是基本的。我对代表和事件处理的一般知识存在差距,所以我对自己有点卡住并不感到惊讶。但是使用 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 连接器似乎是一个非常小众的东西。连接器文档也只提供了非常基本的代码示例。

我认为我提到的问题可能只是缺少基本的事件处理技术,尤其是在使用 DI 时。在发布之前我已经做了相当多的阅读,但只是没有得到它。

提前致谢

【问题讨论】:

    标签: c# delegates event-handling sap autofac


    【解决方案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.");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 2023-04-03
      相关资源
      最近更新 更多