C# .NET - Designing Fluent API, how to make a method dependent on another

Asked By Corey on 18-Jun-13 12:53 PM
I'm trying to accomplish a fluent utilities static class.

here is my call I would like, Utilities.DataOperations.SerializeRequest(tdcRequest).WriteToTDCDatabase(To.Request);

namespace Me.Business
{
  public static class Utilities
  {
    #region "TDC Utilities"
    private static DataOperations _dataOperations = new DataOperations();
 
    public static void CopyClassData(object internalData, object externalData)
      {
        if (externalData == null) return;
        foreach (var intPropertyInfo in internalData.GetType().GetProperties())
        {
          var extPropertyInfo = externalData.GetType().GetProperty(intPropertyInfo.Name);
          var value = extPropertyInfo.GetValue(externalData, null);
 
          intPropertyInfo.SetValue(internalData, value, null);
        }
      }
 
    public static DataOperations DataOperations
    {
      get { return _dataOperations; }
      set { _dataOperations = value; }
    }
 
    #endregion
  }
}
 
namespace Me.Business
{
  public enum To
  {
    Request,
    Response
  }
 
  public class DataOperations
  {
    private string _serializeRequest;
     
    public DataOperations SerializeRequest(object request)
    {
      var serializer = new XmlSerializer(request.GetType());
 
      using (StringWriter writer = new StringWriter())
      {
        serializer.Serialize(writer,request);
 
        _serializeRequest = writer.ToString();
        return this;
      }
    }
 
    public void WriteToTDCDatabase(To to)
    {
      switch (to)
      {
        case To.Request:
          string tmp1 = _serializeRequest; //stubbed in for later db implementation
          break;
        case To.Response:
          string tmp2; //stubbed in for later db implementation
          break;
      }
    }
  }
} I want to set this up so WriteToTDCDatabase will not show under DataOperations until after SerializeRequest. Currently under DataOperations you can see both WriteToTDCDatabase and SerializeRequest. Thanks