我需要从callback
处理程序中调用ResponseReceived
动作。
如果有更好的方法,我会很开放。
Connection
和IDriver
来自不同的程序集。试图使它们一起工作。
class Test : IDriver
{
private Connection _connection;
public void Initialize()
{
_connection = new Connection(new ResponseCallback(ResponseReceived));
}
public void Begin(Action<OperationResponse> callback)
{
_connection.SendRequest();
}
private static void ResponseReceived(object source, MessageReceivedArgs e)
{
// Need to invoke `callback` parameter of Begin from here.
}
答案 0 :(得分:3)
将传入的Action<OperationResponse>
实例分配给私有字段以供以后使用。
我还删除了static
上的ResponseReceived
关键字。您不能从静态方法访问实例变量。如果您确实希望它是静态的,则还必须传入一个Test
的实例(也许就是source
,在这种情况下,您可以将其转换回Test
以获得{{ 1}}实例)?
_callback
class Test : IDriver
{
private Connection _connection;
private Action<OperationResponse> _callback;
public void Initialize()
{
_connection = new Connection(new ResponseCallback(ResponseReceived));
}
public void Begin(Action<OperationResponse> callback)
{
_connection.SendRequest();
_callback = callback;
}
private void ResponseReceived(object source, MessageReceivedArgs e)
{
_callback(responseInstanceHere);
}
会发生什么?这有可能吗?空回调应该引发NRE还是应将其忽略?简而言之,您的代码可以在适用的地方使用一些错误检查和有用的异常。我不打算添加它们,因为我不知道这种类型的使用上下文。