簡體   English   中英

在 Autofac 中注冊臨時組件

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

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