Skip to content

Class Data Sources with ShareType.None are constructed and initialized twice #3855

Description

@kerego

When using property injection with SharedType.None the classes are constructed and initialized twice causing race conditions

Reproducible snippet

public sealed class BasicDependency
{
    public BasicDependency()
    {
        Console.WriteLine("BasicDependency Constructor()");
    }
}

public sealed class BasicAsyncDependency : IAsyncInitializer
{
    public BasicAsyncDependency()
    {
        Console.WriteLine("BasicAsyncDependency Constructor()");
    }

    public async Task InitializeAsync()
    {
        Console.WriteLine("BasicAsyncDependency InitializeAsync()");
    }
}

public class BasicTest
{
    [ClassDataSource<BasicAsyncDependency>(Shared = SharedType.None)]
    public required BasicAsyncDependency AsyncDependency { get; init; }

    [ClassDataSource<BasicDependency>(Shared = SharedType.None)]
    public required BasicDependency Dependency { get; init; }

    [Test]
    public async Task Foo()
    {
        await Assert.That(AsyncDependency).IsNotNull();
        await Assert.That(Dependency).IsNotNull();
    }
}

Actual Output

BasicAsyncDependency Constructor()
BasicDependency Constructor()
BasicAsyncDependency Constructor()
BasicDependency Constructor()
BasicAsyncDependency InitializeAsync()
BasicAsyncDependency InitializeAsync()

Expected Output

BasicAsyncDependency Constructor()
BasicDependency Constructor()
BasicAsyncDependency InitializeAsync()

Versions tested

  • 0.76.18 - OK
  • 0.76.26 - FAIL
  • 1.20.0 - FAIL

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions