C# EventHandler ASP.NET核心
我有一个ASP.NET核心的项目。我想在ExchangeService类中的RejectExchange方法完成之前调用一个方法(将来有几个方法)。因此,我阅读了有关EventHandler的内容,但我不知道应该在哪里为委托分配方法。我有ExchangeService类:C# EventHandler ASP.NET核心,c#,asp.net,asp.net-core,delegates,eventhandler,C#,Asp.net,Asp.net Core,Delegates,Eventhandler,我有一个ASP.NET核心的项目。我想在ExchangeService类中的RejectExchange方法完成之前调用一个方法(将来有几个方法)。因此,我阅读了有关EventHandler的内容,但我不知道应该在哪里为委托分配方法。我有ExchangeService类: public class ExchangeService : IExchange { private readonly SocialNetworkContext _context; private readon
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;
}
}
一切都很好,但我不明白在哪里必须为委托分配方法。我有一个ExchangeController,在这里我使用依赖项注入,并将IExchangeService传递给构造函数,在那里我分配方法进行委托:
public ExchangeController(IExchange exchangeService, IExchangeRequestNotification exchangeRequestNotification, IChat chatService)
{
_exchangeService = exchangeService;
_exchangeRequestNotificationService = exchangeRequestNotification;
exchangeService.ExchangeRejecting += _exchangeRequestNotificationService.OnExchangeRejecting;
exchangeService.ExchangeRejecting += chatService.OnExchangeRejecting;
}
但我认为这是不对的,因为在这个控制器中,我并不真正需要ExchangeRequestNotificationService和ChatService(它也有方法OneExchangeRejecting),我只需要ExchangeService。ExchangeRequestNotificationService仅在将方法分配给RejectingExchange方法上的委托时传递给控制器,并且在将来情况会更糟(注入更多不需要的服务)
我的问题是我应该在哪里为委托分配方法?对不起我的英语,我希望你能理解我的问题:)我一直在问自己同样的问题,我在stackoverflow上看到了你的帖子。因为我在网上没有找到解决办法,所以我试着自己解决 对于解决方案,我使用库Autofac作为DI提供程序并配置了我的服务,它通过Autofac的生存期事件公开了一个EventHandler 例如:
builder.RegisterType<MyService>().InstancePerRequest().OnActivated(e =>
{
var dep = e.Context.Resolve<MyEventHandler>();
e.Instance.EntitySaved += dep.OnEntitySaved;
});
builder.RegisterType().InstancePerRequest().OnActivated(e=>
{
var dep=e.Context.Resolve();
e、 Instance.EntitySaved+=dep.OnEntitySaved;
});
因此,无论我的服务注入到哪里,我都可以保证EventHandler始终被注册。我选择了OnActivated生存期事件而不是OnActivating,以避免循环依赖性问题;e、 g.EventHandler是否应间接使用MyService
致以最良好的祝愿,
丹尼尔
builder.RegisterType<MyService>().InstancePerRequest().OnActivated(e =>
{
var dep = e.Context.Resolve<MyEventHandler>();
e.Instance.EntitySaved += dep.OnEntitySaved;
});