public PrependDsl <TPrepend> Prepend <TPrepend>(
     TPrepend instance, Func <TContext, bool> predicate = null)
     where TPrepend : TPlugin
 {
     return(Prepend <TPrepend>(PluginDefinition <TPlugin, TContext>
                               .Create(instance, predicate)));
 }
 public PluginDefinitions <TPlugin, TContext> With <TReplacement>(
     TReplacement instance, Func <TContext, bool> predicate = null)
     where TReplacement : TPlugin
 {
     return(With <TReplacement>(PluginDefinition <TPlugin, TContext>
                                .Create(instance, predicate)));
 }
 public PrependDsl <TPrepend> Prepend <TPrepend>(
     Func <TContext, bool> predicate = null, bool singleton = false)
     where TPrepend : TPlugin
 {
     return(Prepend <TPrepend>(PluginDefinition <TPlugin, TContext>
                               .Create <TPrepend>(predicate, singleton)));
 }
 public PluginDefinitions <TPlugin, TContext> With <TReplacement>(
     Func <TContext, bool> predicate = null, bool singleton = false)
     where TReplacement : TPlugin
 {
     return(With <TReplacement>(PluginDefinition <TPlugin, TContext>
                                .Create <TReplacement>(predicate, singleton)));
 }