-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Closed
Labels
Description
Description
It looks like #81532 has broken NativeAOT + DependencyInjection.
Reproduction Steps
dotnet publish the following app:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<OutputType>exe</OutputType>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<PublishAot>true</PublishAot>
<RuntimeFrameworkVersion>8.0.0-preview.2.23107.1</RuntimeFrameworkVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="$(RuntimeFrameworkVersion)" />
</ItemGroup>
</Project>using Microsoft.Extensions.DependencyInjection;
using System.Diagnostics.CodeAnalysis;
var services = new ServiceCollection();
services.AddTransient(typeof(IOptionsFactory<>), typeof(OptionsFactory<>));
var sp = services.BuildServiceProvider();
var options = sp.GetRequiredService<IOptionsFactory<RouteHandlerOptions>>().Create();
Console.WriteLine(options.ToString());
public sealed class RouteHandlerOptions
{
public RouteHandlerOptions() { }
public bool ThrowOnBadRequest { get; set; }
}
public interface IOptionsFactory<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] TOptions>
where TOptions : class
{
TOptions Create();
}
public class OptionsFactory<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] TOptions> :
IOptionsFactory<TOptions>
where TOptions : class
{
public TOptions Create()
{
return Activator.CreateInstance<TOptions>();
}
}Expected behavior
The app should print RouteHandlerOptions.
Actual behavior
The app fails:
Unhandled Exception: System.MissingMethodException: Constructor on type 'RouteHandlerOptions' not found.
at System.Activator.CreateInstance[T]() + 0x78
at Program.<Main>$(String[] args) + 0x9c
at Net8Api!<BaseAddress>+0x170849
Regression?
Yes. This worked in previous builds.
Known Workarounds
No response
Configuration
No response
Other information
cc @vitek-karas