Exemplo n.º 1
0
        /// <summary>
        /// 初始化全局IoC容器
        /// </summary>
        public static AppStartup InitIoC(this AppStartup startup, IServiceLocator serviceLocator)
        {
            if (serviceLocator == null)
            {
                throw new Exception("IServiceLocator对象不能为空");
            }

            EasyIocContainer.InitIocContainer(serviceLocator);

            return(startup);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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());
        }
Exemplo n.º 5
0
        /// <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);
        }