Exemple #1
0
        /// <summary>
        /// 配置服务
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public IServiceProvider ConfigureServices(IServiceCollection services, IConfiguration configuration)
        {
            var typeFinder = new AssemblyTypeFinder();

            try
            {
                services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();

                //var config = GetServiceProvider().GetRequiredService<ILConfig>();

                //配置服务
                var startUps = typeFinder.FindTypesByInterface <IStartUp>();

                var instances = startUps.Select(r => (IStartUp)Activator.CreateInstance(r))
                                .OrderBy(r => r.Order);

                foreach (var register in instances)
                {
                    register.ConfigureServices(services);
                }

                RegisterDependencies(services, typeFinder);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }

            return(ServiceProvider);
        }
        internal IAdminPacketService Create()
        {
            IEnumerable <Type> packetTransformerTypes = new AssemblyTypeFinder(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.PacketTransformers")
                                                        .WithTypeMatcher(new ClassTypeMatcher())
                                                        .WithTypeMatcher(ImplementsTypeMatcher.Create <IPacketTransformer>())
                                                        .Find();

            IEnumerable <Type> messageTransformerTypes = new AssemblyTypeFinder(Assembly.GetExecutingAssembly(), $"{GetType().Namespace}.MessageTransformers")
                                                         .WithTypeMatcher(new ClassTypeMatcher())
                                                         .WithTypeMatcher(ImplementsTypeMatcher.Create <IMessageTransformer>())
                                                         .Find();

            IPacketTransformer[]  packetTransformers  = new IPacketTransformer[packetTransformerTypes.Count()];
            IMessageTransformer[] messageTransformers = new IMessageTransformer[messageTransformerTypes.Count()];

            for (int i = 0; i < packetTransformers.Length; ++i)
            {
                packetTransformers[i] = (IPacketTransformer)Activator.CreateInstance(packetTransformerTypes.ElementAt(i));
            }

            for (int i = 0; i < messageTransformers.Length; ++i)
            {
                messageTransformers[i] = (IMessageTransformer)Activator.CreateInstance(messageTransformerTypes.ElementAt(i));
            }

            return(new AdminPacketService(packetTransformers, messageTransformers));
        }
Exemple #3
0
        /// <summary>
        /// 获取所有爬虫信息
        /// </summary>
        public IList <Type> GetCrawlers()
        {
            var att        = typeof(SpiderAttribute);
            var typeFinder = new AssemblyTypeFinder();
            var crawlers   = typeFinder.FindTypesByInterface <ISpiderCrawler>();

            return(crawlers.Where(c => c.GetCustomAttribute(att) != null).ToList());
        }
        public void FindProperClasses_BasedOnTypeMatchers()
        {
            var finder = new AssemblyTypeFinder(Assembly.GetExecutingAssembly(), GetType().Namespace + ".TestTypes")
                         .WithTypeMatcher(new ClassTypeMatcher())
                         .WithTypeMatcher(new ImplementsTypeMatcher(typeof(IAnimal)));

            // Sometimes there is no full info about given type. It's better to compare results by guid
            var foundTypes = finder.Find().Select(x => x.GUID);

            Assert.Contains(typeof(Cat).GUID, foundTypes);
            Assert.Contains(typeof(Dog).GUID, foundTypes);
        }
        public AdminEventFactory()
        {
            var creatorTypes = new AssemblyTypeFinder(Assembly.GetExecutingAssembly(), GetType().Namespace + ".Creators")
                               .WithTypeMatcher(new ClassTypeMatcher())
                               .WithTypeMatcher(new ImplementsTypeMatcher(typeof(IEventCreator)))
                               .Find();

            var creators = new IEventCreator[creatorTypes.Count()];

            for (int i = 0; i < creators.Length; ++i)
            {
                creators[i] = (IEventCreator)Activator.CreateInstance(creatorTypes.ElementAt(i));
            }

            this.creators = creators.ToDictionary(x => x.SupportedMessageType);
        }