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