示例#1
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);
                }
            }
        }
        internal static IEnumerable <TBase> GetBaseImplementations <TBase, TWrapper>(params object[] args)
            where TBase : class, IDependencyBase
            where TWrapper : TBase, IWrapper
        {
            var baseTypes = TaleWorlds.Core.Extensions.DistinctBy(DI.GetAllTypes()
                                                                  .Where(t => t.IsAbstract || t.IsInterface)
                                                                  .Where(t => ReflectionUtils.ImplementsOrImplementsEquivalent(t, typeof(TBase), false)), t => t.FullName);

            foreach (var baseType in baseTypes)
            {
                if (baseType == typeof(TWrapper))
                {
                    continue;
                }

                var implementation = GetImplementation(baseType, typeof(TWrapper), args);
                if (implementation is TBase @base)
                {
                    yield return(@base);
                }
            }
        }
示例#3
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);
                }
            }
        }
        internal static IEnumerable <TBase> GetBaseImplementations <TBase>(params object[] args)
            where TBase : class, IDependencyBase
        {
            var baseTypes = TaleWorlds.Core.Extensions.DistinctBy(DI.GetAllTypes()
                                                                  .Where(t => t.IsAbstract || t.IsInterface)
                                                                  .Where(t => ReflectionUtils.ImplementsOrImplementsEquivalent(t, typeof(TBase), false)), t => t.FullName);

            foreach (var baseType in baseTypes)
            {
                var wrapper = baseType.Assembly.GetTypes()
                              .Where(t => t.IsClass && !t.IsAbstract)
                              .FirstOrDefault(t => typeof(IWrapper).IsAssignableFrom(t) && baseType.IsAssignableFrom(t));
                if (wrapper == null)
                {
                    continue;
                }

                var implementation = GetImplementation(baseType, wrapper, Version, args);
                if (implementation is TBase @base)
                {
                    yield return(@base);
                }
            }
        }
示例#5
0
        public static IEnumerable <ISettingsPropertyDefinition> GetProperties(object @object)
        {
            var settingPropertyDefinitionsDiscoverers = DI.GetBaseImplementations <ISettingsPropertyDiscoverer>();

            return(settingPropertyDefinitionsDiscoverers.SelectMany(d => d.GetProperties(@object)));
        }