2012-12-18 4 views
5

Stiamo usando il modello di eventi dominio e appoggiandosi sul nostro contenitore CIO di localizzare i gestori per un particolare tipo di evento:Come eseguire la scansione di tutte le implementazioni di un tipo generico con Ninject

public interface IHandleEvent<TEvent> where TEvent : IEvent 
{ 
    void Handle(TEvent evnt); 
} 

Con StructureMap possiamo eseguire la scansione e registrare tutti i tipi che implementano la suddetta interfaccia in questo modo:

Scan(cfg => 
{ 
    cfg.TheCallingAssembly(); 
    cfg.ConnectImplementationsToTypesClosing(typeof(IHandleEvent<>)); 
}); 

Esiste un equivalente con Ninject?

Attualmente sto avendo per legare ogni gestore singolarmente in questo modo:

kernel.Bind<IHandleEvent<SomeEvent>>().To<EventHandler1>(); 
kernel.Bind<IHandleEvent<SomeEvent>>().To<EventHandler2>(); 
kernel.Bind<IHandleEvent<SomeOtherEvent>>().To<EventHandler3>(); 

risposta

4

Il pacchetto delle estensioni delle convenzioni di Ninject ha fatto esattamente ciò di cui avevo bisogno. Il codice di lavoro è di seguito:

kernel.Bind(x => x 
    .FromThisAssembly() 
    .SelectAllClasses().InheritedFrom(typeof(IHandleEvent<>)) 
    .BindSingleInterface());