Majorly refactored my code, is this good enough? namespace SharpDream.Api
{
    public enum SourceType
    {
        Test,
        Xml
    }

    public class UserFinder
    {
        private IUserInformationSource _sourceType;
        private IParser _parserType;
        private string _source;

        public UserFinder(SourceType sourceType)
        {
            switch (sourceType)
            {
                case SourceType.Test:
                    var testSource = new TestSource();
                    _sourceType = testSource;
                    break;
                case SourceType.Xml:
                    var xmlSource = new XmlSource();
                    var xmlParser = new XmlParser();
                    _sourceType = xmlSource;
                    _parserType = xmlParser;
                    break;
                default:
                    break;
            }
        }

        /// &lt;summary&gt;
        /// Returns a User object loaded with information.
        /// &lt;/summary&gt;
        /// &lt;param name="forumUserId"&gt;The DIC forum users ID number.&lt;/param&gt;
        /// &lt;returns&gt;A User object.&lt;/returns&gt;
        public User GetUserById(int forumUserId)
        {
            _source = _sourceType.GetResponseSource(forumUserId);
            return _parserType.ParseUserFromSource(_source);
        }
    }
}


What I'm aiming for:


Separation of concerns. Which is working believe it or not! It's so refreshing to feel confident that your code won't break if you change something somewhere else. I finished this bit, and now I can work on the parsing area without having to put anything else in the mental buffer.
Flexibility during usage. 


Here is an example of how my library will be used:

UserFinder userFinder = new UserFinder(SourceType.Xml);
var foundUser = userFinder.GetUserById(1);


Compare this to the old version of the library:

//Let's create an XmlMemberFinder, since we'll use the XML api as our data source.
XmlMemberFinder xmlMemberFinder = new XmlMemberFinder();

//MemberList is the class you'll use in your application to get anything you need 
//relating to members.
MemberLister memberList = new MemberLister(xmlMemberFinder);

//This is an example of fetching and listing a user.
var member = memberList.FindMember(1);


I think I have made improvements, but there is always someone smarter out there. :) 

Thanks for your time!
Personally I'd make the UserFinder class source-independent.
This could be either by seeing the Xml and Test sources as a mapper and the UserFinder as a model (some kind of DataMapper):

public interface UserMapperInterface {}
public class XmlSource : UserMapperInterface { // ... }
public class TestSource : UserMapperInterface { // ... }

public class UserFinder {
     public UserFinder(UserMapperInterface $source) { // ... }
     public UserFinder() { // use default source }
}


This way you make the GetUserById method source-independent. Basic usage would be:

UserFinder t = new UserFinder(new TestSource());
// UserFinder t = new UserFinder(); // using the default source
t.GetUserById(43);


This way you seperate the source logic from the operations and you can easily add new sources without touching the UserFinder class.