title: Design issue (how to avoid to break LSP)
body: <p>I got the following two interfaces:</p>
  
  <pre><code>interface IModule
  {
      IModuleResult Invoke(InstallerContext context, IModuleConfiguration config);
  }
  
  interface IModuleConfiguration
  {
  
  }
  </code></pre>
  
  <p>The <code>IModuleConfiguration</code> is used to configure each module. It loads/stores config settings in XML files and are configured through a web app.</p>
  
  <p>The flow is: </p>
  
  <blockquote>
    <p>Runner -> Load configurations from a single XML file -> Load runner instructions from another XML file -> Invoke selected modules</p>
  </blockquote>
  
  <p>The design works, but each module only works with it's own configuration. It breaks LSP and I'm wondering if there are any better way to design this.</p>
  
  <p>Using a <code>interface IModule&lt;T&gt; where T : IModuleConfiguration</code> would not break LSP, but makes it hard to work with each module (as I need to store them as <code>object</code> in the <code>List</code> and use reflection to invoke them).</p>