Skip to content

Commit 49ac940

Browse files
#141 Objects created without explicit binding began to use the specified default lifetime instead of Transient
1 parent ea0d8b0 commit 49ac940

6 files changed

Lines changed: 596 additions & 290 deletions

File tree

src/Pure.DI.Core/Core/BindingBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public MdBinding Build(MdSetup setup)
9898
.Select(c => c with { Tags = c.Tags.Select(tag => BuildTag(tag, implementationType, id)).ToImmutableArray() })
9999
.ToImmutableArray();
100100

101-
var lifetime = lifetimeProvider.GetActualLifetime(_defaultLifetimes, _lifetime, implementationType, implementationTags, contractsWithTags);
101+
var lifetime = lifetimeProvider.GetActualLifetime(_defaultLifetimes, _lifetime, implementationType, implementationTags, contractsWithTags, true);
102102

103103
return new MdBinding(
104104
int.MaxValue - specialBindingIdGenerator.Generate(),

src/Pure.DI.Core/Core/BindingsFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public MdBinding CreateAutoBinding(
132132
: ImmutableArray<MdTag>.Empty;
133133

134134
var newContracts = ImmutableArray.Create(new MdContract(semanticModel, setup.Source, sourceType, ContractKind.Implicit, ImmutableArray<MdTag>.Empty));
135-
var actualLifetime = lifetimeProvider.GetActualLifetime(setup.DefaultLifetimes, null, sourceType, ImmutableArray<MdTag>.Empty, newContracts);
135+
var actualLifetime = lifetimeProvider.GetActualLifetime(setup.DefaultLifetimes, null, sourceType, ImmutableArray<MdTag>.Empty, newContracts, false);
136136

137137
return new MdBinding(
138138
bindingId,

src/Pure.DI.Core/Core/DependencyGraphBuilder.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -382,11 +382,6 @@ public IEnumerable<DependencyNode> Build(GraphBuildContext ctx)
382382

383383
if (!disableAutoBinding)
384384
{
385-
/*if (!Debugger.IsAttached)
386-
{
387-
Debugger.Launch();
388-
}*/
389-
390385
var autoBinding = bindingsFactory.CreateAutoBinding(setup, targetNode, injection, typeConstructor, ++maxBindingId);
391386
var autoNodes = dependencyNodePrioritizer.SortByPriority(nodesFactory.CreateNodes(setup, typeConstructor, autoBinding)).ToList();
392387
foreach (var autoNode in autoNodes)

src/Pure.DI.Core/Core/ILifetimeProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ interface ILifetimeProvider
77
MdLifetime? lifetime,
88
ITypeSymbol? type,
99
IReadOnlyCollection<MdTag> tags,
10-
IReadOnlyCollection<MdContract> contracts);
10+
IReadOnlyCollection<MdContract> contracts,
11+
bool useCommonDefault);
1112
}

src/Pure.DI.Core/Core/LifetimeProvider.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
namespace Pure.DI.Core;
22

3-
class LifetimeProvider(ITypes types, IBaseSymbolsProvider baseSymbolsProvider) : ILifetimeProvider
3+
class LifetimeProvider(
4+
ITypes types,
5+
IBaseSymbolsProvider baseSymbolsProvider)
6+
: ILifetimeProvider
47
{
58
public MdLifetime? GetActualLifetime(
69
IReadOnlyCollection<MdDefaultLifetime> defaultLifetimes,
710
MdLifetime? lifetime,
811
ITypeSymbol? type,
912
IReadOnlyCollection<MdTag> tags,
10-
IReadOnlyCollection<MdContract> contracts)
13+
IReadOnlyCollection<MdContract> contracts,
14+
bool useCommonDefault)
1115
{
1216
if (lifetime is not null)
1317
{
@@ -30,6 +34,12 @@ class LifetimeProvider(ITypes types, IBaseSymbolsProvider baseSymbolsProvider) :
3034
}
3135
}
3236

37+
// ReSharper disable once ConvertIfStatementToReturnStatement
38+
if (!useCommonDefault)
39+
{
40+
return lifetime;
41+
}
42+
3343
return GetDefaultLifetime(defaultLifetimes);
3444
}
3545

0 commit comments

Comments
 (0)