2009 Advent Calendar December 7th

Now that we have a working transaction from yesterday we need to add the important object to it. So let's use the initial implementation of the important object:

    1:      public class ImportantObject
   2:      {
   3:          public void ImportantMethod()
   4:          {
   5:              // Do things.
   6:          }
   7:      }

Then we want a new test on the transaction:

    1:      public class Given_a_transaction
   2:      {
   3:          private Transaction _transaction = new Transaction(new ImportantObject(), new FakeLock());
   4:   
   5:          [Fact]
   6:          void It_should_return_an_ImportantObject()
   7:          {
   8:              Assert.NotNull(_transaction.ImportantObject);
   9:          }
  10:      }

And the implementation:

    1:      public class Transaction : IDisposable
   2:      {
   3:          private readonly Lock _lock;
   4:          public ImportantObject ImportantObject { get; private set; }
   5:   
   6:          public Transaction(ImportantObject importantObject, Lock aLock)
   7:          {
   8:              ImportantObject = importantObject;
   9:              _lock = aLock;
  10:              _lock.Lock();
  11:          }
  12:   
  13:          public void Dispose()
  14:          {
  15:              _lock.Unlock();
  16:          }
  17:      }