【发布时间】:2020-04-08 15:52:00
【问题描述】:
我正在尝试使用泛型反序列化对象,但即使它们看起来完全正常,消费者也无法获取它们。
private readonly IContainer _container = Ioc.GetContainer();
public async Task Test()
{
var command = new TestCommand();
var serializeObject = JsonConvert.SerializeObject(command);
var message = JsonConvert.DeserializeObject(serializeObject, command.GetType());
await Process(message);
await Process(command);
}
private async Task Process<TMessage>(TMessage message)
{
await _container.Resolve<IMessageDispatcher>().Dispatch(message);
}
public async Task Dispatch<TMessage>(TMessage message)
{
using (var scope = _lifetimeScope.BeginLifetimeScope())
{
var consumers = scope.Resolve<IEnumerable<IMessageConsumer<TMessage>>>().ToList();
if(consumers.Any() == false) throw new Exception($"No consumer for message {message.GetType().Name}");
foreach (var consumer in consumers)
{
await consumer.Consume(message, CancellationToken.None);
}
}
}
public interface IMessageConsumer<TMessage>
{
Task Consume(TMessage message, CancellationToken cancellationToken);
}
我的消息找不到消费者,但命令变量找到了?即使这些对象看起来相同?
【问题讨论】:
-
那里有很多使事情复杂化的代码,包括使用 IoC 容器。请将其简化为minimal reproducible example。