/// <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)); }
/// <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); }
/// <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); } }
/// <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); }
/// <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); }