Skip to content

Commit 6cd3b02

Browse files
authored
Autoactivate substituted values (#61)
Without this, the values may not get resolved correctly as the timing wouldn't be correct.
1 parent 6574ca9 commit 6cd3b02

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

AutofacContrib.NSubstitute.Tests/SubstituteForFixture.cs

+51
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,57 @@ namespace AutofacContrib.NSubstitute.Tests
99
[TestFixture]
1010
public class SubstituteForFixture
1111
{
12+
[Test]
13+
public void ConfigureSubstitueFor()
14+
{
15+
using var mock = AutoSubstitute.Configure()
16+
.SubstituteFor<Concrete1>()
17+
.ConfigureSubstitute((c, ctx) =>
18+
{
19+
var concrete2 = ctx.Resolve<Concrete2>();
20+
c.Configure().Get().Returns(concrete2);
21+
})
22+
.SubstituteFor<Concrete2>()
23+
.ConfigureSubstitute((c, ctx) =>
24+
{
25+
var concrete3 = ctx.Resolve<Concrete3>();
26+
c.Configure().Get().Returns(concrete3);
27+
})
28+
.SubstituteFor<Concrete3>()
29+
.Build();
30+
31+
var result = mock.Resolve<ConcreteTest>().Get();
32+
var expected = mock.Resolve<Concrete3>();
33+
34+
Assert.AreSame(expected, result);
35+
}
36+
37+
public abstract class Concrete1
38+
{
39+
public abstract Concrete2 Get();
40+
}
41+
42+
public abstract class Concrete2
43+
{
44+
public abstract Concrete3 Get();
45+
}
46+
47+
public abstract class Concrete3
48+
{
49+
}
50+
51+
public class ConcreteTest
52+
{
53+
private readonly Concrete2 _c2;
54+
55+
public ConcreteTest(Concrete1 c1)
56+
{
57+
_c2 = c1.Get();
58+
}
59+
60+
public Concrete3 Get() => _c2.Get();
61+
}
62+
1263
[Test]
1364
[Obsolete]
1465
public void Example_test_with_substitute_for_concrete_obsolete()

AutofacContrib.NSubstitute/AutoSubstituteBuilder.cs

+1
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ private SubstituteForBuilder<TService> CreateSubstituteForBuilder<TService>(Func
267267

268268
var registration = _builder.Register(_ => factory())
269269
.As<TService>()
270+
.AutoActivate()
270271
.InstancePerLifetimeScope();
271272
var builder = new SubstituteForBuilder<TService>(this, registration, isSubstituteFor);
272273

0 commit comments

Comments
 (0)