public object Create(string name, Type type, NamedParameters ctorArgs) { if (!CanCreate(name, type)) { throw new ArgumentException("Cannot create DataSource from: " + type); } return(CreateDataSource(name, type, ctorArgs)); }
public NamedParameters GetConstructorArguments() { if (ConstructorArugments == null) { return(NamedParameters.Null); } if (ConstructorArugments.Length % 2 != 0) { throw new ArgumentException("ConstructorArguments must have even length"); } var args = new NamedParameters(); for (int i = 0; i < ConstructorArugments.Length; ++i) { args[ConstructorArugments[i].ToString()] = ConstructorArugments[i + 1]; i++; } AddTypedConstructorArugments(args); return(args); }
protected abstract object CreateDataSource(string name, Type type, NamedParameters ctorArgs);
public T Create <T>(string name, NamedParameters ctorArgs) { return((T)Create(name, typeof(T), ctorArgs)); }
protected virtual void AddTypedConstructorArugments(NamedParameters args) { // hook for derived classes to add types arguments }