为了能到远方,脚下的每一步都不能少.|

lmyyyy

园龄:2年8个月粉丝:7关注:10

1月14日总结

果用到动态代理,大家可能会有几种选择,排到前列的是Autofac+Castle、AspectCore和DoraInterception,
我将从我当时研究的经历,以及我遇到的场景,为大家展示下
聊一聊我为什么要费时费力的整合Microsoft.Extensions.DependencyInjection和Castle.Core
当时遇到的场景

直接上源码

public interface IEventHandler
{
Task HandleAsync(IEvent @event);

bool CanHandle(IEvent @event);

}

public interface IEventHandler : IEventHandler
where T : class, IEvent
{
Task HandleAsync(T @event);

bool IEventHandler.CanHandle(IEvent @event) => @event.GetType() == typeof(T);//语言特性:默认实现 2024-1-15 10:23:10
Task<bool> IEventHandler.HandleAsync(IEvent @event) => CanHandle((T)@event) //语言特性:默认实现 2024-1-15 10:23:10
? HandleAsync((T)@event)
: Task.FromResult(false);

}

public interface IEvent
{
public long Id { get; set; }
public DateTime OccurredOn { get; set; }
}

如上所示的接口定义了一个事件处理接口,其中HandleAsync方法是事件处理的入口,CanHandle方法用于判断事件是否可以处理,在程序解耦、异步、削峰填谷等场景中,如上的接口可以有很多的应用,也可以扩展到内存级别、RabbitMQ、Redis、Kafka、RocketMQ等中间件的适配的事件处理器,以提供更强大的性能和更丰富的应用场景。所以说这是一个比较通用的场景。
我们将为该处理器提供一个检查幂等的拦截器( Idempotent)
AspectCore

本文作者:lmyyyy

本文链接:https://www.cnblogs.com/lmyy/p/17966499

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   lmyyyy  阅读(3)  评论(0编辑  收藏  举报
历史上的今天:
2023-01-15 android开发day4_activity
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起