簡體   English   中英

Autofac將數據注入OWIN Startup類

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM