Пример #1
0
 public static void TrapInject <TIn, TOut>(this IInjectable <TIn, TOut> injectable, Func <TIn, bool> filter,
                                           Func <TIn, TOut> func, InjectionPriority priority = InjectionPriority.Middle)
 {
     injectable.Inject(v => filter(v)
         ? InjectionResult.Trap <TIn, TOut>(func(v))
         : InjectionResult.PassThru <TIn, TOut>(), priority);
 }
Пример #2
0
        public static void LoadInjections(Assembly assembly, string fileName)
        {
            Type initType = typeof(IInjectable);

            List <Type> injectables = assembly.GetTypes().Where(x => initType.IsAssignableFrom(x)).ToList();

            List <IInjectable> injects = new List <IInjectable>();

            foreach (Type iType in injectables)
            {
                IInjectable inject     = (IInjectable)Activator.CreateInstance(iType);
                string      pluginPath = runningPath + "\\" + inject.initHandle + "\\";

                if (!Directory.Exists(pluginPath))
                {
                    Directory.CreateDirectory(pluginPath);
                }

                inject.basePath = pluginPath;

                injects.Add(inject);
            }

            injects.Sort((i1, i2) => i1.priority.CompareTo(i2.priority));
        }
Пример #3
0
 public static void TrapInject <TIn>(this IInjectable <TIn> injectable, Func <TIn, bool> filter,
                                     Action <TIn> func, InjectionPriority priority = InjectionPriority.Middle)
 {
     injectable.Inject(filter, v =>
     {
         func(v);
         return(InjectionResult.Trap <TIn>());
     }, priority);
 }
Пример #4
0
 /// <summary>
 /// 执行注入操作
 /// </summary>
 /// <remarks>此方法将会注入并初始化类中所有标记了InjectAttribute的Property</remarks>
 public static void Inject(this IInjectable injectable)
 {
     injectable.InjectionContext = injectable.InjectionContext ?? InjectionContext.Default;
     injectable.GetType()
     .GetProperties()
     .Where(m => m.GetCustomAttributes(typeof(InjectAttribute), true).Any())
     .ToList()
     .ForEach(m => m.SetValue(injectable, injectable.InjectionContext.GetObject(m.PropertyType), null));
 }
Пример #5
0
 //constructor requires the loosely coupled injectable
 public EverythingsInjected(IInjectable constructorInjected)
 {
     //have to set the default with property injected
     _propertyInjected = GetIInjectable();
     
     //retain the constructor injected injectable
     _constructorInjected = constructorInjected;
     //using basic interface injection
     _interfaceInjected = GetIInjectable();
 }
Пример #6
0
        public void CompileParallel(IEnumerable <ActionSource> input, IInjectable <UnityComponentSource> output)
        {
            int count = -1;

            Parallel.ForEach(input, src =>
            {
                var builder = new StringBuilder(Config.MAX_KEY_LENGTH);

                for (int i = src.startOffset; i != src.count; i++)
                {
                    if (src.context[i] == ' ')
                    {
                        output.Push()
                    }
                    else
                    {
                        builder.Append(src.context[i]);
                    }
                }
            });
        }
Пример #7
0
        public Dictionary <InjectableId, IInjectable[]> InjectAllRequiredFields(MonoBehaviour behaviour, Entity entity)
        {
            var behaviourType = behaviour.GetType();

            EnsureLoaded(behaviourType);
            var createdInjectables = new Dictionary <InjectableId, IInjectable[]>();

            foreach (var idToFields in fieldInfoCache[behaviourType])
            {
                var id          = idToFields.Key;
                var fields      = idToFields.Value;
                var injectables = new IInjectable[fields.Length];
                for (var i = 0; i < fields.Length; i++)
                {
                    injectables[i] = Inject(behaviour, id, entity, fields[i]);
                }

                createdInjectables[id] = injectables;
            }

            return(createdInjectables);
        }
        public void InjectToInjectable(IInjectable injectable)
        {
            var injectMethod   = ReflectionUtils.GetMethodByAttribute(injectable.GetType(), typeof(InjectAttribute));
            var parameterInfos = injectMethod.GetParameters();
            var parameters     = new object[parameterInfos.Length];

            for (var i = 0; i < parameterInfos.Length; i++)
            {
                var paramType = parameterInfos[i].ParameterType;

                if (_dependenciesProvider.TryGet <object>(paramType, out var param))
                {
                    parameters[i] = param;
                }
                else
                {
                    throw new InvalidOperationException($"{paramType.FullName} is not included in the dependencies");
                }
            }


            injectMethod.Invoke(injectable, parameters);
        }
Пример #9
0
        public void OnUpdate(IEnumerable <ActionSource> input, IInjectable <UnityComponentSource> output)
        {
            Parallel.ForEach(input, src =>
            {
                var builder = _builderPool.GetObject();

                string cmd;
                string arg;
                for (int i = src.startOffset; i != src.count; i++)
                {
                    if (src.context[i] == ' ')
                    {
                    }
                    else
                    {
                        builder.Append(src.context[i]);
                    }
                }

                output.Push();

                _builderPool.PutObject(builder);
            });
        }
Пример #10
0
 public Consumer(IInjectable <Item> item)
 {
     Item = item;
 }
Пример #11
0
 public void OnInject(IInjectable <UnityComponentSource> output)
 {
 }
Пример #12
0
        private void Form1_Load(object sender, EventArgs e)
        {
            instance = this;

            runningPath = Directory.GetCurrentDirectory();
            PluginManager.runningPath = runningPath + "\\Plugins";

            string settingFilePath = runningPath + "\\Settings.txt";

            if (!File.Exists(settingFilePath))
            {
                SaveSettings(new Settings(), settingFilePath);
            }

            string json = File.ReadAllText(settingFilePath);

            settings = JsonConvert.DeserializeObject <Settings>(json);

            xResTB.Text = settings.xRes.ToString();
            yResTB.Text = settings.yRes.ToString();

            channelTB.Text    = settings.lastChannel;
            emailTB.Text      = settings.lastEmail;
            AutoSave.Interval = settings.tickDelay;

            string pluginPath = runningPath + "\\Plugins\\DLLs";

            if (!Directory.Exists(pluginPath))
            {
                Directory.CreateDirectory(pluginPath);
            }


            CommandHandler.Initialize(channelTB.Text, runningPath);



            foreach (string file in Directory.GetFiles(pluginPath))
            {
                if (Path.GetExtension(file) == ".dll")
                {
                    Assembly dll  = Assembly.LoadFile(file);
                    string   name = Path.GetFileName(file);

                    PluginManager.LoadPlugins(dll);
                    PluginManager.LoadCommands(dll, name);
                    PluginManager.LoadInjections(dll, name);
                }
            }

            for (int i = 0; i < PluginManager.injects.Count; i++)
            {
                IInjectable inject = PluginManager.injects[i];
                if (inject.Initialize())
                {
                    Debug.Log("Injected " + inject.initHandle + " successfully");
                }
                else
                {
                    Debug.LogError("Injected " + inject.initHandle + " unsuccessfully");
                }
            }
        }
Пример #13
0
 public DemoHttpFunction(IInjectable injectable)
 {
     _injectable = injectable;
 }
 public Activity(IInjectable injectable) => _injectable = injectable;
Пример #15
0
 public static void Inject <TIn>(this IInjectable <TIn> injectable, Func <TIn, bool> filter,
                                 Func <TIn, IInjectionResult <TIn> > func, InjectionPriority priority = InjectionPriority.Middle)
 {
     injectable.Inject(v => filter(v) ? func(v) : InjectionResult.PassThru <TIn>(), priority);
 }
Пример #16
0
 public TestFuncCreationComplex(IInjectable injectionTest, IStartupConfiguration configuration, IShutdownHandler shutdownHandler)
 {
     InjectionTest = injectionTest;
 }
 public DemoEntity(IInjectable injectable) => _injectable = injectable;