/// <summary> /// Factory method for getting concrete /// <see cref="Spring.Objects.IEventHandlerValue"/> instances. /// </summary> /// <param name="methodName"> /// The name of the event handler method. This may be straight text, a regular /// expression, <see langword="null"/>, or empty. /// </param> /// <param name="eventName"> /// The name of the event being wired. This too may be straight text, a regular /// expression, <see langword="null"/>, or empty. /// </param> /// <returns> /// A concrete <see cref="Spring.Objects.IEventHandlerValue"/> /// instance. /// </returns> public static IEventHandlerValue CreateEventHandlerValue( string methodName, string eventName) { bool weAreAutowiring = false; if (StringUtils.HasText(eventName)) { // does the value contain regular expression characters? mmm, totally trent... if (Regex.IsMatch(eventName, @"[\*\.\[\]\{\},\(\)\$\^\+]+")) { // wildcarded event name weAreAutowiring = true; } } else { // we're definitely autowiring based on the event name weAreAutowiring = true; } if (!weAreAutowiring) { if (StringUtils.HasText(methodName)) { // does the value contain the string ${event}? if (methodName.IndexOf("${event}") >= 0) { // wildcarded method name weAreAutowiring = true; } } else { // we're definitely autowiring based on the method name weAreAutowiring = true; } } IEventHandlerValue myHandler; if (weAreAutowiring) { myHandler = new AutoWiringEventHandlerValue(); } else { myHandler = new InstanceEventHandlerValue(); } myHandler.EventName = eventName; myHandler.MethodName = methodName; return(myHandler); }
public void InstantiationFromOther() { RootObjectDefinition other = new RootObjectDefinition(typeof(TestObject), AutoWiringMode.Constructor); other.IsSingleton = false; other.InitMethodName = "Umberto Eco"; other.DestroyMethodName = "Pedulismus"; other.ConstructorArgumentValues = new ConstructorArgumentValues(); other.DependencyCheck = DependencyCheckingMode.Objects; other.DependsOn = new string[] { "Jimmy", "Joyce" }; other.EventHandlerValues = new EventValues(); other.IsAbstract = true; other.IsLazyInit = true; other.FactoryMethodName = "IfINeedYouIllJustUseYourSimpleName"; other.FactoryObjectName = "PerspirationShop"; other.ResourceDescription = "Ohhh"; other.PropertyValues = new MutablePropertyValues(); other.PropertyValues.Add("Age", 100); InstanceEventHandlerValue handler = new InstanceEventHandlerValue(new TestObject(), "Ping"); handler.EventName = "Bing"; other.EventHandlerValues.AddHandler(handler); other.ConstructorArgumentValues.AddGenericArgumentValue("Wulf", "Sternhammer"); RootObjectDefinition def = new RootObjectDefinition(other); // ... Assert.AreEqual(typeof(TestObject), def.ObjectType); Assert.AreEqual(AutoWiringMode.Constructor, def.AutowireMode); Assert.IsFalse(def.IsSingleton); Assert.AreEqual("Umberto Eco", def.InitMethodName); Assert.AreEqual("Pedulismus", def.DestroyMethodName); Assert.AreEqual(DependencyCheckingMode.Objects, def.DependencyCheck); Assert.IsTrue(def.IsAbstract); Assert.IsTrue(def.IsLazyInit); Assert.AreEqual("IfINeedYouIllJustUseYourSimpleName", def.FactoryMethodName); Assert.AreEqual("PerspirationShop", def.FactoryObjectName); Assert.AreEqual("Ohhh", def.ResourceDescription); Assert.IsTrue(def.HasConstructorArgumentValues); Assert.AreEqual(other.ConstructorArgumentValues.ArgumentCount, def.ConstructorArgumentValues.ArgumentCount); Assert.AreEqual(other.PropertyValues.PropertyValues.Length, def.PropertyValues.PropertyValues.Length); Assert.AreEqual(other.EventHandlerValues.Events.Count, def.EventHandlerValues.Events.Count); }
public void OverrideFromOther() { RootObjectDefinition rod = new RootObjectDefinition(typeof(TestObject), AutoWiringMode.Constructor); rod.IsSingleton = false; rod.InitMethodName = "Umberto Eco"; rod.DestroyMethodName = "Pedulismus"; rod.ConstructorArgumentValues = new ConstructorArgumentValues(); rod.ConstructorArgumentValues.AddGenericArgumentValue("Wulf", "Sternhammer"); rod.DependencyCheck = DependencyCheckingMode.Objects; rod.DependsOn = new string[] { "Jimmy", "Joyce" }; rod.IsAbstract = true; rod.IsLazyInit = true; rod.FactoryMethodName = "IfINeedYouIllJustUseYourSimpleName"; rod.FactoryObjectName = "PerspirationShop"; rod.ResourceDescription = "Ohhh"; rod.PropertyValues = new MutablePropertyValues(); rod.PropertyValues.Add("Age", 100); rod.EventHandlerValues = new EventValues(); InstanceEventHandlerValue handler = new InstanceEventHandlerValue(new TestObject(), "Ping"); handler.EventName = "Bing"; rod.EventHandlerValues.AddHandler(handler); ChildObjectDefinition cod = new ChildObjectDefinition("parent"); cod.ObjectTypeName = "ChildObjectTypeName"; cod.IsSingleton = true; cod.AutowireMode = AutoWiringMode.ByType; cod.InitMethodName = "InitChild"; cod.DestroyMethodName = "DestroyChild"; cod.ConstructorArgumentValues = new ConstructorArgumentValues(); cod.ConstructorArgumentValues.AddNamedArgumentValue("ctorarg", "ctorarg-value"); cod.DependencyCheck = DependencyCheckingMode.None; cod.DependsOn = new string[] { "Aleks", "Mark" }; cod.IsAbstract = false; cod.IsLazyInit = false; cod.FactoryMethodName = "ChildFactoryMethodName"; cod.FactoryObjectName = "ChildFactoryObjectName"; cod.ResourceDescription = "ChildResourceDescription"; cod.PropertyValues = new MutablePropertyValues(); cod.PropertyValues.Add("Prop1", "Val1"); cod.PropertyValues.Add("Age", 50); cod.EventHandlerValues = new EventValues(); handler = new InstanceEventHandlerValue(new TestObject(), "Pong"); handler.EventName = "Bong"; cod.EventHandlerValues.AddHandler(handler); rod.OverrideFrom(cod); // ... Assert.AreEqual("ChildObjectTypeName", rod.ObjectTypeName); Assert.AreEqual(AutoWiringMode.ByType, rod.AutowireMode); Assert.AreEqual(true, rod.IsSingleton); Assert.AreEqual("InitChild", rod.InitMethodName); Assert.AreEqual("DestroyChild", rod.DestroyMethodName); Assert.AreEqual(DependencyCheckingMode.None, rod.DependencyCheck); Assert.AreEqual(4, rod.DependsOn.Length); Assert.AreEqual(false, rod.IsAbstract); Assert.AreEqual(false, rod.IsLazyInit); Assert.AreEqual("ChildFactoryMethodName", rod.FactoryMethodName); Assert.AreEqual("ChildFactoryObjectName", rod.FactoryObjectName); Assert.AreEqual("ChildResourceDescription", rod.ResourceDescription); Assert.AreEqual(2, rod.ConstructorArgumentValues.ArgumentCount); Assert.AreEqual(2, rod.PropertyValues.PropertyValues.Length); Assert.AreEqual("Val1", rod.PropertyValues.GetPropertyValue("Prop1").Value); Assert.AreEqual(50, rod.PropertyValues.GetPropertyValue("Age").Value); Assert.AreEqual(2, rod.EventHandlerValues.Events.Count); }