Je travaille avec IoC et plus précisément avec windsor et j'ai un doute amletic sur une chose. En ce moment, j'applique la couche de commande DDD donc pour chaque commande j'ai une classe concrète comme suitIoC éviter d'injecter le conteneur
public class CreateUserCommand : IDomainCommand{
/// implementation
}
Chaque commande a 1 ou plusieurs gestionnaires avec la mise en œuvre suivante
public class CreateUserHandler : IDomainCommandHandler<CreateUserCommand>
{
public void Handle(CreateUserCommand command)
{
/// implementation
}
}
Le problème se pose avec mon répartiteur de commandes. J'utilise le formulaire ci-dessous au moment
public class CommandDispatcher : ICommandDispatcher
{
private IWindsorContainer container;
public CommandDispatcher(IWindsorContainer container)
{
this.container = container;
}
public void Dispatch<T>(T command)
{
var commandHandler = container.Resolve<ICommandHandler<T>>();
commandHandler.Handle(command);
}
}
Ce que je n'aime pas est la prise de conscience du distributeur sur le conteneur IoC, mais de la même manière que je ne sais pas comment je peux trier de résoudre les gestionnaires seulement quand j'en ai besoin. Shell J'injecte une fabrique de gestionnaires dans Dispatcher et l'utilise pour résoudre mes gestionnaires lors de l'exécution.
Il existe une autre façon de le faire correctement. Vous devez utiliser [TypedFactory Facility.] (Http://docs.castleproject.org/Windsor.Typed-Factory-Facility-interface-based-factories.ashx) Il ne doit y avoir aucune référence au conteneur DI dans votre application, où que ce soit Les outils et motifs dont vous avez besoin sont décrits dans la documentation. –