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