[英]Autofac Injection of data into OWIN Startup class
我一直在四處尋找SO,但是找不到我的特定問題的答案:
如何使用Autofac(通過構造函數或屬性)將數據注入OWIN Startup類?
我在Windows服務中使用Autofac,該服務還處理后端服務等的創建。因此,我在其中進行所有配置讀取和容器構建。
我希望能夠注冊Startup類,這樣我就可以為CORS注入允許的來源,即使我使用如下屬性注冊對象時:
var builder = new ContainerBuilder();
// This will actually be read from config.
var origins = new[]
{
"http://localhost",
"http://localhost:8082",
};
builder.Register(c => new Startup(origins));
var container = builder.Build();
在運行時,實例化Startup類時,調用堆棧顯示它來自外部代碼,而我的Autofac構建器未將該屬性壓入。
理想情況下,我想將Autofac注冊保存在一個地方(Windows服務類),然后將所需的數據注入到Startup中,這樣我就可以在下面做類似的事情(其中allowedOrigins
設置為屬性或通過構造函數注入) )
public void Configuration(IAppBuilder app)
{
var configuration = new HttpConfiguration();
...
var origins = string.Join(",", allowedOrigins);
var cors = new EnableCorsAttribute(origins, "*", "*") { SupportsCredentials = true };
configuration.EnableCors(cors);
....
}
任何想法將不勝感激。 謝謝
彼得斯基
更新
我應該補充一點,在嘗試注冊並構建Autofac之后,我通過執行以下操作啟動了OWIN自托管應用程序:
var webApp = WebApp.Start<Startup>(baseAddress);
通過與朋友的交談,他們建議創建Startup
對象並將其傳遞給WebApp
:
var startup = new Startup(origins);
var webApp = WebApp.Start(startup, baseAddress);
在這里,我將IEnumerable<string>
原點添加到Startup
類的ctor中。 這確實有效! 但是感覺就像使用Autofac來處理啟動類所需的東西一樣。
開箱即用的Autofac不支持您想要的內容。
在IIS或其他非自托管環境中,沒有鈎子可用於構建容器,然后將其注入啟動類。 這有點像雞/雞蛋的問題-啟動類是您開始構建容器的鈎子 。
在自托管環境中,您提到的建議-創建啟動對象並將其傳遞到對WebApp.Start
的調用中-是您的最佳選擇。
基本上,在某些時候,您將到達應用程序的入口點(通常在OWIN中是啟動類),這是您必須構建容器並成為解決和啟動事情的引導者的時間。 Autofac無法幫助您-這取決於您使用的框架(例如MVC,OWIN,Web API等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.