如何在 Class 库中导入 WebApplicationBuilder?
How import WebApplicationBuilder in a Class Library?
我想为 WebApplicationBuilder 创建一个扩展方法:
public static void AddData(this WebApplicationBuilder builder)
{
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(option =>
{
option.UseSqlite(connectionString);
});
}
此方法适用于使用以下项目的项目:<Project Sdk="Microsoft.NET.Sdk.Web">
,
但是如果我把这个方法放在 class 库中那么它就不起作用 (<Project Sdk="Microsoft.NET.Sdk>
) 因为它找不到 Microsoft.AspNetCore.Builder
否则,如果我使用<Project Sdk="Microsoft.NET.Sdk.Web">
,编译器会说项目中没有Main。
我该怎么办?
为什么我不能写这个?
using Microsoft.AspNetCore.Builder;
我最近在转换为 .Net 6 项目时这样做了。我也无法扩展 Builder,因此我将扩展添加到 IServiceCollection 并传入了配置。所以要使用你的例子,我的代码看起来更像:
public static void AddData(this IServiceCollection services, ApplicationSettings appSettings)
{
services.AddDbContext<ApplicationDbContext>(option =>
{
option.UseSqlite(appSettings.ConnectionString);
});
}
其中 ApplicationSettings 是绑定到 json 中的应用程序设置的自定义 class。所以我的 Program.cs 有这些行:
var builder = WebApplication.CreateBuilder(args);
ConfigurationManager configuration = builder.Configuration;
var appSettings = new ApplicationSettings();
configuration.Bind(appSettings);
builder.Services.AddData(appSettings);
在扩展方法中使用 IServiceCollection 只需要:
using Microsoft.Extensions.DependencyInjection;
我遇到了完全相同的问题,但 this Microsoft doc 解释了您需要做什么。
添加
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
添加到您的 .csproj,然后您可以使用
using Microsoft.AspNetCore.Builder;
在以 Microsoft.NET.Sdk
.
为目标的常规 class 库中
我想为 WebApplicationBuilder 创建一个扩展方法:
public static void AddData(this WebApplicationBuilder builder)
{
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(option =>
{
option.UseSqlite(connectionString);
});
}
此方法适用于使用以下项目的项目:<Project Sdk="Microsoft.NET.Sdk.Web">
,
但是如果我把这个方法放在 class 库中那么它就不起作用 (<Project Sdk="Microsoft.NET.Sdk>
) 因为它找不到 Microsoft.AspNetCore.Builder
否则,如果我使用<Project Sdk="Microsoft.NET.Sdk.Web">
,编译器会说项目中没有Main。
我该怎么办?
为什么我不能写这个?
using Microsoft.AspNetCore.Builder;
我最近在转换为 .Net 6 项目时这样做了。我也无法扩展 Builder,因此我将扩展添加到 IServiceCollection 并传入了配置。所以要使用你的例子,我的代码看起来更像:
public static void AddData(this IServiceCollection services, ApplicationSettings appSettings)
{
services.AddDbContext<ApplicationDbContext>(option =>
{
option.UseSqlite(appSettings.ConnectionString);
});
}
其中 ApplicationSettings 是绑定到 json 中的应用程序设置的自定义 class。所以我的 Program.cs 有这些行:
var builder = WebApplication.CreateBuilder(args);
ConfigurationManager configuration = builder.Configuration;
var appSettings = new ApplicationSettings();
configuration.Bind(appSettings);
builder.Services.AddData(appSettings);
在扩展方法中使用 IServiceCollection 只需要:
using Microsoft.Extensions.DependencyInjection;
我遇到了完全相同的问题,但 this Microsoft doc 解释了您需要做什么。
添加
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
添加到您的 .csproj,然后您可以使用
using Microsoft.AspNetCore.Builder;
在以 Microsoft.NET.Sdk
.