protected override IDictionary GetArguments(MethodInfo method, object[] arguments)
		{
			var parameters = method.GetParameters();
			var arg = new Arguments();
			for (var i = 0; i < parameters.Length; i++)
			{
				if (arg.Contains(parameters[i].ParameterType))
				{
					if (IsFunc(method.DeclaringType))
					{
						throw new ArgumentException(
							string.Format("Factory delegate {0} has duplicated arguments of type {1}. " +
							              "Using generic purpose delegates with duplicated argument types is unsupported, because then it is not possible to match arguments properly. " +
							              "Use some custom delegate with meaningful argument names or interface based factory instead.",
							              method.DeclaringType, parameters[i].ParameterType));
					}

					// else we just ignore it. It will likely be matched by name so we don't want to throw prematurely. We could log this though.
				}
				else
				{
					arg.Add(parameters[i].ParameterType, arguments[i]);
				}
				arg.Add(parameters[i].Name, arguments[i]);
			}
			return arg;
		}
Пример #2
0
		public void Custom_stores_get_picked_over_default_ones()
		{
			var arguments = new Arguments(new CustomStringStore());
			var key = "foo";
			var value = new object();

			arguments.Add(key, value);

			Assert.AreEqual("boo!", arguments[key]);
		}
		/// <summary>
		///   Selects arguments to be passed to resolution pipeline.
		///   By default passes all given <paramref name = "arguments" /> 
		///   keyed by names of their corresponding <paramref name = "method" /> parameters.
		/// </summary>
		/// <param name = "method"></param>
		/// <param name = "arguments"></param>
		/// <returns></returns>
		protected virtual IDictionary GetArguments(MethodInfo method, object[] arguments)
		{
			var argumentMap = new Arguments();
			var parameters = method.GetParameters();
			for (var i = 0; i < parameters.Length; i++)
			{
				argumentMap.Add(parameters[i].Name, arguments[i]);
			}
			return argumentMap;
		}
Пример #4
0
		public void By_default_any_type_as_key_is_supported()
		{
			var arguments = new Arguments(new CustomStringComparer());
			var key = new object();
			var value = "foo";

			arguments.Add(key, value);

			Assert.AreEqual("foo", arguments[key]);
		}
Пример #5
0
		public void Handles_string_as_key_case_insensitive()
		{
			var arguments = new Arguments();
			var key = "foo";
			var value = new object();

			arguments.Add(key, value);

			Assert.IsTrue(arguments.Contains(key.ToLower()));
			Assert.IsTrue(arguments.Contains(key.ToUpper()));
		}
Пример #6
0
		public void Handles_string_as_key()
		{
			var arguments = new Arguments();
			var key = "Foo";
			var value = new object();

			arguments.Add(key, value);

			Assert.AreEqual(1, arguments.Count);
			Assert.IsTrue(arguments.Contains(key));
			Assert.AreSame(value, arguments[key]);
		}
Пример #7
0
		public void Custom_stores_get_picked_over_default_ones_in_clone()
		{
			var arguments = new Arguments(new CustomStringComparer());
			var key = "foo";
			var value = new object();

			arguments.Add(key, value);

			var clone = (IDictionary)((ICloneable)arguments).Clone();

			Assert.AreEqual(value, clone["boo!"]);
		}