我试图遵循微软的Ocelot网关教程(https://learn.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/implement-api-gateways-with-ocelot)。
首先,我改进了一个新的空ASP.NET核心web应用程序:
dotnet new web然后我安装了Ocelot依赖项(https://www.nuget.org/packages/Ocelot/):
dotnet add package Ocelot --version 17.0.0然后,我从教程中提取了代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Ocelot.DependencyInjection;
using Ocelot.Middleware;
using System.IO;
namespace MyApp
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args)
{
var builder = WebHost.CreateDefaultBuilder(args);
builder.ConfigureServices(s => s.AddSingleton(builder))
.ConfigureAppConfiguration(
ic => ic.AddJsonFile(Path.Combine("configuration",
"configuration.json")))
.UseStartup<Startup>();
var host = builder.Build();
return host;
}
}
}但是,它抱怨说,在BuildWebHost方法中调用的BuildWebHost类“由于其保护级别而无法访问”。据微软(https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.webhost)称,WebHost“为创建具有预先配置的默认值的IWebHost和IWebHostBuilder实例提供了方便的方法”,如下所示:
public static class WebHost
...为什么它抱怨WebHost是不可访问的,而这个类实际上是公开的?我在这里错过了什么?
发布于 2021-01-21 12:16:27
在文档中,WebHost位于名称空间Microsoft.AspNetCore中。但是在您的代码中,它没有使用这个命名空间。
在Visual中,您可以尝试转到WebHost上的definition来发现类型的来源。
正如@leiflundgren所支持的那样,正如您的代码具有使用Microsoft.AspNetCore.Hosting一样,编译器认为您需要使用Microsoft.AspNetCore.Hosting.WebHost。
https://github.com/dotnet/aspnetcore/blob/main/src/Hosting/Hosting/src/Internal/WebHost.cs
namespace Microsoft.AspNetCore.Hosting;
internal sealed partial class WebHost : IWebHost, IAsyncDisposable
{
....
}但是这个类有作用域internal,那么它不会被公开,可以被代码使用。因此,出现了以下错误:
WebHost由于其保护级别而无法访问。
https://stackoverflow.com/questions/65827042
复制相似问题