.NET Core Web API类库如何内嵌运行?

梦想实践者 2021-01-22 ⋅ 14 阅读

简介

在开发.NET Core Web API时,我们通常会将其作为一项独立的应用程序来运行。然而,有时候我们可能需要将Web API类库内嵌到另一个应用程序中去,以便在遵循单一职责原则的前提下,实现代码的复用。

本文将介绍如何将.NET Core Web API类库内嵌到其他应用程序中,并提供一些使用内嵌Web API类库的最佳实践。

步骤

以下是将.NET Core Web API类库内嵌到其他应用程序中的步骤:

1. 创建Web API类库

首先,我们需要创建一个包含Web API代码的类库。可以使用Visual Studio或者通过命令行工具创建一个空的类库项目。

dotnet new classlib -n MyWebApiLibrary

2. 添加Web API代码

在类库项目中,添加一个控制器类和一些API端点。例如,可以创建一个名为"ValuesController"的控制器,其中包含一个名为"GetValues"的GET端点。

using Microsoft.AspNetCore.Mvc;

namespace MyWebApiLibrary.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class ValuesController : ControllerBase
    {
        [HttpGet]
        public IActionResult GetValues()
        {
            return Ok(new string[] { "value1", "value2" });
        }
    }
}

3. 配置入口点

为了使类库能够被其他应用程序引用并执行,我们需要指定一个入口点来启动Web API。可以在类库项目中创建一个名为"Startup.cs"的文件,添加以下内容:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

namespace MyWebApiLibrary
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseRouting();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

此外,我们还需要创建一个名为"Program.cs"的文件,作为类库的入口点。

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace MyWebApiLibrary
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

4. 打包类库

当类库已经配置好入口点后,我们可以将其打包为一个NuGet包或者作为一个本地的项目依赖项。

如何进行打包需要根据具体的项目类型和需求来定制,可以参考Microsoft的官方文档或者其他相关资源。

5. 引用类库

现在,我们可以将类库作为一个程序依赖项引用到其他应用程序中去。

如果使用Visual Studio,可以在项目引用中添加对类库的引用。如果是通过命令行,可以使用以下命令来添加引用:

dotnet add reference /path/to/MyWebApiLibrary.csproj

6. 使用内嵌Web API

在其他应用程序中,我们可以使用类库中定义的API端点来处理请求。

using Microsoft.AspNetCore.Mvc.Testing;
using Xunit;

namespace MyWebApiIntegrationTests
{
    public class ValuesControllerTests : IClassFixture<WebApplicationFactory<MyWebApiLibrary.Program>>
    {
        private readonly WebApplicationFactory<MyWebApiLibrary.Program> _factory;

        public ValuesControllerTests(WebApplicationFactory<MyWebApiLibrary.Program> factory)
        {
            _factory = factory;
        }

        [Fact]
        public async Task GetValues_ReturnsExpectedValues()
        {
            var client = _factory.CreateClient();

            var response = await client.GetAsync("/values");
            response.EnsureSuccessStatusCode();

            var values = await response.Content.ReadAsStringAsync();

            Assert.Equal(new string[] { "value1", "value2" }, JsonConvert.DeserializeObject<string[]>(values));
        }
    }
}

最佳实践

在使用内嵌Web API类库时,有几个最佳实践值得注意:

  • 始终尽量将业务逻辑从Web API控制器中分离出来,并遵循单一职责原则。这样可以提高代码的可维护性和复用性。

  • 在内嵌类库时,要确保类库的依赖项已正确创建,并且与宿主应用程序的依赖项不发生冲突。

  • 如果需要共享数据库连接或其他资源,可以使用依赖注入或者其他合适的方式来处理。

总结

将.NET Core Web API类库内嵌到其他应用程序中可以提高代码的复用性和可维护性。通过正确配置类库的入口点和引用,我们可以方便地在其他应用程序中使用类库中定义的API端点。遵循最佳实践,可以更好地组织和管理代码,提高应用程序的可扩展性。

希望以上介绍能够帮助你了解如何将.NET Core Web API类库内嵌到其他应用程序中,并且在实际开发中能够灵活运用。


全部评论: 0

    我有话说: