首页 新闻 会员 周边

.NET: 如何检查一个接口是否已经在DI容器中注册过

0
悬赏园豆:30 [已解决问题] 解决于 2023-02-05 19:40

想在 IEndpointRouteBuilder 的扩展方法中检查 IEventBus 接口(Interface) 是否已经注册过,请问如何实现?

尝试下面的代码,却发现即使没有注册,eventBus 的值也不为 null

var eventBus = builder.ServiceProvider.GetService<IEventBus>();
if (eventBus is null)
{
    throw new ArgumentNullException(nameof(eventBus));
}
dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2023-02-05 17:59
< >
分享
最佳答案
0

通过 github 上的 issue Add ability to detect if a service is registered in the DI container,发现这个 PR Add support for IServiceProviderIsService,知道了 IServiceProviderIsService 接口,使用这个接口解决了

var serviceCheck = builder.ServiceProvider.GetRequiredService<IServiceProviderIsService>();
if (!serviceCheck.IsService(typeof(IEventBus)))
{
    throw new InvalidOperationException($"{nameof(IEventBus)} has not been registered");
}
dudu | 高人七级 |园豆:30994 | 2023-02-05 19:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册