/// <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)); }
/// <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); }