/// <summary> /// Defines a named binding with the name taken from the factory method used to create instances. /// </summary> /// <typeparam name="TInterface">The type of the interface.</typeparam> /// <typeparam name="TFactory">¨The type of the factory.</typeparam> /// <param name="syntax">The syntax.</param> /// <param name="action">Expression defining the factory method used to get the binding name from.</param> /// <returns> /// The <see cref="IBindingWithOrOnSyntax{TInterface}"/> to configure more things for the binding. /// </returns> public static IBindingWithOrOnSyntax <TInterface> NamedLikeFactoryMethod <TInterface, TFactory>(this IBindingNamedSyntax <TInterface> syntax, Expression <Action <TFactory> > action) { if (action == null) { throw new ArgumentNullException("action"); } var methodCallExpression = action.Body as MethodCallExpression; if (methodCallExpression == null) { throw new ArgumentException("expected factory method instead of " + action, "action"); } var methodName = methodCallExpression.Method.Name; if (!methodName.StartsWith("Get")) { throw new ArgumentException("expected factory 'Get' method instead of " + action, "action"); } var bindingName = methodName.Substring(3); return(syntax.Named(bindingName)); }
public static IBindingSyntax MapKey <T>(this IBindingNamedSyntax <T> binding, string key) { IBindingSyntax bindingSyntax = binding; if (!string.IsNullOrEmpty(key)) { bindingSyntax = binding.Named(key); } return(bindingSyntax); }