/// <summary> /// Parses the specified <see cref="XmlElement"/> element into a /// <see cref="ProviderNode"/> object. /// </summary> /// <param name="element"> /// A Xml element that contains the provider configuration data. /// </param> /// <param name="base_directory"> /// The base directory to use when resolving the providers's location. /// </param> /// <returns> /// A <see cref="ProviderNode"/> containing the configured provider. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="element"/> is a <c>null</c> reference. /// </exception> /// <exception cref="ConfigurationException"> /// The <paramref name="element"/> contains invalid configuration data. /// </exception> public static ProviderNode Parse(XmlElement element, string base_directory, out IList<string> options_refs) { CheckPreconditions(element, base_directory); string name = GetAttributeValue(element, Strings.kNameAttribute); string type = GetAttributeValue(element, Strings.kTypeAttribute); string location = GetLocation(element, base_directory); string group = GetAttributeValue(element, Strings.kGroupAttribute, string.Empty); ProviderNode provider = new ProviderNode(name, type); provider.location_ = location; provider.group_ = group; provider.options_ = GetOptions(name + ".Options", element, out options_refs); provider.aliases_ = GetAliases(element); return provider; }
static IEnumerable <ProviderNode> Replicate(ReplicaNode replica, ProvidersNodeGroup group) { List <ProviderNode> clones = new List <ProviderNode>(group.Count); foreach (ProviderNode provider in group) { ProviderNode clone = provider.Clone(provider.Name + replica.Name); List <string> aliases = new List <string>(); foreach (string alias in clone.Aliases) { aliases.Add(alias + replica.Name); } // replace/add the cloned options with the replica's options foreach (KeyValuePair <string, string> option in replica.Options) { clone.Options[option.Key] = option.Value; } clones.Add(clone); } return(clones); }
public void SetUp() { node_ = new ProviderNode.Builder("provider", typeof (TestFactory).AssemblyQualifiedName) .Build(); }
/// <summary> /// Initializes a new instance of the <see cref="Builder"/> class by /// using the provider name and type. /// </summary> /// <param name="name"> /// A string that uniquely identifies the provider within an application. /// </param> /// <param name="type"> /// The provider's fully qualified assembly name. /// </param> public Builder(string name, string type) { if (name == null || type == null) { throw new ArgumentNullException(type == null ? "type" : "location"); } node_ = new ProviderNode(name, type); }
/// <summary> /// Initializes a new instance of the <see cref="Builder"/> class by /// using the provider name and type. /// </summary> /// <param name="name"> /// A string that uniquely identifies the provider within an application. /// </param> /// <param name="type"> /// The provider's fully qualified assembly name. /// </param> public Builder(string name, Type type) { if (name == null || type == null) { throw new ArgumentNullException(type == null ? "type" : "location"); } node_ = new ProviderNode(name, type.AssemblyQualifiedName); }
/// <summary> /// Builds a new <see cref="ProviderNode"/> /// </summary> /// <returns></returns> public ProviderNode Build() { ProviderNode node = new ProviderNode(node_.name, node_.type_, node_.location_); node.options_ = node_.options_; node.group_ = node_.group_; return node; }
/// <summary> /// Parses the specified <see cref="XmlElement"/> element into a /// <see cref="ProvidersNode"/> object. /// </summary> /// <param name="element"> /// A Xml element that contains the providers configuration data. /// </param> /// <param name="base_directory"> /// The base directory to use when resolving the providers's location. /// </param> /// <returns> /// A <see cref="ProvidersNode"/> containing the configured providers. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="element"/> is a <c>null</c> reference. /// </exception> /// <exception cref="ConfigurationException"> /// The <paramref name="element"/> contains invalid configuration data. /// </exception> public static ProvidersNode Parse(XmlElement element, string base_directory) { CheckPreconditions(element, base_directory); IList <UnresolvedOptions> unresolved_options_references = new List <UnresolvedOptions>(); List <ReplicasNode> replicas = new List <ReplicasNode>(); Dictionary <string, IProviderOptions> reference_table = new Dictionary <string, IProviderOptions>(); ProvidersNode providers = new ProvidersNode(); foreach (XmlNode node in element.ChildNodes) { if (node.NodeType == XmlNodeType.Element) { if (Strings.AreEquals(node.Name, Strings.kProviderNodeName)) { IList <string> references; IProviderNode provider = ProviderNode .Parse((XmlElement)node, base_directory, out references); IProvidersNodeGroup providers_node_group; if (!providers.GetProvidersNodeGroup(provider.Group, out providers_node_group)) { providers_node_group = new ProvidersNodeGroup(provider.Group); providers.Add(providers_node_group); } providers_node_group.Add(provider); // Associate each alias with the provider object. foreach (string alias in provider.Aliases) { providers_node_group.Add(alias, provider); } // Add the provider to the unresolved providers list if it has // references to be resolved. if (references.Count > 0) { unresolved_options_references .Add(new UnresolvedOptions(provider.Options, references)); } } else if (Strings.AreEquals(node.Name, Strings.kOptionsNodeName)) { ParseReferenceTable((XmlElement)node, unresolved_options_references, reference_table); } else if (Strings.AreEquals(node.Name, Strings.kReplicasNodeName)) { replicas.Add(ReplicasNode.Parse((XmlElement)node)); } } if (unresolved_options_references.Count > 0) { if (reference_table.Count == 0) { throw new ConfigurationException( Resources.Resources.Configuration_providers_missing_reference); } ResolveOptionsReferences(unresolved_options_references, reference_table); } if (replicas.Count > 0) { CreateReplicas(replicas, providers); } } return(providers); }