“ IServiceCollection”不包含“ AddOcelot”的任何定义]

问题描述 投票:1回答:1

[当我尝试在程序类中添加ocelot时,由于文档指定应执行vs2019,我在用.NET Core 3.0实现Ocelot时遇到问题:vs2019向我显示此错误:

“ IServiceCollection”不包含“ AddOcelot”的定义或可访问的扩展方法“ AddOcelot”,该方法接受类型为“ IServiceCollection”的第一个参数(是否使用了任何指令或缺少程序集引用?],

[UseOcelot()方法也重复此错误

public class Program
{
    public static void Main(string[] args)
    {
        new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .ConfigureAppConfiguration((context, config) => 
            {
                config
                    .SetBasePath(context.HostingEnvironment.ContentRootPath)
                    .AddJsonFile("appsettings.json", true, true)
                    .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", true, true)
                    .AddJsonFile("ocelot.json")
                    .AddEnvironmentVariables();
            }).ConfigureServices(s => {
                s.AddOcelot().AddConsul();
            }).ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConsole();
            })
            .UseIIS()
            .Configure(app =>
            {
                app.UseOcelot().Wait();
            })
            .Build().Run();
    }
}

我该怎么做才能解决此错误?,我已经安装了Nuget软件包Ocelot版本13.8.0和Ocelot.Provider.Consul版本13.8.0。

c# .net-core-3.0 api-gateway ocelot
1个回答
1
投票
确保包含必要的名称空间

using Ocelot.DependencyInjection; //For Dependency Injection using Ocelot.Middleware; //For middleware

参考Ocelot : Getting Started

[Source code for DI]

namespace Ocelot.DependencyInjection { public static class ServiceCollectionExtensions { public static IOcelotBuilder AddOcelot(this IServiceCollection services) { var configuration = services.BuildServiceProvider() .GetRequiredService<IConfiguration>(); return new OcelotBuilder(services, configuration); } public static IOcelotBuilder AddOcelot(this IServiceCollection services, IConfiguration configuration) { return new OcelotBuilder(services, configuration); } } }

Source for middleware

namespace Ocelot.Middleware { //... public static class OcelotMiddlewareExtensions { public static async Task<IApplicationBuilder> UseOcelot(this IApplicationBuilder builder) { await builder.UseOcelot(new OcelotPipelineConfiguration()); return builder; } //...

© www.soinside.com 2019 - 2024. All rights reserved.