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