使用.Net核心我创建了一个控制台应用程序,它自带一个asp.net 5用于端点支持(接收通知,健康检查等...)。
在阅读dependency injection in Asp.net 5时,它显示了如何使用自定义IoC容器,但它从Asp.net 5 ConfigureServices()
方法中实例化容器。
在托管asp.net 5应用程序的控制台应用程序中出现的问题是,WebHostBuilder
似乎实例化了Startup
类的新实例,而您可以更改哪个class是&#34; startup&#34;使用.UseStartup<MySTartup>()
的课程,您仍然无法控制MyStartup
Asp.net使用的实例,这意味着无法将其传递给已设置的容器。
有没有办法(不使用全局变量)来设置IoC容器并将其传递给Asp.Net 5?
答案 0 :(得分:0)
当ASP.NET 5应用程序启动时,将使用Startup类 引导应用程序,加载其配置设置等。 (了解有关ASP.NET启动的更多信息)。但是,如果一个类存在名为 启动{EnvironmentName}(例如StartupDevelopment)和 ASPNET_ENV环境变量匹配该名称,然后匹配该Startup 而是使用了类。
http://docs.asp.net/en/latest/fundamentals/environments.html#startup-conventions
至于将容器绕过,最好避免这种情况。作为最后的手段,您可以依赖于在使用DI友好框架之前使用的技术:在启动时引导容器实例时,使用反射在已加载的程序集中查找IoC配置,并调用它们的方法,传入容器。 / p>
答案 1 :(得分:0)
浏览Github,看起来这是不可能的。 Asp.net 5必须始终是ioc容器的创建者,并且与应用程序的其余部分共享IOC容器的唯一方法是从IWebApplication.ApplicationServices
属性中获取它以在应用程序的其余部分中使用。
我提出了一个Github issue,希望能在某些时候解决这个问题。