注册依赖项

Builtin 容器具有一系列内置函数:

终身控制

public void ConfigureServices(IServiceCollection services)
    {
        // ...
    
        services.AddTransient<ITestService, TestService>();
        // or
        services.AddScoped<ITestService, TestService>();
        // or
        services.AddSingleton<ITestService, TestService>();
        // or
        services.AddSingleton<ITestService>(new TestService());
    }
  • AddTransient :每次解析时创建
  • AddScoped :每个请求创建一次
  • AddSingleton :Lazily 为每个应用程序创建一次
  • AddSingleton(instance) :为每个应用程序提供以前创建的实例

可枚举的依赖项

也可以注册可枚举的依赖项:

 services.TryAddEnumerable(ServiceDescriptor.Transient<ITestService, TestServiceImpl1>());
 services.TryAddEnumerable(ServiceDescriptor.Transient<ITestService, TestServiceImpl2>());

然后你可以按如下方式使用它们:

public class HomeController : Controller
{
    public HomeController(IEnumerable<ITestService> services)
    {
        // do something with services.
    }
}

通用依赖项

你还可以注册通用依赖项:

services.Add(ServiceDescriptor.Singleton(typeof(IKeyValueStore<>), typeof(KeyValueStore<>)));

然后按如下方式使用它:

public class HomeController : Controller
{
    public HomeController(IKeyValueStore<UserSettings> userSettings)
    {
        // do something with services.
    }
}