繁体   English   中英

如何将已经实例化的IOC容器传递给Asp.net 5应用程序?

[英]How can I pass an already instantiated IOC container to an Asp.net 5 application?

使用.Net core,我创建了一个控制台应用程序,该应用程序自身托管了asp.net 5,以支持端点(接收通知,运行状况检查等)。

在阅读有关Asp.net 5中的依赖项注入时,它展示了如何使用自定义IoC容器,但是它从Asp.net 5 ConfigureServices()方法中实例化了该容器。

在还承载asp.net 5应用程序的控制台应用程序中引起的问题是, WebHostBuilder似乎实例化了Startup类的新实例,并且您可以使用.UseStartup<MySTartup>()来更改哪个类是“ startup”类。 .UseStartup<MySTartup>()您仍然无法控制MyStartup Asp.net的哪个实例,这意味着无法将已设置的容器传递给它。

有没有办法(不使用全局变量)设置IoC容器并将其传递给Asp.Net 5?

啊,但是可以。 如果我正确理解了您的问题,这应该提供您需要的行为:

当ASP.NET 5应用程序启动时,Startup类用于引导应用程序,加载其配置设置等(了解有关ASP.NET启动的更多信息)。 但是,如果存在一个名为Startup {EnvironmentName}的类(例如StartupDevelopment),并且ASPNET_ENV环境变量与该名称匹配,则使用该Startup类。

http://docs.asp.net/en/latest/fundamentals/environments.html#startup-conventions

至于传递容器,最好避免这种情况。 作为最后的选择,您可以依靠在使用DI友好框架之前使用的技术:在启动时自举容器实例时,使用反射在加载的程序集中查找IoC配置,并调用它们的方法并传入容器。

浏览Github,看来这是不可能的。 Asp.net 5必须始终是ioc容器的创建者,与其他应用程序共享IOC容器的唯一方法是从IWebApplication.ApplicationServices属性中获取它,以在其他应用程序中使用。

我提出了一个Github问题 ,希望能在某个时候解决这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM