如何确定哪个类在接口上称为公共方法?

时间:2015-05-15 15:56:32

标签: c# reflection nservicebus

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

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

特别是,我想知道是否有一种方法可以使用反射来确定调用哪个类Bus.Publish(_)(总线实际上是IBus的一个实例)。对于isntance if public void Handler(A a) { Bus.Publish(B) }我想知道传递给Bus.Publish()的参数(所以B)以及包含此处理程序的类的名称。

1 个答案:

答案 0 :(得分:2)

不知道这是否会有所帮助 - 希望它会。

我需要找到一段代码调用的来源 - 一个Audit Listener,这样我们就可以记录用于应用更改的组件。我的代码如下:

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;