public override object CreateInstance(Type type,
                                              IEnumerable <KeyValuePair <string, object> > values,
                                              IServiceProvider serviceProvider,
                                              params Attribute[] attributes)
        {
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }

            object result      = null;
            Type   builderType = Adaptable.GetBuilderType(type);

            if (builderType == null)
            {
                return(Default.CreateInstance(type, values, serviceProvider, attributes));
            }
            else
            {
                result = Default.CreateInstance(builderType, values, serviceProvider, attributes);

                MethodInfo mi;
                result = Adaptable.InvokeBuilder(result, out mi, serviceProvider);
                InitializeCoreHelper(result, mi.ReturnType, values, serviceProvider);
            }

            if (result == null)
            {
                throw RuntimeFailure.CannotActivateNoConstructorOrBuilder("type", type);
            }

            return(result);
        }
Example #2
0
        public override void Save(TextWriter writer, object value)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            IPropertyStore pp = Adaptable.TryAdapt <IPropertyStore>(value);

            if (pp == null)
            {
                pp = Runtime.Properties.FromValue(value);
            }

            if (pp == null)
            {
                throw Failure.NotAdaptableTo("value", value, typeof(IPropertyStore));
            }

            using (PropertiesWriter pw = new PropertiesWriter(writer)) {
                pw.WriteProperties(pp);
            }
        }
Example #3
0
        public static Type GetBuilderType(this Type adapteeType)
        {
            if (adapteeType == null)
            {
                throw new ArgumentNullException(nameof(adapteeType));
            }

            var result = Adaptable.GetAdapterType(adapteeType, AdapterRole.Builder);

            if (result == null || AdapterRole.IsBuilderType(result, adapteeType))
            {
                return(result);
            }
            return(null);
        }
Example #4
0
        protected virtual object BindParameterSubscription(ParameterInfo parameter,
                                                           IServiceProvider serviceProvider)
        {
            object value = null;

            Type requiredType = parameter.ParameterType;

            if (IsServiceBindableType(requiredType))
            {
                value = serviceProvider.GetService(requiredType);
            }

            if (value != null)
            {
                value = Adaptable.TryAdapt(value, requiredType, serviceProvider);
            }

            return(value);
        }