public TestContainer(TestContainerList containers, IVsProject project, string source)
     : base(containers.Discoverer, source)
 {
     Project = project;
     ProjectDirectory = project.GetProjectDir();
     BaseDirectory = Discoverer.BaseDirectory;
     Name = string.Join("/", new[] {
         Project.GetProjectName(),
         Path.GetDirectoryName(GetRelativePath(Source)).Replace('\\', '/')
     }.Where(s => !string.IsNullOrWhiteSpace(s)));
     Logger = new TestLogger(Discoverer.Logger, Name);
     ServerLogger = CreateServerLogger();
     Logger.Debug("Creating TestContainer for {0}", GetRelativePath(Source));
     Containers = containers;
     SourceSettings = Discoverer.TestSettings.AddSource(Name, Source);
     try
     {
         Init();
     }
     catch (Exception ex)
     {
         Validate(false, "Error: " + ex.Message);
         Logger.Error(ex, "Could not load tests");
     }
     FileWatchers = GetFileWatchers().Where(f => f != null).ToList();
     if (IsValid)
     {
         SourceSettingsPersister.Save(Discoverer.TestAdapterInfo.SettingsFileDirectory, SourceSettings);
         StartTestServer();
     }
     if (!IsValid)
     {
         Logger.Warn(InvalidReason);
     }
     else
     {
         Logger.Debug("TestContainer created");
     }
 }