重新设计WithMetadata(替换为Context), 移除对业务对象的侵入性。#4
重新设计WithMetadata(替换为Context), 移除对业务对象的侵入性。#4piyongcai wants to merge 2 commits intodeeyi2000:mainfrom
Conversation
2、Json序列化变更为 Utf8Json。因为在System.Text.Json序列化Message WithMetadata 时会崩溃。 3、examples/Program.cs增加打印结果函数。
|
按你设计的逻辑,参数和返回结果继承于WithMetadata,就可以带Metadata了,我写了如下测试 public class Args : WithMetadata {
public long A { get; set; }
public long B { get; set; }
}
public class Reply : WithMetadata {
public long C { get; set; }
}
// 然后调用就崩溃了,是json序列化崩溃出来的 |
|
请展示更完整的测试代码和异常详细内容 |
|
|
经测试,应该是IEnumerable<KeyValuePair<string, string>>接口的问题。 public class Args : WithMetadata {
public long A { get; set; }
public long B { get; set; }
}
//...
foreach(KeyValuePair<string, string> kv in args) {
}这时foreach会产生歧义,是在遍历Args的成员变量,而不是MetaData public abstract class WithMetadata
{
public virtual Dictionary<string, string> GetMetaData() => _metadata;
}
foreach (KeyValuePair<string, string> kv in r1.GetMetaData()) {
} |
2, 增加 Context.cs, 实现上下文基本类。 3, 修改IRPCClient -> Go, 加入上下文参数 4, TaskCompletionSource.cs 中, 将Message缓存起来 5, Client.cs -> ChannelRead0 -> 增加对返回结果上下文处理。 6, Program.cs 中, 修订测试代码。
感觉Metadata设计有点不合理,对业务对象定义侵入性太强。 另外,你看你有时间的话,能否将服务发现这块完善一下,这块我不太熟悉。 |
|
服务发现部分已经全部都实现好了,测试后我会提交上来 |
1、WithMetadata增加增加 IEnumerable 接口实现, 方便调用
2、Json序列化变更为 Utf8Json。因为在System.Text.Json序列化Message WithMetadata 时会崩溃。
3、examples/Program.cs增加打印结果函数。