搜索结果

×

搜索结果将在这里显示。

【集成示例】PicoServer 与依赖注入(DI)集成:轻量服务也能优雅解耦

本文是PicoServer结合依赖注入(DI)的极简入门示例,核心目标:快速实现接口开发,同时降低代码耦合,适合快速上手。

一、核心准备

1. 安装NuGet包

Install-Package PicoServer
Install-Package Microsoft.Extensions.DependencyInjection

2. 核心概念(极简版)

  • PicoServer:轻量Web请求胶水库,几行代码启动接口服务
  • DI:依赖注入,由容器管理对象,不用手动new,降低耦合

二、完整入门代码

示例功能:启动PicoServer,访问根路径/,返回问候语(逻辑由DI注入的服务提供)

C# 版本

using PicoServer;
using Microsoft.Extensions.DependencyInjection;
using System;

// 1. 定义业务服务(接口+实现)
public interface IHelloService
{
    string GetGreeting();
}

public class HelloService : IHelloService
{
    public string GetGreeting()
    {
        return $"Hello PicoServer+DI! Time: {DateTime.Now:HH:mm:ss}";
    }
}

class Program
{
    // 全局DI容器
    private static IServiceProvider _serviceProvider;

    static void Main(string[] args)
    {
        // 2. 构建DI容器并注册服务
        var services = new ServiceCollection();
        // 注册服务(Scoped:每个请求作用域内单例)
        services.AddScoped<IHelloService, HelloService>();
        _serviceProvider = services.BuildServiceProvider();

        // 3. 初始化并启动PicoServer(默认端口8090)
        var MyAPI = new WebAPIServer(); // 变量名改为MyAPI
        MyAPI.StartServer(); // 改为MyAPI.StartServer
        Console.WriteLine("服务启动:http://localhost:8090");

        // 4. 注册路由(从DI容器获取服务)
        MyAPI.AddRoute("/", () => // 改为MyAPI.AddRoute
        {
            var service = _serviceProvider.GetRequiredService<IHelloService>();
            return service.GetGreeting();
        }, "GET");

        Console.ReadKey();
        // 5. 停止服务+释放资源
        MyAPI.StopServer(); // 改为MyAPI.StopServer
        (_serviceProvider as IDisposable)?.Dispose();
    }
}

VB.NET 版本

Imports PicoServer
Imports Microsoft.Extensions.DependencyInjection
Imports System

' 1. 定义业务服务(接口+实现)
Public Interface IHelloService
    Function GetGreeting() As String
End Interface

Public Class HelloService
    Implements IHelloService

    Public Function GetGreeting() As String Implements IHelloService.GetGreeting
        Return $"Hello PicoServer+DI! Time: {DateTime.Now:HH:mm:ss}"
    End Function
End Class

Module Program
    ' 全局DI容器
    Private Shared _serviceProvider As IServiceProvider

    Sub Main(args As String())
        ' 2. 构建DI容器并注册服务
        Dim services = New ServiceCollection()
        ' 注册服务(Scoped:每个请求作用域内单例)
        services.AddScoped(Of IHelloService, HelloService)()
        _serviceProvider = services.BuildServiceProvider()

        ' 3. 初始化并启动PicoServer(默认端口8090)
        Dim MyAPI = New WebAPIServer() ' 变量名改为MyAPI
        MyAPI.StartServer() ' 改为MyAPI.StartServer
        Console.WriteLine("服务启动:http://localhost:8090")

        ' 4. 注册路由(从DI容器获取服务)
        MyAPI.AddRoute("/", Function() ' 改为MyAPI.AddRoute
                             Dim service = _serviceProvider.GetRequiredService(Of IHelloService)()
                             Return service.GetGreeting()
                         End Function, "GET")

        Console.ReadKey()
        ' 5. 停止服务+释放资源
        MyAPI.StopServer() ' 改为MyAPI.StopServer
        TryCast(_serviceProvider, IDisposable)?.Dispose()
    End Sub
End Module

三、运行测试

  1. 启动程序,打开浏览器访问:http://localhost:8090
  2. 页面将显示:Hello PicoServer+DI! Time: 16:30:20(时间实时更新)

四、关键注意事项(新手必看)

  1. 端口占用:若8090被占用,启动时指定端口:
    • C#:MyAPI.StartServer(8091);
    • VB.NET:MyAPI.StartServer(8091)
  2. 权限被拒绝:Windows下管理员权限运行;
  3. 服务解析:GetRequiredService<T>() 若服务未注册会抛异常,确保注册正确;
  4. 生命周期:入门用AddScoped即可,简单场景也可换AddTransient(每次新建);
发布时间: