簡體   English   中英

Autofac解決通用控制器

[英]Autofac to resolve generic controller

我有一個通用的主數據服務。 示例: IMasterDataService<T>

我正在嘗試以類似MasterDataController<T>方式為此構建一個Api控制器。 我想使用autofac解析控制器,但找不到相同的任何文檔。

嘗試時,出現錯誤消息,提示無法解析類型。

我正在像builder.RegisterGeneric這樣注冊該服務,但是控制器我沒有實例,我想知道這是否有可能。

好吧,無論如何,您不能在運行時解析泛型類。 您需要對其進行參數化。 這意味着在解析通用控制器之前,您必須具有關閉該通用控制器的類型。 我想到的這種類型的唯一合理來源就是請求本身,否則控制器將不是通用的,對我而言這根本沒有意義。 因此,您將需要使用傳入請求以某種方式設計您的類型,然后使用某種自定義控制器工廠或激活器或所使用的框架中的任何名稱,根據該類型解析控制器。 例如,在.NET Core中,這將是IControllerActivator ,並且您需要使用.AddControllersAsServices()擴展名在DI容器中注冊控制器。

編輯 Microsoft的文檔中實際上有一個針對dotnet core的實現。 但是它們使用的技術略有不同:他們實際上並未注冊開放的通用控制器 它們對封閉的通用控制器進行所有預定義的變體,並進行注冊。 我認為這是由於Microsoft的IoC容器無法從開放的通用注冊中解析封閉的通用類型的事實-至少它無法在.NET Core 1.x中做到這一點,我還沒有在2.0中進行過嘗試。 但是,Autofac可以實現,因此我認為這種方法應該可行。

這里的另一種可能性是將IComponentContext注入到非通用控制器中,並在控制器本身中“動態”解析主數據服務,從而設計出在控制器中關閉通用的類型。

無論如何,這是一個通用問題的通用答案。 如果您需要更詳細的答案,則需要對正在做的事情有更深入的了解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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