Skip to content

Commit

Permalink
workaround for the #580
Browse files Browse the repository at this point in the history
  • Loading branch information
dadhi committed Nov 12, 2023
1 parent 5d5eefd commit 3f8217d
Showing 1 changed file with 12 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public class GHIssue580_Scope_is_lost_in_IResolver_inside_scope_because_of_singl
{
public int Run()
{
// Test_scope_inside_the_transient_dependency_of_the_scoped_service();
Test_scope_inside_the_transient_dependency_of_the_scoped_service();
Test_scope_inside_the_transient_dependency_of_the_scoped_service_But_injected_first_in_singleton();
return 2;
}
Expand All @@ -29,19 +29,19 @@ public void Test_scope_inside_the_transient_dependency_of_the_scoped_service()
transient.Do();
}

// [Test] // todo: @fixme
[Test]
public void Test_scope_inside_the_transient_dependency_of_the_scoped_service_But_injected_first_in_singleton()
{
var container = new Container();

container.Register<ServiceResolver>(reuse: Reuse.Transient);
container.Register<ServiceResolver>(setup: Setup.With(useParentReuse: true)); // THIS IS THE FIX!

container.Register<ServiceSingleton>(reuse: Reuse.Singleton);
container.Register<ServiceTransient>(reuse: Reuse.Transient);
container.Register<ServiceScoped>(reuse: Reuse.Scoped);

// resolving singleton first breaks the resolution in the Do below
var singleton = container.Resolve<ServiceSingleton>();
container.Resolve<ServiceSingleton>();

using var scope = container.OpenScope();

Expand All @@ -51,34 +51,34 @@ public void Test_scope_inside_the_transient_dependency_of_the_scoped_service_But

public class ServiceSingleton
{
private readonly ServiceResolver _serviceResolver;
public readonly ServiceResolver ServiceResolver;

public ServiceSingleton(ServiceResolver serviceResolver) =>
_serviceResolver = serviceResolver;
ServiceResolver = serviceResolver;
}

public class ServiceTransient
{
private readonly ServiceResolver _serviceResolver;
public readonly ServiceResolver ServiceResolver;

public ServiceTransient(ServiceResolver serviceResolver) =>
_serviceResolver = serviceResolver;
ServiceResolver = serviceResolver;

public void Do()
{
_ = _serviceResolver.GetService<ServiceScoped>();
_ = ServiceResolver.GetService<ServiceScoped>();
}
}

public class ServiceResolver
{
private readonly IResolver _resolver;
public readonly IResolver Resolver;

public ServiceResolver(IResolver resolver) =>
_resolver = resolver;
Resolver = resolver;

public TService GetService<TService>() =>
_resolver.Resolve<TService>();
Resolver.Resolve<TService>();
}

public class ServiceScoped
Expand Down

0 comments on commit 3f8217d

Please sign in to comment.