如何在.net6中注入事件处理程序依赖项



Hi-im试图创建一个连接到RabbitMQ的逻辑,并使用泛型类管理事件。

我的问题简历:我不知道如何注入类NotificationEventHandler

我有三个班:

IEventHandler:

public interface IEventHandler<T>
where T : class
{
Task StartListen();
}

EventHandlerBase:(具有主要侦听rabbit队列(

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;
}
}

NotificationEventHandler:(具有具体逻辑并订阅EventHandlerBase(

public class NotificationEventHandler 
{
public NotificationEventHandler(EventHandlerBase<NotificationDTO> eventHandler)
{
eventHandler.HandleMessage += this.MyHandleMessage;
}
public async Task MyHandleMessage(NotificationDTO message)
{
Console.WriteLine("Do something...");
}
}

程序中。cs:注入(我不知道(

builder.Services.AddSingleton<IEventHandler<NotificationDTO>, EventHandlerBase<NotificationDTO>>();
builder.Services.AddSingleton<NotificationEventHandler<NotificationDTO>>(); // ???

NotificationDTO是任何具有属性…的类。。。。

如果您想访问NotificationDTO,您必须向NotificationEventHandler添加通用类型,如:

class NotificationEventHandler<T>
{
public T Notification { get; set; }
...
}

然后,当您像NotificationEventHandler 一样调用它时,通知将是NotificationDTO类型

最新更新