public IActivator Get(Func <string, object> parameter) { var arguments = new Enumerable <object>(_constructor.GetParameters().Select(x => x.Name).Select(parameter)); var result = new ConstructedActivator(_constructor, arguments); return(result); }
protected override object Create(MarkupExtensionParts parameter) { var type = DetermineType(parameter); var candidates = parameter.Arguments.Select(Get) .ToArray(); var constructor = DetermineConstructor(parameter, candidates, type); var members = _members.Get(type); var evaluator = new PropertyEvaluator(type, members.ToDictionary(x => x.Name), this); var dictionary = parameter.Properties.ToDictionary(x => x.Key, evaluator.Get); var arguments = constructor.GetParameters() .Select(x => x.ParameterType.GetTypeInfo()) .Zip(candidates, (info, evaluation) => evaluation.Get(info)) .ToArray(); var activator = new ConstructedActivator(constructor, arguments); var context = new MemberContext(constructor.ReflectedType.GetTypeInfo(), members); var extension = new ActivationContexts(_accessors, context, activator, _defaults) .Get(dictionary) .Get() .AsValid <IMarkupExtension>(); var result = extension.ProvideValue(new Provider(_provider, _services.Appending(parameter) .ToArray())); return(result); }