/// <summary>
        /// Converts the <see cref="PersistenceReadWriterElement"/> in a <see cref="PersistenceReadWriterElementCollection"/>
        /// to a <see cref="ResolvedParameter"/>, meaning persistence repository types referenced in configuration
        /// by name can be injected into the constructor of the parent provider.
        /// </summary>
        /// <remarks><see cref="ResolvedParameter"/> types allow for the deferred resolution of a type by using
        /// an <see cref="IComponentContext"/> to queue calls to resolve the instances, which would otherwise be
        /// tricky to do via chaining modules together</remarks>
        /// <returns>The parameters represented by this collection.</returns>
        public static IEnumerable <Parameter> ToParameters(this PersistenceReadWriterElementCollection collection)
        {
            foreach (PersistenceReadWriterElement parameter in collection)
            {
                PersistenceReadWriterElement localParameter = parameter;

                yield return(new ResolvedParameter(
                                 (p, c) =>
                                 (p.ParameterType == localParameter.ToType() || p.Name == "readWriter" ||
                                  localParameter.ToType().IsAssignableFrom(p.ParameterType)),
                                 (p, c) => ResolveNamedPersistenceRepositoryProvider(c, localParameter)));
            }
        }
 /// <summary>
 /// Resolves the named persistence read-writer using an <see cref="IComponentContext"/>.
 /// </summary>
 /// <param name="context">The context.</param>
 /// <param name="providerElement">The provider element.</param>
 /// <returns></returns>
 /// <remarks></remarks>
 private static object ResolveNamedPersistenceRepositoryProvider(IComponentContext context,
                                                                 PersistenceReadWriterElement providerElement)
 {
     return(context.ResolveNamed(providerElement.InternalKey, providerElement.ToType()));
 }
 	/// <summary>
   /// Resolves the named persistence read-writer using an <see cref="IComponentContext"/>.
   /// </summary>
   /// <param name="context">The context.</param>
   /// <param name="providerElement">The provider element.</param>
   /// <returns></returns>
   /// <remarks></remarks>
   private static object ResolveNamedPersistenceRepositoryProvider(IComponentContext context,
                                                                   PersistenceReadWriterElement providerElement)
   {
     return context.ResolveNamed(providerElement.InternalKey, providerElement.ToType());
   }