Je suis nouveau sur structuremap. Je suis en train de se StructureMap pour vous inscrire auto-Utilisation de structemap pour enregistrer des types génériques
public void RegisterAllEventHandlers()
{
Scan(cfg =>
{
cfg.TheCallingAssembly();
//cfg.IncludeNamespaceContainingType<NewCustomerCreated>();
cfg.IncludeNamespace("ParentNameSpace");
cfg.AddAllTypesOf(typeof (IHandle<NewCustomerCreated>));
});
//For(typeof (IHandle<>)).Use(typeof (NewCustomerCreated));
}
NewCustomerCreated
est l'événement et je veux enregistrer tous Handlers pour cet événement soit ceux utilisant IHandle<NewCustomerCreated>
Le code suivant fonctionne, mais je suis sûr qu'il ne peut être fait par balayage: -
ObjectFactory.Initialize(x =>
{
x.For(typeof(IHandle<NewCustomerCreated>))
.Add(new NewCustomerCreatedHandler());
x.For(typeof(IHandle<NewCustomerCreated>))
.Add(new SendWelcomeEmailToNewCustomer());
});
Je suis en train d'utiliser Raiser DomainEvent de http://blog.robustsoftware.co.uk/2009/08/better-domain-event-raiser.html
** Je vous serais reconnaissant si quelqu'un peut modifier la question pour refléter ce que je demande une meilleure façon **
Merci,
Mar
Edit 1: Ajout de code de blog de
public interface IEventDispatcher
{
void Dispatch<TEvent>(TEvent eventToDispatch) where TEvent : IDomainEvent;
}
public static class DomainEventDispatcher
{
public static IEventDispatcher Dispatcher { get; set; }
public static void Raise<TEvent>(TEvent eventToRaise) where TEvent : IDomainEvent
{
Dispatcher.Dispatch(eventToRaise);
}
}
public class StructureMapEventDispatcher : IEventDispatcher
{
public void Dispatch<TEvent>(TEvent eventToDispatch) where TEvent : IDomainEvent
{
foreach (var handler in ObjectFactory.GetAllInstances<IHandle<TEvent>>())
{
handler.Handle(eventToDispatch);
}
}
de mon projet de test, je fais appel classe de registre qui va scanner l'ensemble
public void RegisterAllEventHandlers()
{
Scan(cfg =>
{
cfg.TheCallingAssembly();
cfg.IncludeNamespace("Project1");
//cfg.AddAllTypesOf(typeof(IHandle<NewCustomerCreated>));
cfg.ConnectImplementationsToTypesClosing(typeof(IHandle<>));
});
// This initializes correctly
//ObjectFactory.Initialize(x =>
//{
// x.For(typeof(IHandle<NewCustomerCreated>)).Add(new NewCustomerCreatedHandler());
//});
// Handler returns 0 count
var handler =ObjectFactory.GetAllInstances<IHandle<NewCustomerCreated>>();
}
puis
var eventDispatcher = new StructureMapEventDispatcher();
DomainEventDispatcher.Dispatcher = eventDispatcher;
Le gestionnaire revient toujours vide. Est-il possible de trouver toutes les instances qui ont été ajoutées au conteneur lors de l'appel de AddAllTypesOf? – TheMar
Je pense que je l'initialisais mal. J'ai dû faire ObjectFactory.Initialize (init => {init.AddRegistry();}); et puis les choses ont commencé à fonctionner. Merci beaucoup –
TheMar
Être un newbie structuremap Je veux m'assurer que l'ajout du code ci-dessus était la bonne procédure et pas seulement un hack qui a fonctionné. Merci – TheMar