[英]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.