Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generic Host restricts Startup constructor injection #353

Open
Tratcher opened this issue Apr 12, 2019 · 0 comments
Open

Generic Host restricts Startup constructor injection #353

Tratcher opened this issue Apr 12, 2019 · 0 comments
Labels
3.0.0 Announcements related to ASP.NET Core 3.0 Breaking change Documented The breaking change has been published to the .NET Core docs Migrated
Milestone

Comments

@Tratcher
Copy link
Member

Tratcher commented Apr 12, 2019

TLDR: The only types the generic Host supports for Startup constructor injection are IHostEnvironment, IWebHostEnvironment, and IConfiguration. Applications using WebHost are unaffected.

In 3.0 we've re-platformed the web stack onto the generic host library. You can see the change in Program.cs in the templates:

2.x:
https://github.com/aspnet/AspNetCore/blob/5cb615fcbe8559e49042e93394008077e30454c0/src/Templating/src/Microsoft.DotNet.Web.ProjectTemplates/content/EmptyWeb-CSharp/Program.cs#L20-L22
3.0:
https://github.com/aspnet/AspNetCore/blob/b1ca2c1155da3920f0df5108b9fedbe82efaa11c/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/Program.cs#L19-L24

One key behavior change here is that Host only uses one dependency injection container to build the application, as opposed to WebHost that used one for the host and one for the app. As a result the Startup constructor no longer supports custom service injection, only IHostEnvironment, IWebHostEnvironment, and IConfiguration can be injected. This change was made to avoid DI issues such as duplicate singleton services getting created.

Mitigations:

Inject services into Startup.Configure:
public void Configure(IApplicationBuilder app, IOptions<MyOptions> options)

[We'll add more based on requests for specific scenarios.]

See dotnet/aspnetcore#9337 for discussion.


This issue has been migrated to dotnet/docs#14900

@Tratcher Tratcher added Breaking change 3.0.0 Announcements related to ASP.NET Core 3.0 labels Apr 12, 2019
@Tratcher Tratcher added this to the 3.0.0 milestone Apr 12, 2019
@aspnet aspnet locked as resolved and limited conversation to collaborators Apr 12, 2019
@scottaddie scottaddie added the Documented The breaking change has been published to the .NET Core docs label Dec 17, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
3.0.0 Announcements related to ASP.NET Core 3.0 Breaking change Documented The breaking change has been published to the .NET Core docs Migrated
Projects
None yet
Development

No branches or pull requests

3 participants