private static IEnumerable<Tuple<string, Assembly>> HuntForAssemblies(string configurationString)
{
if (configurationString == null)
{
yield break;
}
var commaIndex = configurationString.IndexOf(',');
if (commaIndex >= 0)
{
// assembly is given, break the type and assembly apart
var methodOrTypeName = DotByDot(configurationString.Substring(0, commaIndex)).FirstOrDefault();
var assemblyName = configurationString.Substring(commaIndex + 1).Trim();
var assembly = TryAssemblyLoad(assemblyName);
if (assembly != null)
{
yield return Tuple.Create(methodOrTypeName, assembly);
}
}
else
{
// assembly is inferred from type name
var methodOrTypeName = DotByDot(configurationString).FirstOrDefault();
// go through each segment except the first (assuming the last segment is a type name at a minimum))
foreach (var assemblyName in DotByDot(methodOrTypeName).Skip(1))
{
var assembly = TryAssemblyLoad(assemblyName);
if (assembly != null)
{
yield return Tuple.Create(methodOrTypeName, assembly);
}
}
}
}