【发布时间】:2018-06-06 16:56:42
【问题描述】:
我在 ASP.NET CORE 中有一个项目。我想在 ExchangeService 类的 RejectExchange 方法完成之前调用一个方法(将来会调用几个方法)。因此,我阅读了有关 EventHandlers 的信息,但我不知道应该在哪里将方法分配给委托。我有 ExchangeService 类:
public class ExchangeService : IExchange
{
private readonly SocialNetworkContext _context;
private readonly IUser _userService;
private readonly IItem _itemService;
private readonly IExchangeRequestNotification _exchangeRequestNotificationService;
public event EventHandler<Exchange> ExchangeRejecting;
protected virtual void OnExchangeRejecting(Exchange exchange)
{
ExchangeRejecting?.Invoke(this, exchange);
}
public void RejectExchange(int id)
{
var exchange = GetById(id);
OnExchangeRejecting(exchange);
Delete(exchange);
}
public ExchangeService(SocialNetworkContext context, IUser userService, IItem itemService, IExchangeRequestNotification exchangeRequestNotificationService)
{
_context = context;
_userService = userService;
_itemService = itemService;
_exchangeRequestNotificationService = exchangeRequestNotificationService;
}
}
我想在 ExchangeRequestNorificationService 中删除关于交换的通知,在交换将被删除之前,所以我创建了方法 OnExchangeRejecting:
public class ExchangeRequestNotificationService : IExchangeRequestNotification
{
private readonly SocialNetworkContext _context;
private readonly IUser _userService;
public ExchangeRequestNotificationService(SocialNetworkContext context, IUser userService)
{
_context = context;
_userService = userService;
}
public void OnExchangeRejecting(object source, Exchange exchange) => Delete(GetByExchangeId(exchange.Id));
public void Delete(ExchangeRequestNotification exchangeRequestNotification)
{
_context.Remove(exchangeRequestNotification);
_context.SaveChanges();
}
}
一切都很好,但我不明白我必须在哪里将方法分配给委托。我有 ExchangeController,我在其中使用依赖注入并将 IExchangeService 传递给构造函数,然后我将方法分配给委托:
public ExchangeController(IExchange exchangeService, IExchangeRequestNotification exchangeRequestNotification, IChat chatService)
{
_exchangeService = exchangeService;
_exchangeRequestNotificationService = exchangeRequestNotification;
exchangeService.ExchangeRejecting += _exchangeRequestNotificationService.OnExchangeRejecting;
exchangeService.ExchangeRejecting += chatService.OnExchangeRejecting;
}
但我觉得不对,因为在这个控制器中我真的不需要ExchangeRequestNotificationService和ChatService(也有OnExchangeRejecting方法),我只需要ExchangeService。 ExchangeRequestNotificationService 被传递给控制器仅用于将方法分配给方法 OnRejectingExchange 上的委托,并且将来它会更糟(注入更多不需要的服务)。
我的问题是我应该在哪里为委托分配方法?对不起我的英语,我希望你能理解我的问题:)
【问题讨论】:
标签: c# asp.net asp.net-core delegates eventhandler