/// <summary>
 /// Compose an instance of TestClassBuilder class.
 /// </summary>
 /// <param name="assembly">The assembly which types should be used.</param>
 /// <param name="callingAssemblyName">Name of calling assembly, which is set in <paramref name="assembly"/> in attribute InternalsVisibleTo.</param>
 /// <param name="typeRegistration">The action where the type registration is set up.</param>
 /// <param name="configure">The action where the configuration is set up.</param>
 /// <returns>The instance of <see cref="ITestClassBuilder"/>.</returns>
 public static ITestClassBuilder ComposeTestClassBuilder(this Assembly assembly,
     string callingAssemblyName,
     Action<IContainer> typeRegistration,
     Action<ITestMethodGeneratorConfigurator> configure = null)
 {
     var assemblyTraverser = AssemblyTraverser.Create(assembly, callingAssemblyName);
     var generatorRegistrationManager = new GeneratorRegistrationManager();
     var testGeneratorConfigurator = new TestMethodGeneratorConfigurator(assemblyTraverser, generatorRegistrationManager);
     var setup = new TestMethodGeneratorComposition(assemblyTraverser, testGeneratorConfigurator, generatorRegistrationManager);
     var testGenerators = setup.GetGenerators(typeRegistration, configure);
     return new TestClassBuilder(assemblyTraverser, testGenerators);
 }
 public TestMethodGeneratorComposition(IAssemblyTraverser traverser, TestMethodGeneratorConfigurator configurator, GeneratorRegistrationManager generatorRegistrationManager)
 {
     this.configurator = configurator;
     this.traverser = traverser;
     this.generatorRegistrationManager = generatorRegistrationManager;
 }