Exemple #1
0
        public static ServiceFinder AddTasksInfrastructure(this IServiceCollection services, IConfiguration configuration)
        {
            var assemblies = AssemblyLoadContext.Default.Assemblies.Where(a => a.FullName.Contains("Leftware"));
            var names      = assemblies.Select(a => a.FullName).ToList();

            foreach (var assembly in assemblies)
            {
                LoadReferencedAssembly(assembly);
            }

            var logger = CreateLogger(services, configuration);

            var dynamicLoader = new DynamicAssemblyLoader(configuration);

            dynamicLoader.Execute();

            var taskTypeLocator = new TaskTypeLocator(dynamicLoader, logger);

            services.AddSingleton(taskTypeLocator);

            var defaultProvider = new DefaultInjectionProvider(services);

            services.AddSingleton <IInjectionProvider>(defaultProvider);

            var finder = new ServiceFinder(defaultProvider, configuration, logger);

            finder.Find();

            var taskInjector = new TaskInjector(taskTypeLocator);

            taskInjector.Inject(defaultProvider);

            return(finder);
        }
Exemple #2
0
        public void Find_WithTypeNameThatIsInServices_ReturnsService()
        {
            var writers = new List <IWriter>()
            {
                new JsonWriter()
            };
            var serviceFinder = new ServiceFinder <IWriter>(writers);
            var service       = serviceFinder.Find("jsonWriter");

            Assert.IsInstanceOfType(service, typeof(JsonWriter));
        }
Exemple #3
0
        public void Find_WithTypeNameThatIsNotInServices_ReturnsNull()
        {
            var writers = new List <IWriter>()
            {
                new JsonWriter()
            };
            var serviceFinder = new ServiceFinder <IWriter>(writers);
            var service       = serviceFinder.Find("TestWriter");

            Assert.IsNull(service);
        }
Exemple #4
0
        IService exec <TKey>()
        {
            ServicesGenerator generator = new ServicesGenerator(new TypeIsClassValidator(), new ImplementationsFinder(new TypeImplementsInterfaceValidator()),
                                                                new ServiceGenerator(new ServiceFlagsGenerator(new ServiceFlagsProvider(new AttributesFinder(), new MemberGenerator(new MemberFlagsGenerator())), new ServiceFlagsIssuesResolver()),
                                                                                     new ServiceRegistrationGenerator(new ServiceRegistrationFlagGenerator(new BaseTypeFinder(), new ServiceRegistrationInterfacesGenerator(new RegistrationInterfacesFilter(new NamespaceInterfaceValidator()), new TypeContainsGenericParametersChecker(), new TypeGenericParametersProvider(), new InterfaceGenerator(new TypeGenericParametersProvider(), new TypeContainsGenericParametersChecker())), new ConstructorGenerator(new ParametersGenerator(new ParameterGenerator())), new ConstructorInfoListGenerator(), new DefaultConstructorInfoProvider())),
                                                                                     new ServiceInfoGenerator(), new ClassHasServiceFactoryChecker(),
                                                                                     new ServiceFactoryProvider(new InstancesCreator(new ConstructorInstanceCreator(new ConstructorInvoker(),
                                                                                                                                                                    new ConstructorParametersGenerator(new TypedMemberValueProvider(), new ConstructorParameterByTypeFinder(), new ServiceHasConstructorParametersChecker()),
                                                                                                                                                                    new ConstructorProvider(new ConstructorChecker(), new DefaultConstructorProvider(), new ConstructorGenerator(new ParametersGenerator(new ParameterGenerator()))), new ConstructorInfoListGenerator(), new ConstructorFinder(), new ConstructorListGenerator(new ConstructorGenerator(new ParametersGenerator(new ParameterGenerator()))), new ParametersValuesExtractor()))), new ServiceFactoryInvoker()));

            AssemblyList assemblies = new AssemblyList();
            IService     test1      = generator.GenerateServices(typeof(Test1), assemblies, null).First();
            IService     test2      = generator.GenerateServices(typeof(Test2), assemblies, null).First();

            ServiceList list = new ServiceList();

            list.AddServices(test1, test2);

            ServiceFinder finder = new ServiceFinder(new TypeContainsGenericParametersChecker(), new GenericServiceFinder(new TypeIsClassValidator(), new GenericClassFinder(new TypeGenericParametersProvider()), new GenericInterfaceFinder(new GenericTypesComparer(new TypeGenericParametersProvider(), new GenericArgumentsComparer()), new InterfacesExtractor())),
                                                     new ServiceByInterfaceFinder(new InterfacesExtractor(), new GenericTypesComparer(new TypeGenericParametersProvider(), new GenericArgumentsComparer())), new ServiceByClassFinder(), new TypeIsClassValidator());

            return(finder.Find(list, typeof(TKey)));
        }