/// <summary> /// 初始化全局IoC容器 /// </summary> public static AppStartup InitIoC(this AppStartup startup, IServiceLocator serviceLocator) { if (serviceLocator == null) { throw new Exception("IServiceLocator对象不能为空"); } EasyIocContainer.InitIocContainer(serviceLocator); return(startup); }
/// <summary> /// 初始化MQ消费者事件绑定(在IOC容器生成后执行) /// </summary> public static AppStartup BindMqConsumer(this AppStartup startup) { if (EasyIocContainer.Container == null) { throw new Exception("初始化MQ消费者事件绑定必须在IOC容器生成后执行!"); } var binder = EasyIocContainer.GetInstance <IMqConsumerBinder>(); binder.BindConsumer(); return(startup); }
/// <summary> /// 初始化全局IoC容器 /// </summary> public static AppStartup InitIoC(this AppStartup startup, bool hasExtraIocReg) { IServiceLocator serviceLocator = new EasyAutofac(hasExtraIocReg: hasExtraIocReg).BuildServiceLocator(); if (serviceLocator == null) { throw new Exception("IServiceLocator对象不能为空"); } EasyIocContainer.InitIocContainer(serviceLocator); return(startup); }
public static IList <MqConsumerExecutor> DiscoverConsumers() { var consumerExecutorList = new List <MqConsumerExecutor>(); var mqConsumerList = EasyIocContainer.GetAllInstances <IMqConsumer>(); foreach (var service in mqConsumerList) { var typeInfo = service.GetType().GetTypeInfo(); if (!typeof(IMqConsumer).GetTypeInfo().IsAssignableFrom(typeInfo)) { continue; } var consumer = GetConsumerByMqConsumerAttribute(typeInfo); consumerExecutorList.AddRange(consumer); } return(consumerExecutorList.Distinct(new ConsumerExecutorComparer()).ToList()); }
/// <summary> /// 检测是否是攻击的请求 /// </summary> private static bool CheckHasLimitAttack(HttpRequest request, string routeName) { if (!int.TryParse(_freqCount, out int maxCount)) { //如果没有配置,默认一秒钟最多3次请求 maxCount = 3; } //获取IP地址 string realIP = request.GetRealIP(); //按具体【RouteName】来预防 string defendkey = DefendAttackContainer.AssemblyName + routeName; IEasyCache easyCache = EasyIocContainer.GetInstance <IEasyCache>(); //判别是否存在流量攻击 string key = $"{realIP}:{defendkey}"; bool hasAttack = easyCache.CheckIsOverStep(key, TimeType.秒, maxCount); return(hasAttack); }
private static object GetInstance(MqConsumerExecutor consumerExecutor) { var instance = EasyIocContainer.GetInstance <IMqConsumer>(consumerExecutor.TypeInfo.Name); return(instance); }