Skip to content

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

@kerego

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

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