你好,我正在尝试创建一个连接到RabbitMQ的逻辑,并使用泛型类管理事件。
我的问题继续:我不知道如何注入类NotificationEventHandler
我有三门课:
事件处理程序:
public interface IEventHandler<T>
where T : class
{
Task StartListen();
}
EventHandlerBase:(具有主侦听兔子队列)
public abstract class EventHandlerBase<T> : IEventHandler<T>
where T: class
{
private readonly IEvent<T> _event;
private readonly string _queueName;
#region Event declarate
public delegate Task EventCallBack<T>(T message);
public event EventCallBack<T> HandleMessage;
#endregion
public EventHandlerBase(IEvent<T> @event)
{
_event = @event;
_queueName = _event.Name;
this.StartListen();
}
public async Task StartListen()
{
var consumer = new AsyncEventingBasicConsumer(_event.GetModel());
consumer.Received += async (ch, ea) =>
{
var body = ea.Body.ToArray();
var text = System.Text.Encoding.UTF8.GetString(body);
var objectValue = JsonConvert.DeserializeObject<T>(text);
//Invoke declared event
HandleMessage?.Invoke(objectValue);
await Task.CompletedTask;
_event.GetModel().BasicAck(ea.DeliveryTag, false);
};
_event.GetModel().BasicConsume(_queueName, false, "", false, false, null, consumer);
await Task.CompletedTask;
}
}
通知事件处理程序:(具有事件处理程序库得具体逻辑与订阅)
public class NotificationEventHandler
{
public NotificationEventHandler(EventHandlerBase<NotificationDTO> eventHandler)
{
eventHandler.HandleMessage += this.MyHandleMessage;
}
public async Task MyHandleMessage(NotificationDTO message)
{
Console.WriteLine("Do something...");
}
}
在**Program.cs:**注入中(我不知道)
builder.Services.AddSingleton<IEventHandler<NotificationDTO>, EventHandlerBase<NotificationDTO>>();
builder.Services.AddSingleton<NotificationEventHandler<NotificationDTO>>(); // ???
NotificationDTO是具有属性的任何类....
1条答案
按热度按时间cwdobuhd1#
如果您希望能够访问NotificationDTO,则必须向NotificationEventHandler添加泛型类型,如下所示:
然后,当您像NotificationEventHandler一样调用它时,通知的类型将为NotificationDTO