用户军魂 发表于 2023-11-16 12:41:15

.NET8依赖注入新特性Keyed services

什么是Keyed service
Keyed service是指,为一个需要注入的服务定义一个Key Name,并使用使用Key Name检索依赖项注入 (DI) 服务的机制。


使用方法
通过调用 AddKeyedSingleton (或 AddKeyedScoped 或 AddKeyedTransient)来注册服务,与Key Name相关联。或使用 属性指定密钥来访问已注册的服务。
以下代码演示如何使用Keyed service:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddKeyedSingleton<ICache, BigCache>("big");
builder.Services.AddKeyedSingleton<ICache, SmallCache>("small");
builder.Services.AddControllers();

var app = builder.Build();

app.MapGet("/big", ( ICache bigCache) => bigCache.Get("date"));
app.MapGet("/small", ( ICache smallCache) =>
                                                               smallCache.Get("date"));

app.MapControllers();

app.Run();

public interface ICache
{
    object Get(string key);
}
public class BigCache : ICache
{
    public object Get(string key) => $"Resolving {key} from big cache.";
}

public class SmallCache : ICache
{
    public object Get(string key) => $"Resolving {key} from small cache.";
}



public class CustomServicesApiController : Controller
{
   
    public ActionResult<object> GetOk( ICache cache)
    {
      return cache.Get("data-mvc");
    }
}

public class MyHub : Hub
{
    public void Method( ICache cache)
    {
      Console.WriteLine(cache.Get("signalr"));
    }
}
Blazor中的支持
Blazor 现在支持使用 属性注入Keyed Service。 Keyed Service在使用依赖项注入时界定服务的注册和使用范围。
使用新 InjectAttribute.Key 属性指定服务要注入的Service:

public IMyService MyService { get; set; }@inject Razor 指令尚不支持Keyed Service,但将来的版本会对此进行改进。 

来源:https://www.cnblogs.com/chenyishi/archive/2023/11/16/17835541.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: .NET8依赖注入新特性Keyed services