
总结一下 .NET Core 服务注册的步骤:
创建一个接口,和实现类
比如:IMyService, CnService
在 Program.cs 的 var app = builder.Build(); 语句之前加上:
var builder = WebApplication.CreateBuilder(args);
......
//注册服务
builder.Services.AddScoped();
var app = builder.Build();
......
在控制器的构造方法中以参数的方式将接口注入到控制器中:
private readonly IMyService _myService;
private readonly ILogger _logger;
// 自动创建 IMyService 和 ILogger 对象
public WeatherForecastController(ILogger logger, IMyService myService)
{
_logger = logger;
_myService = myService;
}
创建一个接口,和实现类
比如:IMyService, CnService
在 Program.cs 中创建 ServiceCollection 对象,然后使用 AddScoped / AddSingleton / AddTransient 等方法注入服务
using Microsoft.Extensions.DependencyInjection;
ServiceCollection services = new ServiceCollection();
services.AddTransient();
使用方式
在 Program.cs 文件中通过 GetRequiredService 获取对象,调用对象的方法
using (ServiceProvider sp = services.BuildServiceProvider())
{
// 服务定位器模式
// 通过 GetRequiredService 获取 IMyService 对象
var ts1 = sp.GetRequiredService();
var ts2 = sp.GetRequiredService();
Console.WriteLine(Object.ReferenceEquals(ts1, ts2));
ts1.Name = "tom";
ts1.SayHi();
}
在其他类中使用,和 Web Api 一样,在类的构造方法中直接注入,如:
class Demo
{
private readonly IMyService _myService;
// 构造方法注入 IOptionsSnapshot
public Demo(IMyService myService)
{
_myService = myService;
}
public void Test()
{
_myService.SayHi("Jacky")
}
}