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

时间:2015-12-30 20:22:29

标签: c# asp.net asp.net-core

使用.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?

2 个答案:

答案 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,希望能在某些时候解决这个问题。