public MessageController(IMessageSource messageSource, IUserSource userSource, IGroupSource groupSource, ICollectionSource collectionSource)
 {
     _messageSource    = messageSource;
     _userSource       = userSource;
     _groupSource      = groupSource;
     _collectionSource = collectionSource;
 }
        public GroupSourceSynchroniser(IGroupSource source)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }

            this.targetSource = source;
            /*
             * we want to bind to a collection of groups
             * we will watch that collection for changes and add / remove items to our internal list
             * we will provide virtual methods to override to be able to alter the add / remove behaviour
             * each group must also provide a notification of items within itself being added or removed
             * if we fail to provide either notification, then the table becomes a static list and we won't
             * dynamically add or remove items
             */ 
        }
 public GroupsController(IGroupSource source, IUserSource userSource)
 {
     _source     = source;
     _userSource = userSource;
 }