Skip to content

Instantly share code, notes, and snippets.

@davybrion
Created September 3, 2012 17:43
Show Gist options
  • Save davybrion/3611259 to your computer and use it in GitHub Desktop.
Save davybrion/3611259 to your computer and use it in GitHub Desktop.
code snippets for "Introduction To Dependency Injection" post
public class SqlMetaDataProvider : IMetaDataProvider
{
private readonly string _connectionString;
private readonly SqlDataRetriever _sqlDataRetriever;
public SqlMetaDataProvider(string connectionString)
{
_connectionString = connectionString;
_sqlDataRetriever = new SqlDataRetriever();
}
public MetaDataStore GetMetaDataStore()
{
SqlMetaData sqlMetaData = _sqlDataRetriever.GetMetaData(_connectionString);
return ConvertToMetaDataStore(sqlMetaData);
}
private MetaDataStore ConvertToMetaDataStore(SqlMetaData sqlMetaData)
{
MetaDataStore store = new MetaDataStore();
AddTablesToStore(sqlMetaData.TableInfo, store);
AddColumnsToTablesInStore(sqlMetaData.ColumnInfo, store);
CreateRelationshipsBetweenTables(sqlMetaData.RelationshipInfo, store);
return store;
}
}
public interface ISqlDataRetriever
{
SqlMetaData GetMetaData(string connectionString);
}
public class SqlDataRetriever : ISqlDataRetriever
private readonly ISqlDataRetriever _sqlDataRetriever;
public SqlMetaDataProvider(string connectionString, ISqlDataRetriever sqlDataRetriever)
{
_connectionString = connectionString;
_sqlDataRetriever = sqlDataRetriever;
}
public SqlMetaDataProvider(string connectionString)
: this(connectionString, new SqlDataRetriever()) {}
public class SqlDataProviderStub : ISqlDataRetriever
{
private SqlMetaData _sqlMetaData;
public SqlMetaData SqlMetaData
{
set { _sqlMetaData = value; }
}
SqlMetaData ISqlDataRetriever.GetMetaData(string connectionString)
{
return _sqlMetaData;
}
}
[Test]
public void GetMetaDataStore_ProvideDataSetWithTwoTablesAndRelationship_MetaDataStoreIsCorrect()
{
SqlMetaData sqlMetaData = PrepareMetaDataSetInMemoryWithTestData();
SqlDataProviderStub sqlDataProvider = new SqlDataProviderStub();
sqlDataProvider.SqlMetaData = sqlMetaData;
// pass null as the connectionString, and pass our SqlDataProviderStub
IMetaDataProvider metaDataProvider = new SqlMetaDataProvider(null, sqlDataProvider);
MetaDataStore store = metaDataProvider.GetMetaDataStore();
AssertStoreContainsOurTestData(store);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment