【集成示例】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
三、运行测试
- 启动程序,打开浏览器访问:http://localhost:8090
- 页面将显示:Hello PicoServer+DI! Time: 16:30:20(时间实时更新)
四、关键注意事项(新手必看)
- 端口占用:若8090被占用,启动时指定端口:
- C#:
MyAPI.StartServer(8091); - VB.NET:
MyAPI.StartServer(8091)
- C#:
- 权限被拒绝:Windows下管理员权限运行;
- 服务解析:
GetRequiredService<T>()若服务未注册会抛异常,确保注册正确; - 生命周期:入门用
AddScoped即可,简单场景也可换AddTransient(每次新建);
发布时间: