en train de passer loin de la manipulation des commandes de synchronisation et de les placer sur un bus de messages afin qu'ils puissent être traités plus tard, mais des problèmes revenir le type réel lorsque vous essayez de charger des commandes de type plutôt que chacun descommandes Resolve de bus
Voici ce que j'ai jusqu'à présent et semble fonctionner correctement
commande Dispatcher
public class CommandDispatcher : ICommandDispatcher
{
private readonly IBus _commandBus;
public CommandDispatcher(IBus commandBus)
{
_commandBus = commandBus;
}
public void Dispatch<TCommand>(TCommand command) where TCommand : ICommand
{
var messageType = typeof(TCommand);
_commandBus.Publish(messageType, command);
}
aux commandes abonner
bus.Subscribe<CommandOne>("key", HandleCommand);
bus.Subscribe<CommandTwo>("key", HandleCommand);
Gestion des messages
private void HandleCommand<TCommand>(TCommand command) where TCommand : ICommand
{
var handler = _container.Resolve<ICommandHandler<TCommand>>();
handler.Handle(command);
}
Je veux essentiellement de résoudre mes messages par convention afin Heres ce que je veux aller vers de si je ne dois taper chaque type de commande, mais ayant des problèmes à obtenir le type de retour
var commandAssembly = Assembly.GetAssembly(typeof(ICommand));
var commands = commandAssembly.GetTypes().Where(x => typeof(ICommand).IsAssignableFrom(x));
foreach (var command in commands)
{
bus.Subscribe(command, "key", x =>
{
HandleCommand(x);
});
}
maintenant x est juste un objet que je ne peux pas passer à la méthode HandleCommand
Im en utilisant autofac pour mon conteneur et easynetq pour mon bus.
Ceci est très intéressant! Cependant, IConsume me laisserait avec une dépendance sur easynetQ. Comme je suis en train de penser à masstransit cela pourrait être une mauvaise dépendance – Luke
@luke: IMHO je dirais remplacer IConsume avec IConsumer partout est plus facile que d'essayer de réimplémenter les concepts qui sont déjà là! –
D'accord :) Merci pour votre aide, déplaçant mal à l'autosubscriber – Luke