Castle.MicroKernel.SubSystems.Naming.BinaryTreeComponentName.Add C# (CSharp) Method

Add() public method

public Add ( ComponentName name, IHandler handler ) : void
name ComponentName
handler IHandler
return void
		public void Add(ComponentName name, IHandler handler)
		{
			if (root == null)
			{
				root = new TreeNode(name, handler);
				count++;
				return;
			}

			TreeNode current = root;

			while (true)
			{
				int cmp = String.Compare(current.CompName.Service, name.Service);

				if (cmp < 0)
				{
					if (current.Left != null)
					{
						current = current.Left;
					}
					else
					{
						current.Left = new TreeNode(name, handler);
						count++;
						break;
					}
				}
				else if (cmp > 0)
				{
					if (current.Right != null)
					{
						current = current.Right;
					}
					else
					{
						current.Right = new TreeNode(name, handler);
						count++;
						break;
					}
				}
				else
				{
					current.AddSibling(new TreeNode(name, handler));
					count++;
					break;
				}
			}
		}

Usage Example

		public void Usage()
		{
			BinaryTreeComponentName tree = new BinaryTreeComponentName();

			DefaultHandler handler1 = new DefaultHandler(
				new ComponentModel("A", typeof(DefaultHandler), typeof(DefaultHandler)));
			DefaultHandler handler2 = new DefaultHandler(
				new ComponentModel("B", typeof(DefaultHandler), typeof(DefaultHandler)));
			DefaultHandler handler3 = new DefaultHandler(
				new ComponentModel("C", typeof(DefaultHandler), typeof(DefaultHandler)));
			DefaultHandler handler4 = new DefaultHandler(
				new ComponentModel("D", typeof(DefaultHandler), typeof(DefaultHandler)));
			DefaultHandler handler5 = new DefaultHandler(
				new ComponentModel("E", typeof(DefaultHandler), typeof(DefaultHandler)));
			DefaultHandler handler6 = new DefaultHandler(
				new ComponentModel("F", typeof(DefaultHandler), typeof(DefaultHandler)));

			tree.Add(new ComponentName("protocolhandler"), handler1);
			tree.Add(new ComponentName("protocolhandler:key=1"), handler2);
			tree.Add(new ComponentName("protocolhandler:key=2"), handler3);
			tree.Add(new ComponentName("protocolhandler:key=2,secure=true"), handler4);
			tree.Add(new ComponentName("modelmanager"), handler5);
			tree.Add(new ComponentName("viewmanager"), handler6);

			Assert.AreSame(handler1, tree.GetHandler(new ComponentName("protocolhandler")));
			Assert.AreSame(handler2, tree.GetHandler(new ComponentName("protocolhandler:key=1")));
			Assert.AreSame(handler3, tree.GetHandler(new ComponentName("protocolhandler:key=2")));
			Assert.AreSame(handler4, tree.GetHandler(new ComponentName("protocolhandler:key=2,secure=true")));
			Assert.AreSame(handler5, tree.GetHandler(new ComponentName("modelmanager")));
			Assert.AreSame(handler6, tree.GetHandler(new ComponentName("viewmanager")));

			IHandler[] handlers = tree.GetHandlers(new ComponentName("protocolhandler"));

			Assert.AreEqual(4, handlers.Length);
			Assert.AreSame(handler1, handlers[0]);
			Assert.AreSame(handler2, handlers[1]);
			Assert.AreSame(handler3, handlers[2]);
			Assert.AreSame(handler4, handlers[3]);

			handlers = tree.GetHandlers(new ComponentName("protocolhandler:*"));

			Assert.AreEqual(4, handlers.Length);
			Assert.AreSame(handler1, handlers[0]);
			Assert.AreSame(handler2, handlers[1]);
			Assert.AreSame(handler3, handlers[2]);
			Assert.AreSame(handler4, handlers[3]);

			handlers = tree.GetHandlers(new ComponentName("protocolhandler:secure=true"));

			Assert.AreEqual(1, handlers.Length);
			Assert.AreSame(handler4, handlers[0]);

			handlers = tree.GetHandlers(new ComponentName("protocolhandler:key=2"));

			Assert.AreEqual(2, handlers.Length);
			Assert.AreSame(handler3, handlers[0]);
			Assert.AreSame(handler4, handlers[1]);
		}
All Usage Examples Of Castle.MicroKernel.SubSystems.Naming.BinaryTreeComponentName::Add