Exemplo n.º 1
0
        /// <summary>
        /// Adds all types found <paramref name="service"/> and marked with <see cref="QueryHandlerAttribute"/> to the <paramref name="dependencyContainer"/>.
        /// </summary>
        /// <param name="service">Type enumerating service.</param>
        /// <param name="dependencyContainer">Container to register handlers to.</param>
        /// <param name="isExecutedForLatelyLoadedAssemblies">Whether to add query handlers from lately loaded assemblies.</param>
        /// <returns><paramref name="service"/>.</returns>
        public static ITypeExecutorService AddQueryHandlers(this ITypeExecutorService service, IDependencyContainer dependencyContainer, bool isExecutedForLatelyLoadedAssemblies = true)
        {
            Ensure.NotNull(service, "service");
            Ensure.NotNull(dependencyContainer, "dependencyContainer");
            service
            .AddFiltered(isExecutedForLatelyLoadedAssemblies)
            .AddFilterNotInterface()
            .AddFilterNotAbstract()
            .AddFilterHasAttribute <QueryHandlerAttribute>()
            .AddHandler(t => AddQueryHandler(dependencyContainer, t));

            return(service);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Adds all types found <paramref name="service"/> and marked with <see cref="QueryHandlerAttribute"/> to the <paramref name="collection"/>.
        /// </summary>
        /// <param name="service">Type enumerating service.</param>
        /// <param name="collection">Query handler collection to add handlers to..</param>
        /// <param name="isExecutedForLatelyLoadedAssemblies">Whether to add query handlers from lately loaded assemblies.</param>
        /// <returns><paramref name="service"/>.</returns>
        public static ITypeExecutorService AddQueryHandlers(this ITypeExecutorService service, IQueryHandlerCollection collection, bool isExecutedForLatelyLoadedAssemblies = true)
        {
            Ensure.NotNull(service, "service");
            Ensure.NotNull(collection, "collection");
            service
            .AddFiltered(isExecutedForLatelyLoadedAssemblies)
            .AddFilterNotInterface()
            .AddFilterNotAbstract()
            .AddFilterHasDefaultConstructor()
            .AddFilterHasAttribute <QueryHandlerAttribute>()
            .AddHandler(t => AddQueryHandler(collection, t));

            return(service);
        }
        /// <summary>
        /// Adds all types found <paramref name="service"/> and marked with <see cref="ConverterAttribute"/> to the <paramref name="repository"/>.
        /// </summary>
        /// <param name="service">Type enumerating service.</param>
        /// <param name="repository">Repository to add converters to.</param>
        /// <param name="isExecutedForLatelyLoadedAssemblies">Whether to add converters from lately loaded assemblies.</param>
        /// <returns><paramref name="service"/>.</returns>
        public static ITypeExecutorService AddConverters(this ITypeExecutorService service, IConverterRepository repository, bool isExecutedForLatelyLoadedAssemblies = true)
        {
            Ensure.NotNull(service, "service");
            Ensure.NotNull(repository, "repository");
            service
            .AddFiltered(isExecutedForLatelyLoadedAssemblies)
            .AddFilterNotInterface()
            .AddFilterNotAbstract()
            .AddFilterHasDefaultConstructor()
            .AddFilterHasAttribute <ConverterAttribute>()
            .AddHandler(t => AddConverter(repository, t));

            return(service);
        }
        public void BaseComposition()
        {
            StringBuilder result = new StringBuilder();

            IReflectionService reflectionService = ReflectionFactory.FromCurrentAppDomain();

            using (ITypeExecutorService executors = reflectionService.PrepareTypeExecutors())
            {
                executors.AddFiltered(true)
                .AddFilterNotInterface()
                .AddFilterNotAbstract()
                .AddHandler(t => result.AppendLine(t.FullName));
            }

            File.WriteAllText("C:/Temp/Files.txt", result.ToString());
        }
        public void AttributeFiltering()
        {
            IReflectionService reflectionService = ReflectionFactory.FromCurrentAppDomain();

            int matchCount = 0;

            using (ITypeExecutorService executors = reflectionService.PrepareTypeExecutors())
            {
                executors.AddFiltered(false)
                .AddFilterHasAttribute <ConverterAttribute>()
                .AddHandler(t =>
                {
                    Assert.AreEqual(typeof(IntToStringConverter), t);
                    matchCount++;
                });
            }

            Assert.AreEqual(1, matchCount);
        }
        public void AbstractFiltering()
        {
            IReflectionService reflectionService = ReflectionFactory.FromCurrentAppDomain();

            int matchCount = 0;

            using (ITypeExecutorService executors = reflectionService.PrepareTypeExecutors())
            {
                executors.AddFiltered(false)
                .AddFilterNotAbstract()
                .AddHandler(t =>
                {
                    Assert.AreEqual(false, t.IsAbstract);
                    matchCount++;
                });
            }

            Ensure.Positive(matchCount, "matchCount");
        }