Skip to content

Commit

Permalink
fix: copy MemberNotNull attribute internally for use with NETSTANDARD…
Browse files Browse the repository at this point in the history
…2.1 code
  • Loading branch information
egil committed Oct 12, 2023
1 parent d96c42e commit be17d1f
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#if NETSTANDARD2_1
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace System.Diagnostics.CodeAnalysis;

/// <summary>
/// Specifies that the method or property will ensure that the listed field and property members have not-null values.
/// </summary>
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
internal sealed class MemberNotNullAttribute : Attribute
{
/// <summary>Initializes the attribute with a field or property member.</summary>
/// <param name="member">
/// The field or property member that is promised to be not-null.
/// </param>
[SuppressMessage("Design", "CA1019:Define accessors for attribute arguments", Justification = "Copied from dotnet team.")]
public MemberNotNullAttribute(string member) => Members = new[] { member };

/// <summary>Initializes the attribute with the list of field and property members.</summary>
/// <param name="members">
/// The list of field and property members that are promised to be not-null.
/// </param>
public MemberNotNullAttribute(params string[] members) => Members = members;

/// <summary>Gets field or property member names.</summary>
public string[] Members { get; }
}
#endif
19 changes: 8 additions & 11 deletions src/bunit.core/TestServiceProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,24 +97,21 @@ public void UseServiceProviderFactory<TContainerBuilder>(IServiceProviderFactory
throw new ArgumentNullException(nameof(serviceProviderFactory));
}

UseServiceProviderFactory(
serviceCollection =>
{
var containerBuilder = serviceProviderFactory.CreateBuilder(serviceCollection);
configure?.Invoke(containerBuilder);
return serviceProviderFactory.CreateServiceProvider(containerBuilder);
});
UseServiceProviderFactory(serviceCollection =>
{
var containerBuilder = serviceProviderFactory.CreateBuilder(serviceCollection);
configure?.Invoke(containerBuilder);
return serviceProviderFactory.CreateServiceProvider(containerBuilder);
});
}

/// <summary>
/// Creates the underlying service provider. Throws if it was already build.
/// Automatically called while getting a service if unitialized.
/// Automatically called while getting a service if uninitialized.
/// No longer will accept calls to the <c>AddService</c>'s methods.
/// See <see cref="IsProviderInitialized"/>
/// </summary>
#if !NETSTANDARD2_1
[MemberNotNull(nameof(serviceProvider))]
#endif
private void InitializeProvider()
{
CheckInitializedAndThrow();
Expand Down Expand Up @@ -155,7 +152,7 @@ public object GetService(Type serviceType)
if (serviceProvider is null)
InitializeProvider();

var result = serviceProvider!.GetService(serviceType);
var result = serviceProvider.GetService(serviceType);

if (result is null && fallbackServiceProvider is not null)
result = fallbackServiceProvider.GetService(serviceType);
Expand Down

0 comments on commit be17d1f

Please sign in to comment.