簡體   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