У меня есть куча событий, которые обрабатываются с помощью обработчиков событий, таких как следующие:Ninject отображения для общего типа
обработчика событий:
public class DeliveryEventHandlers :
IConsume<DeliveryCreated>,
IConsume<DeliveryUpdated>{
readonly IDocumentSession _documentSession;
public DeliveryEventHandlers(IDocumentSession documentSession)
{
_documentSession = documentSession;
}
public void Consume(DeliveryCreated @event)
{
//...
}
public void Consume(DeliveryUpdated @event)
{
//...
}
...
Событие:
public class DeliveryCreated : IEvent
{
public Guid DeliveryId { get; set; }
...
}
public class DeliveryUpdated : IEvent
{
public Guid DeliveryId { get; set; }
...
}
И я необходимо написать привязку Ninject, которая будет по запросу типа события, дать мне обработчик (ы) события, который использует эти события. Это то, что я придумал:
public void BindEventHandlers(IContext context) {
Kernel.Bind(x =>
{
x.FromAssemblyContaining(typeof(DeliveryCreated))
.SelectAllClasses()
.InheritedFrom<IEvent>()
.BindWith(new EventBindingGenerator());
});
}
public class EventBindingGenerator : IBindingGenerator
{
public IEnumerable<IBindingWhenInNamedWithOrOnSyntax<object>> CreateBindings(Type type, IBindingRoot bindingRoot)
{
yield return bindingRoot.Bind(x =>
{
x.FromAssemblyContaining(typeof(DeliveryEventHandlers))
.SelectAllClasses()
.InheritedFrom(IConsume<typeof(type)>);
// This Part^
});
}
}
, но это не будет компилировать - я врезался в препятствие на линии над комментарием: // Эта часть^
Мне нужно сделать запрос для:
_context.Get<DeliveryCreated>()
и получать подтверждение о доставке.
Любая помощь была бы оценена!
Спасибо, H
Спасибо за ответ так быстро Yacoub, но это решение не работает. Он фактически привязал мои обработчики к интерфейсу IEvent классов Event. – HCdev
Я не понимаю, что вы имеете в виду. Можете ли вы еще раз объяснить, что он сделал? –