为了能到远方,脚下的每一步都不能少.|

lmyyyy

园龄:2年8个月粉丝:7关注:10

9月13日总结

Denpendcy Injection 8.0新功能——KeyedService

分类: .NET 标签: KeyedService , Denpendcy Injection , ASP.NET CORE
Denpendcy Injection 8.0新功能——KeyedService

本文只介绍 .NET Denpendcy Injection 8.0新功能——KeyedService,假定读者已熟练使用之前版本的功能。
注册带Key的类#

8.0之前,注册一个类往往是AddSingleton<IFoo, Foo>(),8.0添加了一个新功能:“可以注册一个带Key的类”AddKeyedSingleton<IFoo, Foo>("keyA")。获取服务方法由GetService()变成了GetKeyedService("keyA"),并且调用这两个方法创建出来的对象是不同的。

如果想通过构造函数注入,只需要在参数前面加上特性[FromKeyedServices("keyA")] 即可,特性里的参数就是key的名字。如果想在构造函数中获取key的值则使用特性[ServiceKey]。我们还可以注册时把key设置为KeyedService.AnyKey(这是框架提供的类),只需使用任意非null值作为key就可以获取对象。暂时不支持使用通配符匹配,也许以后会加......

Copy
class Bar : IBar
{
public Bar([ServiceKey] int key, [FromKeyedServices("keyA")] IFoo foo, IServiceProvider root)
{
//注意:key的类型要和调用时一致。
Console.WriteLine($"key:{key},Compare:{foo == root.GetKeyedService("keyA")}");
}
}

本文作者:lmyyyy

本文链接:https://www.cnblogs.com/lmyy/p/17719708.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   lmyyyy  阅读(16)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起