title: How to implement optional branches in fluent interfaces
body: <p>I'm currently creating a fluent interface and I'm not 100% sure what's the best way to implement optional branches. A little example:</p>
  
  <pre><code>// Normal service registration
  .AddService(myService)
  // Service registration with additional parameters
  .AddService(myOtherService).WithParameter(ServiceParam.Timeout, 100)
  .AddService(myThirdService)
  </code></pre>
  
  <p>Now, I'm not really sure which return types AddService() and WithParameter() should have. The base interface provides <code>AddService</code> which must returns something supporting <code>WithParameter</code> AND <code>AddService</code>. Would you recommend to have the following structure (pseudo-code):</p>
  
  <pre><code>interface FluentStart
  {
      AddService
  }
  
  interface FluentServiceConfiguration
  {
      WithParameter
  }
  </code></pre>
  
  <p>and finally, AddService would return an interface of:</p>
  
  <pre><code>interface FluentStartORFluentServiceConfiguration
      : FluentStart
      , FluentServiceConfiguration
  </code></pre>
  
  <p>? Is there any other (better) way to do that?</p>