2009 Advent Calendar December 9th

With the solution we have from yesterday we still have a big problem. Whoever uses ImportantObject must also create the transaction. That is really a bad idea since it is too easy to use the ImportantObject in an unsafe way (i.e. not using transactions at all). To fix this I'm going to introduce an ImportantProvider:

    1:      public class Given_an_ImportantProvider
   2:      {
   3:          private ImportantProvider _importantProvider = new ImportantProvider(new DummyObject());
   4:   
   5:          [Fact]
   6:          void It_should_return_a_transaction()
   7:          {
   8:              Assert.NotNull(_importantProvider.Transaction);            
   9:          }
  10:      }
  11:   
  12:      public class ImportantProvider
  13:      {
  14:          private ImportantInterface _importantObject;
  15:   
  16:          public ImportantProvider(ImportantInterface importantObject)
  17:          {
  18:              _importantObject = importantObject;
  19:          }
  20:   
  21:          public Transaction Transaction
  22:          {
  23:              get
  24:              {
  25:                  return new Transaction(_importantObject, new MutexLock());
  26:              }
  27:          }
  28:      }