using System.Collections.Generic;
public static void Main()
IMeetingDataManager mgr = new MeetingDataManager();
var meeting = mgr.Get(123);
meeting.Name = meeting.Name + "amended";
public class Meeting { public string Name { get; set; } }
public interface IMeetingDataManagerWrite
void Commit(Meeting meeting);
public interface IMeetingDataManager
void Commit(Meeting meeting);
public class MeetingDataManager : IMeetingDataManager, IMeetingDataManagerWrite
public Meeting Get(int id) { return new Meeting { Name = id.ToString() }; }
private void commit(Meeting meeting) { Console.WriteLine("Writing {0}", meeting.Name); }
void IMeetingDataManager.Commit(Meeting meeting)
ExtensionsGoHere.Intercept(this, meeting);
void IMeetingDataManagerWrite.Commit(Meeting meeting)
Console.WriteLine("Committing " + meeting.Name);
public static class ExtensionsGoHere
public static void Intercept(IMeetingDataManagerWrite write, Meeting meeting)
Console.WriteLine("Logging before " + meeting.Name);
Console.WriteLine("Logging after " + meeting.Name);