/// <summary>
 /// This consumer is prepared to handle sessions.
 /// Can handle our sql data access and (after promotion) the basic file data access
 /// </summary>
 public void Consume1(SessionedDataAccess sessionedDataAccess)
 {
     sessionedDataAccess.Session.OpenSession();
     Console.WriteLine(
         sessionedDataAccess.DataAccess.GetData()
         );
     sessionedDataAccess.DataAccess.SetData("data");
     sessionedDataAccess.Session.CloseSession();
     sessionedDataAccess.Disposable.Dispose();
 }
 /// <summary>
 /// allows to use a plain data access as a sessioned data access by providing no-op  ISession and IDisposable implementations
 /// </summary>
 public static SessionedDataAccess Promote(this PlainDataAccess self)
 {
     return(SessionedDataAccess.Create(dataAccess: self));
 }
 public static SessionedDataAccess Create()
 {
     return(SessionedDataAccess.Create(new SQLDataAccess()));
 }