/// <summary>
        /// Converts a <see cref="PersistenceReaderElement"/> 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 parameter.</returns>
        public static ResolvedParameter ToParameter(this PersistenceReaderElement element)
        {
            PersistenceReaderElement localElement = element;

            return(new ResolvedParameter(
                       (p, c) =>
                       (p.ParameterType == localElement.ToType() || p.Name == "reader" ||
                        localElement.ToType().IsAssignableFrom(p.ParameterType)),
                       (p, c) => ResolveNamedPersistenceRepositoryProvider(c, localElement)
                       ));
        }
 /// <summary>
 /// Resolves the named persistence reader 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, PersistenceReaderElement providerElement)
 {
     return(context.ResolveNamed(providerElement.InternalKey, providerElement.ToType()));
 }
 /// <summary>
 /// Resolves the named persistence reader 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, PersistenceReaderElement providerElement)
 {
   return context.ResolveNamed(providerElement.InternalKey, providerElement.ToType());
 }