I want to create an extension method for WebApplicationBuilder:
public static void AddData(this WebApplicationBuilder builder)
{
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(option =>
{
option.UseSqlite(connectionString);
});
}
this method works in a project that use: <Project Sdk="Microsoft.NET.Sdk.Web">
,
but if I put this method in a class libary then it doesn’t work (<Project Sdk="Microsoft.NET.Sdk>
) because it doesn’t find Microsoft.AspNetCore.Builder
Otherwise, if I use <Project Sdk="Microsoft.NET.Sdk.Web">
the compiler say that there is no Main in the project.
How can I do?
Why can’t I write this?
using Microsoft.AspNetCore.Builder;
2
Answers
I did this recently when I converted to a .Net 6 project. I wasn’t able to extend the Builder either, so I added the extension to the IServiceCollection and passed in the configuration. So to use your example, my code looked more like:
Where ApplicationSettings is a custom class that is bound to the app settings in the json. So my Program.cs has these lines:
Using the IServiceCollection in the extension method only requires:
I had exactly the same problem but this Microsoft doc explains what you need to do.
Add
to your .csproj and you can then use
in your regular class library which targets
Microsoft.NET.Sdk
.