private static void ExtractTypes(Assembly assembly, ISet<Lazy<ISinkElement>> sinks, ISet<Lazy<IFormatterElement>> formatters) { if (assembly.IsFrameworkAssembly()) { return; } foreach (Type type in assembly.GetTypes().Where(t => !t.IsAbstract)) { if (typeof(ISinkElement).IsAssignableFrom(type)) { sinks.Add(new Lazy<ISinkElement>(() => (ISinkElement)Activator.CreateInstance(type))); } else if (typeof(IFormatterElement).IsAssignableFrom(type)) { formatters.Add(new Lazy<IFormatterElement>(() => (IFormatterElement)Activator.CreateInstance(type))); } } }