@@ -8,61 +8,14 @@ namespace Testcontainers.Xunit;
88/// <typeparam name="TBuilderEntity">The builder entity.</typeparam>
99/// <typeparam name="TContainerEntity">The container entity.</typeparam>
1010[ PublicAPI ]
11- public class ContainerFixture < TBuilderEntity , TContainerEntity > : IAsyncLifetime
11+ public class ContainerFixture < TBuilderEntity , TContainerEntity > ( IMessageSink messageSink ) : ContainerLifetime < TBuilderEntity , TContainerEntity >
1212 where TBuilderEntity : IContainerBuilder < TBuilderEntity , TContainerEntity > , new ( )
1313 where TContainerEntity : IContainer
1414{
15- private Lazy < TContainerEntity > _container ;
16-
17- public ContainerFixture ( IMessageSink messageSink )
18- {
19- MessageSink = messageSink ;
20- _container = new Lazy < TContainerEntity > ( ( ) =>
21- {
22- var containerBuilder = new TBuilderEntity ( ) . WithLogger ( new MessageSinkLogger ( MessageSink ) ) ;
23- return Configure ( containerBuilder ) . Build ( ) ;
24- } ) ;
25- }
26-
2715 /// <summary>
2816 /// The message sink used for reporting diagnostic messages.
2917 /// </summary>
30- protected IMessageSink MessageSink { get ; }
31-
32- /// <summary>
33- /// The container instance.
34- /// </summary>
35- public TContainerEntity Container => _container . Value ;
36-
37- /// <summary>
38- /// Extension point to further configure the container instance.
39- /// </summary>
40- /// <example>
41- /// <code>
42- /// public class MariaDbRootUserFixture(IMessageSink messageSink) : DbContainerFixture<MariaDbBuilder, MariaDbContainer>(messageSink)
43- /// {
44- /// public override DbProviderFactory DbProviderFactory => MySqlConnectorFactory.Instance;
45- ///
46- /// protected override MariaDbBuilder Configure(MariaDbBuilder builder)
47- /// {
48- /// return builder.WithUsername("root");
49- /// }
50- /// }
51- /// </code>
52- /// </example>
53- /// <param name="builder">The container builder.</param>
54- /// <returns>A configured instance of <typeparamref name="TBuilderEntity" />.</returns>
55- protected virtual TBuilderEntity Configure ( TBuilderEntity builder ) => builder ;
56-
57- /// <inheritdoc />
58- Task IAsyncLifetime . InitializeAsync ( ) => InitializeAsync ( ) ;
59-
60- /// <inheritdoc cref="IAsyncLifetime.InitializeAsync()" />
61- protected virtual Task InitializeAsync ( ) => Container . StartAsync ( ) ;
62-
63- /// <inheritdoc />
64- Task IAsyncLifetime . DisposeAsync ( ) => DisposeAsync ( ) ;
18+ protected IMessageSink MessageSink { get ; } = messageSink ;
6519
66- /// <inheritdoc cref="IAsyncLifetime.DisposeAsync()" />
67- protected virtual Task DisposeAsync ( ) => Container . DisposeAsync ( ) . AsTask ( ) ;
20+ protected override ILogger Logger { get ; } = new MessageSinkLogger ( messageSink ) ;
6821}
0 commit comments