[英]Registration of ephemeral components in Autofac
我在從多個“設備”讀取和寫入信息的應用程序中使用 Autofac。 這些設備可以在任何時候出現和 go 並且它們的壽命不在應用程序的控制范圍內。 它們也可以在不同的界面上找到; USB 和 IP 網絡。 所有設備都有一個通用的IDevice
接口。
建議的機制是將這一發現集成到 Autofac 中嗎? 由於設備本身是短暫的,我知道我需要能夠將它們從容器中刪除,我還在 SO 搜索中發現這是不可能的( 是否可以從 Autofac 容器構建器中刪除現有注冊? )
我現在更傾向於在 Autofac( IDeviceFactory
或類似的)中注冊一個工廠,然后在需要時查詢該工廠以獲取當前設備列表。 該工廠將維護自己的內部可用硬件接口列表(USB COM 端口或以太網接口),然后是這些硬件接口上可用的設備列表。
感覺如果我不將 Autofac 用於IDevice
本身,我可能會失去很多 Autofac 的好處。 我應該調查修改服務解析器管道嗎?
如果它不是正確的工具,我不想陷入拼命嘗試“Autofac 所有東西”的陷阱。 但我也不想不必要地編寫我自己的與 Autofac 一起存在的組件注冊表。
Autofac 不會是這里的方式,go 與工廠。
出於性能原因,Autofac 需要能夠緩存注冊,這是您無法從容器中刪除內容的眾多原因之一。 假設您可以使用其中的設備創建一個終身 scope 並在每次設備列表更改時處理/重新創建它,但這將使您的應用程序不穩定,因為從 scope 解決的任何問題也將被處理和重新創建。
聽起來,設備列表也有可能隨着某些 class 邏輯的執行而改變。 您需要在需要使用設備時獲得最新列表,這意味着在該點進行查詢 - 就像您根據需要從數據庫中查詢數據一樣,而不是將其作為依賴項注入。
出廠時只需 go。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.