C# 如何确定接口上调用公共方法的类?

C# 如何确定接口上调用公共方法的类?,c#,reflection,nservicebus,C#,Reflection,Nservicebus,我正在从事一个严重依赖NServiceBus的项目。不幸的是,它变得有点凌乱,即使它是用C#写的,也有一些混乱。例如,我在某个地方有Bus.Publish(A),然后在另一个地方有public-AHandler:IHandleMessages,这可能很好,但由于这是一种P/S模式,因此通常有多个处理程序。有一些内在的需要记住项目,新开发人员很难遵循代码流 我的解决方案是创建一个控制台应用程序,或者某种UI,它将使用反射扫描程序集,并为我绘制项目地图。到目前为止,我已经能够有效地获取所有的公共类处

我正在从事一个严重依赖NServiceBus的项目。不幸的是,它变得有点凌乱,即使它是用C#写的,也有一些混乱。例如,我在某个地方有
Bus.Publish(A)
,然后在另一个地方有
public-AHandler:IHandleMessages
,这可能很好,但由于这是一种P/S模式,因此通常有多个处理程序。有一些内在的需要记住项目,新开发人员很难遵循代码流

我的解决方案是创建一个控制台应用程序,或者某种UI,它将使用反射扫描程序集,并为我绘制项目地图。到目前为止,我已经能够有效地获取所有的
公共类处理程序:IHandleMessages
,这很好,但现在我需要确定消息的来源


特别是,我想知道是否有一种方法可以使用反射来确定在哪个类中调用
Bus.Publish(41;
(总线实际上是IBus的一个实例)。对于isntance if
public void Handler(A){Bus.Publish(B)}
,我想知道传递到
Bus.Publish()
(so 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;

我不知道NServiceBus,但你不能回顾一下调用堆栈吗?使用它似乎是合理的,只是为了更清楚一些,反射只会提供有关项目中存在的硬类型的信息,但检查调用堆栈是我需要做的,以确定实际运行的代码类型?这很有帮助,
StackTrace
似乎是我想要的,我不知道这个对象