/// <summary> /// Get the parameters for the specified builder type, possibly creating it, if there /// is not yet one in the build data collection. /// </summary> /// <param name="builderType">Type of the builder to request a set of sample data for.</param> /// <param name="paraType">Type of the parameter class.</param> /// <param name="properties">The global properties storage.</param> /// <returns> /// A new instance of a matching parameter data set for the specified builder. /// </returns> /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception> public IMemberBuildParameters GetParameters(Type builderType, Type paraType, IBuildDataDictionary properties) { Guard.NotNull(() => properties, properties); IBuilderData result; var found = properties.TryGetValue(string.Empty + builderType.FullName, out result); if (found) { return(result as IMemberBuildParameters); } var paraInstance = Activator.CreateInstance(paraType); var setupPara = (IMemberBuildParameters)paraInstance; properties.AddDataItem(string.Empty + builderType.FullName, setupPara); return(setupPara); }
/// <summary> /// Get the parameters for the specified builder type, possibly creating it, if there /// is not yet one in the build data collection. /// </summary> /// <param name="key">The unique identifier of the parameter data set.</param> /// <param name="builderType">Type of the builder to request a set of sample data for.</param> /// <param name="paraType">Type of the parameter class.</param> /// <param name="properties">The global properties storage.</param> /// <returns> /// A new instance of a matching parameter data set for the specified builder. /// </returns> /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception> public IMultiBuildParameters GetMultiParameter(Guid key, Type builderType, Type paraType, IBuildDataDictionary properties) { Guard.NotNull(() => properties, properties); Guard.CanBeAssigned(() => paraType, paraType, typeof(IMultiBuildParameters)); IBuilderData result; if (key == null || key == Guid.Empty) { key = Guid.NewGuid(); } else { IReadOnlyDictionary <string, IBuilderData> category; var catfound = properties.Data().TryGetValue("Multi." + builderType.FullName, out category); if (catfound) { var found = category.TryGetValue(key.ToString(), out result); if (found) { return(result as IMultiBuildParameters); } } } var paraInstance = Activator.CreateInstance(paraType); var setupPara = (IMultiBuildParameters)paraInstance; properties.AddDataItem("Multi." + builderType.FullName, key.ToString(), setupPara); setupPara.Id = key; return(setupPara); //var paraInstance = Activator.CreateInstance(paraType); //var setupPara = (IMemberBuildParameters)paraInstance; //properties.AddDataItem(string.Empty + builderType.FullName, setupPara); //return setupPara; }
private IMemberBuildParameters SetSingleNode(IBuildDataDictionary properties, IBuildHandler handler, XmlNode firstChild) { Guard.NotNull(() => properties, properties); Guard.NotNull(() => handler, handler); var paraType = handler.ParameterDataType; if (!typeof(IBuilderData).IsAssignableFrom(paraType)) { throw new ArgumentOutOfRangeException("handler", "The handler for MemberBuilder '" + handler.Type.FullName + "' is mapping to a invalid parameter of '" + handler.ParameterDataType.FullName + "' type. " + "Parameter types have to implement the '" + typeof(IBuilderData).FullName + "' interface."); } object paraInstance = null; if (handler.IsMultiBuilder) { if (!typeof(IMultiBuildParameters).IsAssignableFrom(paraType)) { throw new ArgumentOutOfRangeException("handler", "Requesting a parameter type of '" + firstChild.Name + "' (via Xml) for the '" + handler.ParameterDataType.FullName + "' handler assigned type. " + "Parameter types have to implement the '" + typeof(IMultiBuildParameters).FullName + "' interface."); } // null check paraType var xxx = paraType.BaseType.GetGenericTypeDefinition(); var xxxx = xxx.BaseType.GetGenericTypeDefinition(); // null check xxxx var serializer2 = xxxx.BaseType.GetGenericTypeDefinition(); // Todo: This strange thingy ... very good checking and logging! :) // null check serializer2 paraInstance = serializer2 .MakeGenericType(paraType) .GetMethod("Deserialize", new[] { typeof(string) }) .Invoke(null, new object[] { firstChild.InnerXml }); } else { if (!typeof(IMemberBuildParameters).IsAssignableFrom(paraType)) { throw new ArgumentOutOfRangeException("handler", "Requesting a parameter type for '" + firstChild.Name + "' (via Xml) for the '" + paraType.FullName + "' handler assigned type. " + "Parameter types have to implement the '" + typeof(IMemberBuildParameters).FullName + "' interface."); } // Todo: really need this stuff here? should this be done in the handler construction? // for example: checking if a multibuilder has IMultiBuildParameters and a // normal builder has IMemberBuildParameters. var xmlParaType = firstChild.FirstChild.Name; if (xmlParaType != paraType.Name) { throw new ArgumentOutOfRangeException("firstChild", "Requesting a parameter type of '" + xmlParaType + "' (via Xml). " + "Parameter types for the '" + handler.Type.FullName + "' builder have to be of the '" + paraType.FullName + "' kind."); } // null check paraType var xxxx = paraType.BaseType.GetGenericTypeDefinition(); // null check xxxx var serializer2 = xxxx.BaseType.GetGenericTypeDefinition(); // Todo: This strange thingy ... very good checking and logging! :) // null check serializer2 paraInstance = serializer2 .MakeGenericType(paraType) .GetMethod("Deserialize", new[] { typeof(string) }) .Invoke(null, new object[] { firstChild.InnerXml }); } var setupPara = (IMemberBuildParameters)paraInstance; try { var propertyKey = handler.Type.FullName; // IBuilderData property; // var found = properties.TryGetValue(propertyKey, out property); // if (found) // { if (handler.IsMultiBuilder) { var multiPara = setupPara as IMultiBuildParameters; properties.AddDataItem("Multi." + handler.Type.FullName, multiPara.Id.ToString(), setupPara, true); } else { properties.AddDataItem(propertyKey, setupPara, true); } // return setupPara; // } // properties.AddDataItem(propertyKey, setupPara); } catch (Exception ex) { var message = string.Format( "Problem building {0} from serialization data.{1}{2}{3}", handler.Type.FullName, Environment.NewLine, firstChild.InnerXml, Environment.NewLine); throw new InvalidCastException(message, ex); } return(setupPara); }
/// <summary> /// Get the parameters for the specified builder type, possibly creating it, if there /// is not yet one in the build data collection. /// </summary> /// <param name="key">The unique identifier of the parameter data set.</param> /// <param name="builderType">Type of the builder to request a set of sample data for.</param> /// <param name="paraType">Type of the parameter class.</param> /// <param name="properties">The global properties storage.</param> /// <returns> /// A new instance of a matching parameter data set for the specified builder. /// </returns> /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception> public IMultiBuildParameters GetMultiParameter(Guid key, Type builderType, Type paraType, IBuildDataDictionary properties) { Guard.NotNull(() => properties, properties); Guard.CanBeAssigned(()=> paraType, paraType, typeof(IMultiBuildParameters)); IBuilderData result; if (key == null || key == Guid.Empty) { key = Guid.NewGuid(); } else { IReadOnlyDictionary<string, IBuilderData> category; var catfound = properties.Data().TryGetValue("Multi." + builderType.FullName, out category); if (catfound) { var found = category.TryGetValue(key.ToString(), out result); if (found) { return result as IMultiBuildParameters; } } } var paraInstance = Activator.CreateInstance(paraType); var setupPara = (IMultiBuildParameters)paraInstance; properties.AddDataItem("Multi." + builderType.FullName, key.ToString(), setupPara); setupPara.Id = key; return setupPara; //var paraInstance = Activator.CreateInstance(paraType); //var setupPara = (IMemberBuildParameters)paraInstance; //properties.AddDataItem(string.Empty + builderType.FullName, setupPara); //return setupPara; }
private IMemberBuildParameters SetSingleNode(IBuildDataDictionary properties, IBuildHandler handler, XmlNode firstChild) { Guard.NotNull(() => properties, properties); Guard.NotNull(() => handler, handler); var paraType = handler.ParameterDataType; if (!typeof(IBuilderData).IsAssignableFrom(paraType)) { throw new ArgumentOutOfRangeException("handler", "The handler for MemberBuilder '" + handler.Type.FullName + "' is mapping to a invalid parameter of '" + handler.ParameterDataType.FullName + "' type. " + "Parameter types have to implement the '" + typeof(IBuilderData).FullName + "' interface."); } object paraInstance = null; if (handler.IsMultiBuilder) { if (!typeof(IMultiBuildParameters).IsAssignableFrom(paraType)) { throw new ArgumentOutOfRangeException("handler", "Requesting a parameter type of '" + firstChild.Name + "' (via Xml) for the '" + handler.ParameterDataType.FullName + "' handler assigned type. " + "Parameter types have to implement the '" + typeof(IMultiBuildParameters).FullName + "' interface."); } // null check paraType var xxx = paraType.BaseType.GetGenericTypeDefinition(); var xxxx = xxx.BaseType.GetGenericTypeDefinition(); // null check xxxx var serializer2 = xxxx.BaseType.GetGenericTypeDefinition(); // Todo: This strange thingy ... very good checking and logging! :) // null check serializer2 paraInstance = serializer2 .MakeGenericType(paraType) .GetMethod("Deserialize", new[] { typeof(string) }) .Invoke(null, new object[] { firstChild.InnerXml }); } else { if (!typeof(IMemberBuildParameters).IsAssignableFrom(paraType)) { throw new ArgumentOutOfRangeException("handler", "Requesting a parameter type for '" + firstChild.Name + "' (via Xml) for the '" + paraType.FullName + "' handler assigned type. " + "Parameter types have to implement the '" + typeof(IMemberBuildParameters).FullName + "' interface."); } // Todo: really need this stuff here? should this be done in the handler construction? // for example: checking if a multibuilder has IMultiBuildParameters and a // normal builder has IMemberBuildParameters. var xmlParaType = firstChild.FirstChild.Name; if (xmlParaType != paraType.Name) { throw new ArgumentOutOfRangeException("firstChild", "Requesting a parameter type of '" + xmlParaType + "' (via Xml). " + "Parameter types for the '" + handler.Type.FullName + "' builder have to be of the '" + paraType.FullName + "' kind."); } // null check paraType var xxxx = paraType.BaseType.GetGenericTypeDefinition(); // null check xxxx var serializer2 = xxxx.BaseType.GetGenericTypeDefinition(); // Todo: This strange thingy ... very good checking and logging! :) // null check serializer2 paraInstance = serializer2 .MakeGenericType(paraType) .GetMethod("Deserialize", new[] { typeof(string) }) .Invoke(null, new object[] { firstChild.InnerXml }); } var setupPara = (IMemberBuildParameters)paraInstance; try { var propertyKey = handler.Type.FullName; // IBuilderData property; // var found = properties.TryGetValue(propertyKey, out property); // if (found) // { if (handler.IsMultiBuilder) { var multiPara = setupPara as IMultiBuildParameters; properties.AddDataItem("Multi." + handler.Type.FullName, multiPara.Id.ToString(), setupPara, true); } else { properties.AddDataItem(propertyKey, setupPara, true); } // return setupPara; // } // properties.AddDataItem(propertyKey, setupPara); } catch (Exception ex) { var message = string.Format( "Problem building {0} from serialization data.{1}{2}{3}", handler.Type.FullName, Environment.NewLine, firstChild.InnerXml, Environment.NewLine); throw new InvalidCastException(message, ex); } return setupPara; }
/// <summary> /// Get the parameters for the specified builder type, possibly creating it, if there /// is not yet one in the build data collection. /// </summary> /// <param name="builderType">Type of the builder to request a set of sample data for.</param> /// <param name="paraType">Type of the parameter class.</param> /// <param name="properties">The global properties storage.</param> /// <returns> /// A new instance of a matching parameter data set for the specified builder. /// </returns> /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception> public IMemberBuildParameters GetParameters(Type builderType, Type paraType, IBuildDataDictionary properties) { Guard.NotNull(() => properties, properties); IBuilderData result; var found = properties.TryGetValue(string.Empty + builderType.FullName, out result); if (found) { return result as IMemberBuildParameters; } var paraInstance = Activator.CreateInstance(paraType); var setupPara = (IMemberBuildParameters)paraInstance; properties.AddDataItem(string.Empty + builderType.FullName, setupPara); return setupPara; }