我正在研究一個嚴重依賴NServiceBus的項目。不幸的是它變得有點混亂,儘管它是用C#編寫的,但它有一些混亂。例如我有Bus.Publish(A)
某處,然後在其他地方是public AHandler : IHandleMessages<A>
這可能很好,但由於這是一個P/S模式,通常有多個處理程序。有一些內在需要記住項目,新開發人員很難遵循代碼流程。如何確定在接口上調用哪個類的公共方法?
我對此的解決方案是創建一個控制檯應用程序,或者某種UI,它將使用反射來掃描程序集併爲我繪製我的項目地圖。到目前爲止,我已經能夠有效地拿起所有的public class _Handler : IHandleMessages<_>
這是偉大的,但現在我需要確定消息來自哪裏。
特別是,我想知道是否有方法使用反射來確定在哪個類Bus.Publish(_)
被調用(總線實際上是一個IBus的實例)。對於isntance如果public void Handler(A a) { Bus.Publish(B) }
我想知道傳遞給Bus.Publish()
(so B)的參數以及包含此處理程序的類的名稱。
我不知道NServiceBus,但不能通過調用堆棧回頭看看嗎? – amcdermott
使用['StackTrace'](https://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace(v = vs.110).aspx) – Zer0
這似乎是合理的,只是爲了某種清晰度,反射只會提供關於項目中存在的硬類型的信息,但檢查調用堆棧是我需要做的以確定實際運行的代碼類型。 – mike