c# - DotNet 6 - 如何创建服务扩展的类库

标签 c# .net-core extension-methods .net-6.0

我在 Dot net 6 中有 2 个不同的 Web API。每个 Web API 都是 Visual studio 2022 解决方案中的一个单独项目。

我需要在program.cs的两个API中分别设置中间件服务。我想创建一个单独的类库并重用两者中的逻辑

这些是我实现 AddCors 所采取的步骤

  1. Program.cs 中的两个 API 都需要以下代码
builder.Services.AddCors(o => 
    o.AddPolicy("AllowOrigins", builder =>
    {
        builder.WithOrigins("http://localhost:4200")
        .AllowAnyMethod()
        .AllowAnyHeader();
    }));
  • 为了避免在两个 API 中重复此逻辑,我创建了一个项目“服务扩展”,并创建了以下包含 cors 逻辑的类,以便我可以在两个 API 中引用它
  • public static class ServiceExt
    {
        public static void addCors(this IServiceCollection services) =>
            services.AddCors(
                    // code to add CORS here...         
                );
        }
    }
    

    但问题是它在这里无法识别 AddCors 扩展方法..

  • 如果这有效,我希望 Program.cs 中的两个 API 中都包含以下语句
  • using ServiceExtensions;
    var builder = WebApplication.CreateBuilder(args);
    
    // Add services to the container.
    
    builder.Services.AddControllers();
    
    builder.Services.addCors();
    
    

    最佳答案

    只需确保您已在 API 项目的项目引用中添加 ServiceExtensions 项目即可。

    enter image description here

    那么这应该可以工作。 enter image description here

    我的扩展方法。

    using Microsoft.Extensions.DependencyInjection;
    
    namespace ServiceExtensions
    {
        public static class ServiceExtensions
        {
            public static IServiceCollection ConfigureCORS(this IServiceCollection services)
                => services.AddCors(options =>
                {
                    services.AddCors(o =>
                        o.AddPolicy("AllowOrigins", builder =>
                        {
                            builder.WithOrigins("http://localhost:4200")
                            .AllowAnyMethod()
                            .AllowAnyHeader();
                        }));
                });
        }
    }
    

    注意:安装并导入 Microsoft.Extensions.DependencyInjection 包以访问 ServiceExtensions 项目中的服务集合

    关于c# - DotNet 6 - 如何创建服务扩展的类库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70472624/

    相关文章:

    c# - Windows Phone 8 中的 ListBox 自动下一行

    c# - 如何检测到 Windows VirtualStore 的文件重定向?

    c# - 如何在 .NET 中使用 Hot Chocolate 扩展 GraphQL 自省(introspection)类型

    c# - 扩展已经继承另一个类的类

    java - 如何在辅助类中使用存储在主类中的字符串值? (详情请参见说明。Java)

    c# - MVC : How can I change a Html. 网格行的颜色基于值?

    c# - 即使文件存在,Process.start 也会导致找不到文件

    .net-core - 在 dot net core 中从中间件配置依赖注入(inject)

    asp.net - ASP.NET 5、.NET Core 和 ASP.NET Core 5 之间有什么区别?

    c# - C#3 和 4 中扩展方法的区别