Skip to content

Commit be17d1f

Browse files
committed
fix: copy MemberNotNull attribute internally for use with NETSTANDARD2.1 code
1 parent d96c42e commit be17d1f

File tree

2 files changed

+37
-11
lines changed

2 files changed

+37
-11
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#if NETSTANDARD2_1
2+
// Licensed to the .NET Foundation under one or more agreements.
3+
// The .NET Foundation licenses this file to you under the MIT license.
4+
5+
namespace System.Diagnostics.CodeAnalysis;
6+
7+
/// <summary>
8+
/// Specifies that the method or property will ensure that the listed field and property members have not-null values.
9+
/// </summary>
10+
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
11+
internal sealed class MemberNotNullAttribute : Attribute
12+
{
13+
/// <summary>Initializes the attribute with a field or property member.</summary>
14+
/// <param name="member">
15+
/// The field or property member that is promised to be not-null.
16+
/// </param>
17+
[SuppressMessage("Design", "CA1019:Define accessors for attribute arguments", Justification = "Copied from dotnet team.")]
18+
public MemberNotNullAttribute(string member) => Members = new[] { member };
19+
20+
/// <summary>Initializes the attribute with the list of field and property members.</summary>
21+
/// <param name="members">
22+
/// The list of field and property members that are promised to be not-null.
23+
/// </param>
24+
public MemberNotNullAttribute(params string[] members) => Members = members;
25+
26+
/// <summary>Gets field or property member names.</summary>
27+
public string[] Members { get; }
28+
}
29+
#endif

src/bunit.core/TestServiceProvider.cs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,24 +97,21 @@ public void UseServiceProviderFactory<TContainerBuilder>(IServiceProviderFactory
9797
throw new ArgumentNullException(nameof(serviceProviderFactory));
9898
}
9999

100-
UseServiceProviderFactory(
101-
serviceCollection =>
102-
{
103-
var containerBuilder = serviceProviderFactory.CreateBuilder(serviceCollection);
104-
configure?.Invoke(containerBuilder);
105-
return serviceProviderFactory.CreateServiceProvider(containerBuilder);
106-
});
100+
UseServiceProviderFactory(serviceCollection =>
101+
{
102+
var containerBuilder = serviceProviderFactory.CreateBuilder(serviceCollection);
103+
configure?.Invoke(containerBuilder);
104+
return serviceProviderFactory.CreateServiceProvider(containerBuilder);
105+
});
107106
}
108107

109108
/// <summary>
110109
/// Creates the underlying service provider. Throws if it was already build.
111-
/// Automatically called while getting a service if unitialized.
110+
/// Automatically called while getting a service if uninitialized.
112111
/// No longer will accept calls to the <c>AddService</c>'s methods.
113112
/// See <see cref="IsProviderInitialized"/>
114113
/// </summary>
115-
#if !NETSTANDARD2_1
116114
[MemberNotNull(nameof(serviceProvider))]
117-
#endif
118115
private void InitializeProvider()
119116
{
120117
CheckInitializedAndThrow();
@@ -155,7 +152,7 @@ public object GetService(Type serviceType)
155152
if (serviceProvider is null)
156153
InitializeProvider();
157154

158-
var result = serviceProvider!.GetService(serviceType);
155+
var result = serviceProvider.GetService(serviceType);
159156

160157
if (result is null && fallbackServiceProvider is not null)
161158
result = fallbackServiceProvider.GetService(serviceType);

0 commit comments

Comments
 (0)