我有一個Visual Studio解決方案,其中包含三個C#項目,每個項目編譯爲三個不同的DLL。我們稱之爲主要的Logic
。另外兩個是可選的,可以包含在其他應用程序中,但不包括主DLL。我們打電話給另外兩個Logic.Editor
和Logic.OptionalLogic
。它們都依賴主DLL Logic
。用反射觸及其他子庫(C#)
這是我想要的架構,因爲通常Logic.Editor
和Logic.OptionalLogic
不通信。我現在遇到了一種情況,如果在Logic.OptionalLogic
的某個類的實例中發生了某種情況,我想在Logic.Editor
的類Logic.Editor.EditorWindow
中調用它發生的靜態方法。原始圖書館Logic
根本不感興趣。
我在想,我會用反射,但大部分我覺得需要的例子訪問實際庫/組裝/命名空間和/或類能夠提取該類型的方法。例如
System.Reflection.Assembly.GetAssembly(System.Type type);
需要組裝,這是無法訪問的類型,
System.Type.GetType("Logic.Editor.EditorWindow");
返回NULL,恐怕是因爲Logic.Editor
沒有找到,所以我不能叫GetMethod就可以了。
是否有可能通過反射從程序集中的類中檢索一個靜態方法,除了已知字符串之外,這對我來說是無法訪問的,並且可選地在發現它時調用它(如果其他程序集包含在結束項目)?
我僅限於C#4和.NET 3.5。
嚴重錯誤的方法恕我直言。由於從'Logic.OptionalLogic'到'Logic.Editor'存在一些依賴關係,因此直接從前者引用後者。如果確實有某些原因希望保持這些完全分離,請在'Logic'中實現一些開放式消息中心(即使是非常簡單的消息中心)。然後'Logic.OptionalLogic'可以通知訂戶,'Logic.Editor'可以訂閱這些事件 - 而且他們都不需要了解彼此的任何信息。 – decPL
感謝您的反饋。我沿着這些線路的思考,但不喜歡在不屬於那裏的邏輯庫引入代碼的想法,但我想你是對的 - 我沒有處理這個正確的方式。 – Helena