.net core 无法识别承载启动程序集的Blazor
我正在构建一个Blazor应用程序(wasm和服务器),它们都共享一个API和一组服务。我把这些服务分到了它自己的类库中。大概有50个左右的服务,我不想重复服务器和WASM配置部分中的服务声明 现状 瓦斯姆.net core 无法识别承载启动程序集的Blazor,.net-core,blazor,.net Core,Blazor,我正在构建一个Blazor应用程序(wasm和服务器),它们都共享一个API和一组服务。我把这些服务分到了它自己的类库中。大概有50个左右的服务,我不想重复服务器和WASM配置部分中的服务声明 现状 瓦斯姆 公共静态异步任务主(字符串[]args) { var builder=WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add(“应用程序”); var zooAPI=新Uri(“http://localho
公共静态异步任务主(字符串[]args)
{
var builder=WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add(“应用程序”);
var zooAPI=新Uri(“http://localhost:51552/api/v1/");
builder.Services.AddHttpClient(client=>client.BaseAddress=zooAPI);
等待builder.Build().RunAsync();
}
服务器
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
var zooAPI = new Uri("http://localhost:51552/api/v1/");
services.AddHttpClient<IZooService, ZooService>(client => client.BaseAddress = zooAPI);
}
public void配置服务(IServiceCollection服务)
{
services.AddRazorPages();
AddServerSideBlazor();
var zooAPI=新Uri(“http://localhost:51552/api/v1/");
services.AddHttpClient(client=>client.BaseAddress=zooAPI);
}
由于这两个都注册了最终将超过50个服务的服务,我想在我的服务类库中添加一个启动
[assembly: HostingStartup(typeof(Zoo.Services.ServicesStartup))]
namespace Zoo.Services
{
public class ServicesStartup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
var zooAPI = new Uri("http://localhost:51552/api/v1/");
builder.ConfigureServices((context, services) =>
{
services.AddHttpClient<IZooService, ZooService>(client => client.BaseAddress = zooAPI);
});
}
}
}
[程序集:HostingStartup(typeof(Zoo.Services.ServicesStartup))]
名称空间Zoo.Services
{
公共类服务启动:IHostingStartup
{
公共void配置(IWebHostBuilder)
{
var zooAPI=新Uri(“http://localhost:51552/api/v1/");
builder.ConfigureServices((上下文,服务)=>
{
services.AddHttpClient(client=>client.BaseAddress=zooAPI);
});
}
}
}
我遇到的问题是,此启动未被识别,服务未被注册。异常为“处理请求时发生未处理的异常。InvalidOperationException:无法为属性“ZooService”提供值。没有IZooService类型的注册服务
要在应用程序启动时识别并注册此ServiceStartup,我还缺少什么?为了让Blazor应用程序知道需要读取HostingStartup,您需要告诉它要查看的程序集 对于Program.cs中的服务器托管,您可以添加StartupAssemblys密钥,也可以将其添加到EnvironmentVariables ASPNETCORE_hostingstartupAssemblys中
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "Zoo.Services").UseStartup<Startup>();
});
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey,“Zoo.Services”).UseStartup();
});
我还没有弄明白如何将它添加到WASM中
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "Zoo.Services").UseStartup<Startup>();
});