예제 #1
0
 /// <summary>
 /// 输出对象反射信息
 /// </summary>
 static public void reflex(object instance)
 {
     Logger.Log(instance.ToString());
     Vitamin.logFileds(instance.GetType());
     Vitamin.logPropertys(instance.GetType());
     Vitamin.logMethods(instance.GetType());
 }
예제 #2
0
 /// <summary>
 /// 输出类型反射信息
 /// </summary>
 static public void reflex(Type type)
 {
     Logger.to("[REFLEX]", ConsoleColor.Magenta, "-----------[" + type.ToString() + "]------------");
     Vitamin.logFileds(type);
     Vitamin.logPropertys(type);
     Vitamin.logMethods(type);
     Logger.to("[REFLEX]", ConsoleColor.Magenta, "------------------------------------------");
 }
예제 #3
0
        /// <summary>
        /// 创建实例
        /// 此方法适用于框架外的类有依赖注入的需求的情况,请使用该方法实例化该类
        /// </summary>
        static public T createObject <T>()
        {
            Type   type = typeof(T);
            object obj  = Activator.CreateInstance(type);

            Vitamin.injectModel(obj, type);
            Vitamin.injectInstance(obj, type);
            return((T)obj);
        }
예제 #4
0
 /// <summary>
 /// 获取单例
 /// 通过此接口获取的单例会有相关的依赖注入
 /// </summary>
 static public object getInstance(Type type)
 {
     if (Vitamin.__instances.GetValueOrDefault(type) == null)
     {
         object instance = Activator.CreateInstance(type);
         Vitamin.injectModel(instance, instance.GetType());
         Vitamin.__instances[type] = instance;
     }
     return(Vitamin.__instances[type]);
 }
예제 #5
0
        /// <summary>
        /// 注入单例
        /// 仅供内部调用,如果你希望框架外的类有依赖注入,请使用createObject实例化该类
        /// </summary>
        static private bool injectInstance(object target, Type type)
        {
            bool result       = true;
            var  instanceType = typeof(Instance);

            FieldInfo[] filedInfos = type.GetFields();
            foreach (FieldInfo info in filedInfos)
            {
                if (Attribute.IsDefined(info, instanceType))
                {
                    info.SetValue(target, Vitamin.getInstance(info.FieldType));
                }
            }
            return(result);
        }
예제 #6
0
        /// <summary>
        /// 获取组件
        /// 通过框架接口获取的组件才会有相关的依赖注入
        /// </summary>
        static public T getView <T>() where T : ViewBase
        {
            Type viewType = typeof(T);

            if (Vitamin.__views.ContainsKey(viewType))
            {
                if (Vitamin.__views.GetValueOrDefault(viewType) == null)
                {
                    ViewBase view = (ViewBase)Activator.CreateInstance(viewType);
                    Vitamin.injectModel(view, viewType);
                    Vitamin.__views[viewType] = view;
                }
            }
            return((T)Vitamin.__views[viewType]);
        }
예제 #7
0
 protected void execCommand(string cmdRoute, params object[] args)
 {
     Vitamin.execCommand(cmdRoute, args);
 }
예제 #8
0
        static public void initialize()
        {
            Vitamin.__views     = new Dictionary <Type, ViewBase>();
            Vitamin.__modles    = new Dictionary <Type, ModelBase>();
            Vitamin.__cmds      = new Dictionary <string, CommandBase>();
            Vitamin.__instances = new Dictionary <Type, object>();

            var types         = Assembly.GetCallingAssembly().GetTypes();
            var modelBaseType = typeof(ModelBase);
            var viewBaseType  = typeof(ViewBase);
            var cmdBaseType   = typeof(CommandBase);

            var net = new Net();

            foreach (var type in types)
            {
                //获取基类
                var baseType = type.BaseType;
                if (baseType == modelBaseType)
                {
                    ModelBase model = Activator.CreateInstance(type) as ModelBase;
                    Vitamin.__modles.Add(type, model);
                }
                else if (baseType == viewBaseType)
                {
                    Vitamin.__views.Add(type, null);
                }
                else if (baseType == cmdBaseType)
                {
                    CmdRoute des = (CmdRoute)type.GetCustomAttribute(typeof(CmdRoute));
                    if (des == null)
                    {
                        Logger.Error(baseType.ToString() + "没有添加描述信息!");
                    }
                    else
                    {
                        CommandBase cmd = Activator.CreateInstance(type) as CommandBase;
                        cmd.net = net;
                        Vitamin.__cmds.Add(des.routId, cmd);
                    }
                }
            }

            while (true)
            {
                var allInject = true;
                foreach (var model in Vitamin.__modles)
                {
                    //MethodInfo method = typeof(Vitamin).GetMethod("injectModel");//先获取到DisplayType<T>的MethodInfo反射对象
                    //method.MakeGenericMethod(new Type[] { model.Value.GetType() }).Invoke(Vitamin, model.Value);//然后使用MethodInfo反射对象调用
                    bool result = Vitamin.injectModel(model.Value, model.Value.GetType());
                    if (!result)
                    {
                        allInject = false;
                    }
                }
                if (allInject)
                {
                    foreach (var model in Vitamin.__modles)
                    {
                        Vitamin.injectInstance(model.Value, model.Value.GetType());
                        model.Value.initialize();
                    }
                    break;
                }
            }

            foreach (var cmd in Vitamin.__cmds)
            {
                Vitamin.injectInstance(cmd.Value, cmd.Value.GetType());
                bool result = Vitamin.injectModel(cmd.Value, cmd.Value.GetType());
            }
            Logger.Info("🎇✨🎉✨🛠💊 - Vitamin Start - 💊🛠✨🎉✨🎇");
        }