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);
            }
Beispiel #2
0
        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);
        }