提问人:Dima 提问时间:9/3/2023 最后编辑:Dima 更新时间:9/4/2023 访问量:76
使用 ASP.Net Core 应用的编译时 DI 容器
Compile-time DI Container with ASP.Net Core apps
问:
我是基于 Roslyn Source Generator (MrMeeseeks.DIE) 的编译时依赖注入 (DI) 容器的作者。
该容器很容易适用于控制台项目、库和 UI 应用(如 WPF),因为它们通常具有可以在编译时确定的自然根类型(例如 或),它们与 DI 容器(或者说“服务提供商”)完全不可知。Program
App
然而,ASP.Net Core 似乎并非如此。看起来它严重依赖具有单一功能(链接)的界面。在考虑编译时 DI 容器时,问题在于该函数依赖于一个参数,该参数在技术上只能在运行时知道。当然,运行时是在编译时之后出现的,因此对于容器进行适当调整为时已晚。IServiceProvider
public object? GetService (Type serviceType);
Type
我想到的一个可能的解决方案是生成一个使用编译时 DI 容器的实现。但是,要使它起作用,将调用函数的类型需要在编译时可收集。IServiceProvider
GetService
长话短说:给定一个任意的 ASP.Net Core 应用,如何在编译时全面、自动地确定所有类型的列表(这些列表可能在任意应用运行中传递到这些类型?GetService
部分答案可能是:
我对 ASP.Net Core 的经验还很少,所以我没有信心编写此类类型的完整列表。所以我在这里寻求帮助。
答: 暂无答案
评论
how can the list of all types
-->根据我的搜索,我们没有这种开箱即用的方法来获取所有类型。这看起来不是一个不推荐的选项。避免使用服务定位器模式。例如,当可以改用 DI 时,不要调用 GetService 来获取服务实例GetService