J'essaie d'introduire des événements de domaine dans un projet. Le concept est décrit dans le poste de Udi Dahan - http://www.udidahan.com/2009/06/14/domain-events-salvation/Utilisation d'Autofac avec les événements de domaine
est ici le domaine code événement
public interface IDomainEvent { }
public interface IHandleDomainEvents<T> where T : IDomainEvent
{
void Handle(T args);
}
public interface IEventDispatcher
{
void Dispatch<TEvent>(TEvent eventToDispatch) where TEvent : IDomainEvent;
}
public static class DomainEvents
{
public static IEventDispatcher Dispatcher { get; set; }
public static void Raise<TEvent>(TEvent eventToRaise) where TEvent : IDomainEvent
{
Dispatcher.Dispatch(eventToRaise);
}
}
La partie la plus importante est la mise en œuvre IEventDispatcher qui découple l'événement de domaine de tout ce qui doit se produire lorsque l'événement est déclenché. L'astuce consiste à câbler ce couplage à travers un conteneur. Voici ma tentative
Code pour l'enregistrement de tous les gestionnaires d'événements de domaine ....
var asm = Assembly.GetExecutingAssembly();
var handlerType = typeof(IHandleDomainEvents<>);
builder.RegisterAssemblyTypes(asm)
.Where(t => handlerType.IsAssignableFrom(t)
&& t.IsClass
&& !t.IsAbstract)
.AsClosedTypesOf(handlerType)
.InstancePerLifetimeScope();
et résoudre tous les gestionnaires d'événements dans le répartiteur. Le problème est qu'aucun gestionnaire n'est résolu. Donc, je ne suis pas en train d'enregistrer correctement les gestionnaires d'événements ou de ne pas les résoudre. Comment vérifier que l'enregistrement fonctionne?
code Exemple d'un gestionnaire
public class SendWebQuestionToCSO : IHandleDomainEvents<JobNoteCreated>
{
private readonly IConfig _config;
public SendWebQuestionToCSO(IConfig config)
{
_config = config;
}
public void Handle(JobNoteCreated args)
{
var jobNote = args.JobNote;
using(var message = new MailMessage())
{
var client = new SmtpClient {Host = _config.SmtpHostIp};
message.From = new MailAddress(_config.WhenSendingEmailFromWebProcessUseThisAddress);
...... etc
}
}
}
MISE À JOUR Après quelques essais et erreurs du EventDispatcher fonctionne ok! Si j'enregistre manuellement un gestionnaire, puis déclenche l'événement de domaine cela fonctionne. L'assemblage scan/registraion est mon problème. Le code d'enregistrement manuel ...
builder.RegisterType<SendWebQuestionToCSO >().As<IHandleDomainEvents<JobNoteCreated>>();
Alors, comment puis-je analyser tous les ensembles pour tous IHandleDomainEvents<>
étant donné qu'ils ressemblent à ce
public class SendWebQuestionToCSO : IHandleDomainEvents<JobNoteCreated>
Parfait Nick! J'attends votre prochain cours avec impatience! – CRG
Ah, oui, encore plus lisse. Robbed moi de 15 rep si! –
Hé comme vous en avez besoin, ML;) vous avez néanmoins mon vote. –