簡體   English   中英

如何確定接口上哪個類稱為公共方法?

[英]How can I determine which class called a public method on an interface?

我正在從事一個嚴重依賴NServiceBus的項目。 不幸的是,它變得有些混亂,即使它是用C#編寫的,也有些混亂。 例如,我在某處有Bus.Publish(A) ,然后在其他地方有public AHandler : IHandleMessages<A>可能很好,但是由於這是一種P / S模式,因此通常有多個處理程序。 記住項目有一些內在的需求,新開發者很難遵循代碼流。

我對此的解決方案是創建一個控制台應用程序或某種UI,該應用程序將使用反射來掃描程序集並為我繪制項目圖。 到目前為止,我已經能夠有效地選擇所有public class _Handler : IHandleMessages<_> ,這很不錯,但是現在我需要確定消息的來源。

特別是,我想知道是否有一種方法可以使用反射來確定在哪個類中Bus.Publish(_) (Bus實際上是IBus的一個實例)。 對於非public void Handler(A a) { Bus.Publish(B) }我想知道傳遞給Bus.Publish()的參數(所以B)以及包含此處理程序的類的名稱。

不知道這是否會有所幫助-希望會有所幫助。

我需要找到對一段代碼的調用的源-審計監聽器,以便我們可以記錄用於應用更改的組件。 我的代碼如下:

Assembly currentAssembly = Assembly.GetExecutingAssembly();

string initialAssembly = new StackTrace().GetFrames()
                                         .Where(x => x.GetMethod().ReflectedType != null)
                                         .Select(x => x.GetMethod().ReflectedType.Assembly).Distinct()
                                         .Where(x => x.GetReferencedAssemblies().Any(y => y.FullName == currentAssembly.FullName))
                                         .Last()
                                         .FullName;

暫無
暫無

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

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