Example #1
0
        internal static object?GetImplementation(Type baseType, params object[] args)
        {
            if (!LatestImplementations.ContainsKey(baseType.FullName()))
            {
                return(null);
            }

            var latestImplementationType = LatestImplementations[baseType.FullName()];

            return(Activator.CreateInstance(latestImplementationType, args));
        }
Example #2
0
        internal static object?GetImplementation(Type baseType, Type wrapperType, params object[] args)
        {
            if (!LatestImplementations.ContainsKey(baseType.FullName()))
            {
                return(null);
            }

            var latestImplementationType = LatestImplementations[baseType.FullName()];
            var obj = Activator.CreateInstance(latestImplementationType, args);

            return(baseType.IsAssignableFrom(latestImplementationType)
                ? obj
                : Activator.CreateInstance(wrapperType, obj) is IWrapper wrapperObject && wrapperObject.IsCorrect
                    ? wrapperObject
                    : null);
        }
Example #3
0
        private static void UpdateDependencies()
        {
            var interfaces = DI.GetAllTypes()
                             .Where(t => t.IsAbstract || t.IsInterface)
                             .Where(t => t.GetInterfaces(false).Any(i => i.FullName == typeof(IDependency).FullName));

            foreach (var @interface in interfaces)
            {
                var types = DI.GetAllTypes()
                            .Where(t => t.IsClass && !t.IsAbstract)
                            .Where(t => ReflectionUtils.ImplementsOrImplementsEquivalent(t, @interface));
                var tuple = VersionUtils.GetLastImplementation(Version, types);
                if (tuple != null && tuple.Value.Type != null)
                {
                    LatestImplementations.Add(@interface, tuple.Value.Type);
                }
            }
        }
Example #4
0
        private static void UpdateDependencies()
        {
            LatestImplementations.Clear();

            var bases = DI.GetAllTypes()
                        .Where(t => t.IsAbstract || t.IsInterface)
                        .Where(t =>
                               t.GetInterfaces(false).Any(i => i.FullName() == typeof(IDependency).FullName()) &&
                               t.GetInterfaces(true).All(i => FullName(i) != typeof(IWrapper).FullName()))
                        .Select(i => i.FullName())
                        .Distinct();

            foreach (var @base in bases)
            {
                var types = DI.GetAllTypes()
                            .Where(t => t.IsClass && !t.IsAbstract)
                            .Where(t => ReflectionUtils.ImplementsOrImplementsEquivalent(t, @base));
                var tuple = VersionUtils.GetLastImplementation(Version, types);
                if (tuple != null && tuple.Value.Type != null)
                {
                    LatestImplementations.Add(@base, tuple.Value.Type);
                }
            }
        }