J'utilise le modèle de commande pour la première fois. Je ne sais pas très bien comment gérer les dépendances.Injection de dépendances lors de l'utilisation du modèle de commande
Dans le code ci-dessous, nous envoyons un CreateProductCommand
qui est ensuite mis en file d'attente pour être exécuté ultérieurement. La commande encapsule toutes les informations à exécuter.
Dans ce cas, il est probable que nous devrons accéder à un certain type de magasin de données pour créer le produit. Ma question est, comment puis-je injecter cette dépendance dans la commande afin qu'elle puisse s'exécuter?
public interface ICommand {
void Execute();
}
public class CreateProductCommand : ICommand {
private string productName;
public CreateProductCommand(string productName) {
this.ProductName = productName;
}
public void Execute() {
// save product
}
}
public class Dispatcher {
public void Dispatch<TCommand>(TCommand command) where TCommand : ICommand {
// save command to queue
}
}
public class CommandInvoker {
public void Run() {
// get queue
while (true) {
var command = queue.Dequeue<ICommand>();
command.Execute();
Thread.Sleep(10000);
}
}
}
public class Client {
public void CreateProduct(string productName) {
var command = new CreateProductCommand(productName);
var dispatcher = new Dispatcher();
dispatcher.Dispatch(command);
}
}
Un grand merci
Ben
merci pour cela. Les gens du CQRS sur Twitter m'avaient aussi orienté dans cette direction. –
Et même sans CQRS, un design comme indiqué ci-dessus a de grands avantages. Voici un [article informatif sur ce modèle] (http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91). – Steven