Die aktuelle Situation sieht so aus:
Code: Select all
public interface IMessageProcessor
{
Task ProcessMessageAsync(TMessage message, string tableConfig);
}
public class MessageProcessorA : IMessageProcessor
{
public Task ProcessMessageAsync(MessageA message, string tableConfig)
}
public class MessageProcessorB : IMessageProcessor
{
public Task ProcessMessageAsync(MessageB message, string tableConfig)
}
Code: Select all
builder.Services
// Register all message processors
.AddSingleton(serviceProvider => supplierType =>
{
return supplierType switch
{
SupplierType.A => serviceProvider.GetRequiredService(),
SupplierType.B => serviceProvider.GetRequiredService(),
_ => throw new NotImplementedException(),
};
})
Die Idee war, dass ich das einfach tun müsste und es würde automatisch alles auflösen:
Code: Select all
// DI resolves factory
private readonly Func _processorFactory;
// In a method:
await _processorFactory(supplierType).ProcessMessageAsync(message, tableData.Config).ConfigureAwait(false);
EDIT1: Ich denke, ich muss eine Kombination aus Wörterbuch und Blöcken verwenden, denn wenn ich 10 verschiedene MessageProcessors habe, wird es Spaghetti geben
EDIT2: Nvm, Dataflow-Aktionsblöcke könnten übertrieben sein, wenn nur 1 Nachricht pro Anwendungslauf verarbeitet wird
Mobile version