【发布时间】:2022-08-10 16:52:46
【问题描述】:
我们正在使用 ASP.NET 核心并遇到问题,即某些注册服务(来自第三方库)请求已弃用的特定“服务”(基于接口)。
问题是我们不知道哪些库正在使用这个已弃用的服务接口。
到目前为止,我们所做的是:
- 为服务接口创建自定义实现
- 并向 DI 注册此自定义实现(类)
// Registration
services.AddTransient<IServiceInterface>((services) => new CustomCustomService(Log.Logger));
// Custom implementation
internal class CustomService : IServiceInterface
{
public CustomService (ILogger logger)
{
logger.Warning(\"!!! CustomService is still being used !!!\");
}
}
所以现在我们可以看到不需要的服务正在“某处”使用。
但是是否有可能以某种方式检测为哪个服务创建了已弃用的服务?
我尝试使用列出堆栈跟踪
var st = new System.Diagnostics.StackTrace();
logger.Warning(\"!!! CustomService is still being used !!!\" + Environment.NewLine + \"{stacktrace}\", st.ToString());
但这似乎并没有提供有关使用已弃用服务的服务的信息......
-
为什么不从 ServiceCollection 中完全删除注册?这将允许应用程序快速失败并给您一个异常消息,该消息准确说明哪个组件依赖于缺少的注册。因为不这样做,意味着您需要向
CustomCustomService提供有关其消费者的上下文信息,而这在 MS.DI 中是很难实现的。 -
好的,dit 这个,我得到了一个出现问题的项目。但现在我不确定我是否不依赖从另一个服务中删除的服务。
标签: c# asp.net dependency-injection