Skip to content

Commit a518a48

Browse files
authored
Merge pull request #1397 from SergeiPavlov/struct_ResolveRequest
Optimization: convert `ResolveRequest` into readonly struct
2 parents e61a651 + 095a0c3 commit a518a48

18 files changed

+58
-45
lines changed

src/Autofac/Core/Container.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public event EventHandler<ResolveOperationBeginningEventArgs> ResolveOperationBe
140140
public IComponentRegistry ComponentRegistry { get; }
141141

142142
/// <inheritdoc />
143-
public object ResolveComponent(ResolveRequest request)
143+
public object ResolveComponent(in ResolveRequest request)
144144
{
145145
return _rootLifetimeScope.ResolveComponent(request);
146146
}

src/Autofac/Core/ImplicitRegistrationSource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public IEnumerable<IComponentRegistration> RegistrationsFor(Service service, Fun
8686
/// <param name="ctx">A component context to resolve services.</param>
8787
/// <param name="request">A resolve request.</param>
8888
/// <returns>An implicit type instance.</returns>
89-
protected abstract object ResolveInstance<T>(IComponentContext ctx, ResolveRequest request)
89+
protected abstract object ResolveInstance<T>(IComponentContext ctx, in ResolveRequest request)
9090
where T : notnull;
9191

9292
/// <summary>

src/Autofac/Core/Lifetime/LifetimeScope.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -323,13 +323,8 @@ private ComponentRegistryBuilder CreateScopeRestrictedRegistry(object tag, Actio
323323
}
324324

325325
/// <inheritdoc />
326-
public object ResolveComponent(ResolveRequest request)
326+
public object ResolveComponent(in ResolveRequest request)
327327
{
328-
if (request == null)
329-
{
330-
throw new ArgumentNullException(nameof(request));
331-
}
332-
333328
CheckNotDisposed();
334329

335330
var operation = new ResolveOperation(this, DiagnosticSource);

src/Autofac/Core/Resolving/IResolveOperation.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,5 @@ public interface IResolveOperation
5959
/// <param name="currentOperationScope">The scope in the hierarchy in which the operation will begin.</param>
6060
/// <param name="request">The resolve request.</param>
6161
/// <returns>The component instance.</returns>
62-
object GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request);
62+
object GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, in ResolveRequest request);
6363
}

src/Autofac/Core/Resolving/Pipeline/DefaultResolveRequestContext.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ internal sealed class DefaultResolveRequestContext : ResolveRequestContext
2525
/// </param>
2626
internal DefaultResolveRequestContext(
2727
IResolveOperation owningOperation,
28-
ResolveRequest request,
28+
in ResolveRequest request,
2929
ISharingLifetimeScope scope,
3030
DiagnosticListener diagnosticSource)
3131
{
3232
Operation = owningOperation;
3333
ActivationScope = scope;
3434
Parameters = request.Parameters;
35-
_resolveRequest = request ?? throw new ArgumentNullException(nameof(request));
35+
_resolveRequest = request;
3636
PhaseReached = PipelinePhase.ResolveRequestStart;
3737
DiagnosticSource = diagnosticSource;
3838
}
@@ -90,7 +90,7 @@ public override void ChangeParameters(IEnumerable<Parameter> newParameters) =>
9090
Parameters = newParameters ?? throw new ArgumentNullException(nameof(newParameters));
9191

9292
/// <inheritdoc />
93-
public override object ResolveComponent(ResolveRequest request) =>
93+
public override object ResolveComponent(in ResolveRequest request) =>
9494
Operation.GetOrCreateInstance(ActivationScope, request);
9595

9696
/// <summary>

src/Autofac/Core/Resolving/Pipeline/ResolveRequestContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,5 +95,5 @@ public abstract class ResolveRequestContext : IComponentContext
9595
public abstract IComponentRegistry ComponentRegistry { get; }
9696

9797
/// <inheritdoc/>
98-
public abstract object ResolveComponent(ResolveRequest request);
98+
public abstract object ResolveComponent(in ResolveRequest request);
9999
}

src/Autofac/Core/Resolving/ResolveOperation.cs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public ResolveOperation(
4242
/// Execute the complete resolve operation.
4343
/// </summary>
4444
/// <param name="request">The resolution context.</param>
45-
public object Execute(ResolveRequest request)
45+
public object Execute(in ResolveRequest request)
4646
{
4747
return ExecuteOperation(request);
4848
}
@@ -93,13 +93,8 @@ public object Execute(ResolveRequest request)
9393
public SegmentedStack<ResolveRequestContext> RequestStack { get; } = new SegmentedStack<ResolveRequestContext>();
9494

9595
/// <inheritdoc />
96-
public object GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request)
96+
public object GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, in ResolveRequest request)
9797
{
98-
if (request is null)
99-
{
100-
throw new ArgumentNullException(nameof(request));
101-
}
102-
10398
if (_ended)
10499
{
105100
throw new ObjectDisposedException(ResolveOperationResources.TemporaryContextDisposed, innerException: null);
@@ -170,7 +165,7 @@ public object GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, R
170165
/// </summary>
171166
/// <param name="request">The resolve request.</param>
172167
/// <returns>The resolved instance.</returns>
173-
private object ExecuteOperation(ResolveRequest request)
168+
private object ExecuteOperation(in ResolveRequest request)
174169
{
175170
object result;
176171

@@ -233,7 +228,7 @@ private object ExecuteOperation(ResolveRequest request)
233228
/// to enable it to be optionally surrounded with diagnostics.
234229
/// </summary>
235230
[MethodImpl(MethodImplOptions.AggressiveInlining)]
236-
private void InvokePipeline(ResolveRequest request, DefaultResolveRequestContext requestContext)
231+
private void InvokePipeline(in ResolveRequest request, DefaultResolveRequestContext requestContext)
237232
{
238233
request.ResolvePipeline.Invoke(requestContext);
239234
if (requestContext.Instance == null)

src/Autofac/Diagnostics/DiagnosticSourceExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public static void MiddlewareSuccess(this DiagnosticListener diagnosticSource, R
6060
/// <param name="diagnosticSource">The diagnostic source to which events will be written.</param>
6161
/// <param name="operation">The pipeline resolve operation that is about to run.</param>
6262
/// <param name="initiatingRequest">The request that is responsible for starting this operation.</param>
63-
public static void OperationStart(this DiagnosticListener diagnosticSource, IResolveOperation operation, ResolveRequest initiatingRequest)
63+
public static void OperationStart(this DiagnosticListener diagnosticSource, IResolveOperation operation, in ResolveRequest initiatingRequest)
6464
{
6565
if (diagnosticSource.IsEnabled(DiagnosticEventKeys.OperationStart))
6666
{

src/Autofac/Diagnostics/OperationStartDiagnosticData.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class OperationStartDiagnosticData
1515
/// </summary>
1616
/// <param name="operation">The pipeline resolve operation that is about to run.</param>
1717
/// <param name="initiatingRequest">The request that is responsible for starting this operation.</param>
18-
public OperationStartDiagnosticData(IResolveOperation operation, ResolveRequest initiatingRequest)
18+
public OperationStartDiagnosticData(IResolveOperation operation, in ResolveRequest initiatingRequest)
1919
{
2020
Operation = operation;
2121
InitiatingRequest = initiatingRequest;

src/Autofac/Features/Decorators/DecoratorContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,5 @@ internal DecoratorContext UpdateContext(object decoratorInstance)
7878
}
7979

8080
/// <inheritdoc />
81-
public object ResolveComponent(ResolveRequest request) => _componentContext.ResolveComponent(request);
81+
public object ResolveComponent(in ResolveRequest request) => _componentContext.ResolveComponent(request);
8282
}

0 commit comments

Comments
 (0)