C# 在MS.Ext.DI中是否有可能在编译时获得基于LMElementationType的描述符

C# 在MS.Ext.DI中是否有可能在编译时获得基于LMElementationType的描述符,c#,dependency-injection,asp.net-core,ioc-container,dryioc,C#,Dependency Injection,Asp.net Core,Ioc Container,Dryioc,我想为Microsoft.Extensions.DependencyInjection创建一个适配器,以便在可能的情况下将基于类型的注册移动到编译时。例如,在Asp.Net内核中,这意味着我需要在编译时以某种方式获取基于ImplementationType的描述符的服务集合 我不关心实现工厂/实例的运行时描述符,它可能由容器的运行时部分处理。但类型在编译时是已知的,例如,程序集已就位且不会更改。那么,为什么不在编译时为类型构建/解析对象图,以加快引导时间并了解类型是如何组成的呢 顺便说一句,Io

我想为Microsoft.Extensions.DependencyInjection创建一个适配器,以便在可能的情况下将基于类型的注册移动到编译时。例如,在Asp.Net内核中,这意味着我需要在编译时以某种方式获取基于
ImplementationType
的描述符的服务集合

我不关心
实现工厂/实例的运行时描述符,它可能由容器的运行时部分处理。但类型在编译时是已知的,例如,程序集已就位且不会更改。那么,为什么不在编译时为类型构建/解析对象图,以加快引导时间并了解类型是如何组成的呢


顺便说一句,IoC实现这一点并不重要,但我将使用编译时?你是说用Roslyn生成被编译的对象图?是的,类似的。工具并不重要。现在我使用的是T4,我认为这是不可能的,因为MS.Ext.DI系统的全部思想是在运行时做事情。在编译时构建对象图意味着您需要在编译时知道注册了哪些类型,但框架和第三方库仅在运行时“告知”这一点。当然,您可以使用应用程序对象图来实现这一点,只要您不通过MS.Ext.DI容器发送它们。但是如果您这样做,我可能会使用纯DI,而不是使用“编译时容器”。>您当然可以使用运行时信息生成代码,以便下次编译时使用,但这似乎有点奇怪。ASP.NET实际上到处都在做这种疯狂的事情。这是EF迁移、MVC预编译等的工作方式。您基本上需要运行应用程序以获得足够的信息来生成工件。编译时?你是说用Roslyn生成被编译的对象图?是的,类似的。工具并不重要。现在我使用的是T4,我认为这是不可能的,因为MS.Ext.DI系统的全部思想是在运行时做事情。在编译时构建对象图意味着您需要在编译时知道注册了哪些类型,但框架和第三方库仅在运行时“告知”这一点。当然,您可以使用应用程序对象图来实现这一点,只要您不通过MS.Ext.DI容器发送它们。但是如果您这样做,我可能会使用纯DI,而不是使用“编译时容器”。>您当然可以使用运行时信息生成代码,以便下次编译时使用,但这似乎有点奇怪。ASP.NET实际上到处都在做这种疯狂的事情。这是EF迁移的工作方式、MVC预编译等。您基本上需要运行应用程序以获得足够的信息来生成工件。