Exemple #1
0
        /// <summary>
        /// 创建实例,isSingle表示是否为单例
        /// </summary>
        /// <param name="name"></param>
        /// <param name="obj"></param>
        /// <param name="isSingle"></param>
        public virtual bool Set(string name, object obj, bool isSingle)
        {
            var info = new FactoryInfo {
                Name = name, Target = obj, IsSingle = isSingle, AfterCuts = null, BeforeCuts = null
            };

            return(Set(info));
        }
Exemple #2
0
 /// <summary>
 /// 添加实例
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual bool Set(FactoryInfo info)
 {
     if (info == null)
     {
         return(false);
     }
     Factories = Factories.Where(it => !it.Name.Equals(info.Name)).ToList();
     Factories.Add(info);
     return(true);
 }
Exemple #3
0
 /// <summary>
 /// 创建IOC实例
 /// </summary>
 /// <param name="nodes"></param>
 /// <param name="methods"></param>
 protected virtual void AddIocByXmlNodes(XmlNodeList nodes, IDictionary <string, DelegateAopMethod> methods)
 {
     if (nodes == null || nodes.Count == 0)
     {
         return;
     }
     foreach (XmlNode node in nodes)
     {
         var info = new FactoryInfo
         {
             BeforeCuts = GetBeforeMothedByXmlNode(node, methods),
             AfterCuts  = GetAfterMothedByXmlNode(node, methods)
         };
         CreateByXmlNode(node, info);
     }
 }
Exemple #4
0
        /// <summary>
        /// 创建实例
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        protected virtual object Create(FactoryInfo info)
        {
            object target;
            var    obj = Activator.CreateInstance(info.Target.GetType());

            if ((info.BeforeCuts != null && info.BeforeCuts.Count > 0) || (info.AfterCuts != null && info.AfterCuts.Count > 0))
            {
                target = GetTransparentProxy(obj, info.BeforeCuts, info.AfterCuts);
            }
            else
            {
                target = obj;
            }
            TrySetProperty(target, info.Properties);
            return(target);
        }
Exemple #5
0
        /// <summary>
        /// 创建实例
        /// </summary>
        /// <param name="node"></param>
        /// <param name="info"></param>
        protected virtual void CreateByXmlNode(XmlNode node, FactoryInfo info)
        {
            if (node.Attributes == null)
            {
                return;
            }
            var obj = CreateClass(node.Attributes["ClassName"].Value);

            if ((info.BeforeCuts != null && info.BeforeCuts.Count > 0) || (info.AfterCuts != null && info.AfterCuts.Count > 0))
            {
                info.Target = GetTransparentProxy(obj, info.BeforeCuts, info.AfterCuts);
            }
            else
            {
                info.Target = obj;
            }
            if (info.Target == null)
            {
                return;
            }
            info.IsSingle = node.Attributes["IsSingle"] == null || Convert.ToBoolean(node.Attributes["IsSingle"].Value);
            info.Name     = node.Attributes["Name"].Value;
            Set(info);
        }