#region License

/*
 * Copyright © 2002-2005 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#endregion

#region Imports

using System;

#endregion

namespace Spring.Objects.Factory.Xml
{
	/// <summary>
	/// Test class for Spring.NET's ability to create objects using static
	/// factory methods, rather than constructors.
	/// </summary>
	/// <author>Rod Johnson</author>
	/// <author>Rick Evans (.NET)</author>
	public class FactoryMethods
	{
		#region Constructor (s) / Destructor

		/// <summary>
		/// Creates a new instance of the
		/// <see cref="Spring.Objects.Factory.Xml.FactoryMethods"/> class.
		/// </summary>
		/// <remarks>
		/// <p>
		/// Constructor is private: not for use outside this class, even by the IoC container.
		/// </p>
		/// </remarks>
		private FactoryMethods(TestObject obj, string name, int number)
		{
			_object = obj;
			_name = name;
			_number = number;
		}

		#endregion

		#region Properties

		public TestObject Object
		{
			get { return _object; }
		}

		public string Name
		{
			get { return _name; }
			set { _name = value; }
		}

		public string Value
		{
			get { return _value; }
			set { _value = value; }
		}

		public int Number
		{
			get { return _number; }
		}

		#endregion

		#region Methods

		public static FactoryMethods DefaultInstance()
		{
			TestObject obj = new TestObject();
			obj.Name = "defaultInstance";
			return new FactoryMethods(obj, "default", 0);
		}

		public static FactoryMethods NewInstance(TestObject obj)
		{
			return new FactoryMethods(obj, "default", 0);
		}

		public static FactoryMethods NewInstance(TestObject obj, string name, int num)
		{
			return new FactoryMethods(obj, name, num);
		}

		#endregion

		#region Fields

		private int _number;
		private TestObject _object;
		private string _name = "default";
		private string _value;

		#endregion
	}
}