public void SunnyDayReplaceMethod_WithArgumentAcceptingReplacer()
        {
            RootObjectDefinition replacerDef = new RootObjectDefinition(typeof(NewsFeedFactory));

            RootObjectDefinition   managerDef  = new RootObjectDefinition(typeof(NewsFeedManagerWith_Replace_MethodThatTakesArguments));
            ReplacedMethodOverride theOverride = new ReplacedMethodOverride("CreateNewsFeed", "replacer");

            // we must specify parameter type fragments...
            theOverride.AddTypeIdentifier(typeof(string).FullName);
            managerDef.MethodOverrides.Add(theOverride);

            DefaultListableObjectFactory factory = new DefaultListableObjectFactory();

            factory.RegisterObjectDefinition("manager", managerDef);
            factory.RegisterObjectDefinition("replacer", replacerDef);
            NewsFeedManagerWith_Replace_MethodThatTakesArguments manager = (NewsFeedManagerWith_Replace_MethodThatTakesArguments)factory["manager"];
            NewsFeed feed1 = manager.CreateNewsFeed("So sad... to be all alone in the world");

            Assert.IsNotNull(feed1, "The CreateNewsFeed() method is not being replaced.");
            Assert.AreEqual("So sad... to be all alone in the world", feed1.Name);
            NewsFeed feed2 = manager.CreateNewsFeed("Oh Muzzy!");

            // NewsFeedFactory always yields a new NewsFeed (see class definition below)...
            Assert.IsFalse(ReferenceEquals(feed1, feed2));
        }
        public void SunnyDayReplaceMethod_WithArgumentAcceptingReplacerWithNoTypeFragmentsSpecified()
        {
            RootObjectDefinition replacerDef = new RootObjectDefinition(typeof(NewsFeedFactory));

            RootObjectDefinition managerDef = new RootObjectDefinition(typeof(NewsFeedManagerWith_Replace_MethodThatTakesArguments));

            managerDef.MethodOverrides.Add(new ReplacedMethodOverride("CreateNewsFeed", "replacer"));

            DefaultListableObjectFactory factory = new DefaultListableObjectFactory();

            factory.RegisterObjectDefinition("manager", managerDef);
            factory.RegisterObjectDefinition("replacer", replacerDef);
            NewsFeedManagerWith_Replace_MethodThatTakesArguments manager = (NewsFeedManagerWith_Replace_MethodThatTakesArguments)factory["manager"];

            Assert.Throws <NotImplementedException>(() => manager.CreateNewsFeed("So sad... to be all alone in the world"));
        }