C# C中调用程序集实例的引用#

C# C中调用程序集实例的引用#,c#,.net,reflection,assemblies,C#,.net,Reflection,Assemblies,.Net 3.5 sp1可用类型问题 是否可以“获取句柄”或引用调用方法的程序集的实际实例?我可以通过反射获得正在执行和调用的程序集,但我追求的不是程序集,而是调用方法的程序集的实例 简单示例(可能): 实际情况比这要复杂一些,并且排除了将IBob实例作为OtherAssemblyClass.Bar()中的参数进行明显的传递,尽管这可能是最终结果 完全有可能,我只是太傻了,看不到明显的东西。也欢迎对骷髅进行2 x 4更正。不幸的是,除非传入实例,否则无法获取该实例。通过使用StackTrace,

.Net 3.5 sp1可用类型问题

是否可以“获取句柄”或引用调用方法的程序集的实际实例?我可以通过反射获得正在执行和调用的程序集,但我追求的不是程序集,而是调用方法的程序集的实例

简单示例(可能):

实际情况比这要复杂一些,并且排除了将IBob实例作为OtherAssemblyClass.Bar()中的参数进行明显的传递,尽管这可能是最终结果


完全有可能,我只是太傻了,看不到明显的东西。也欢迎对骷髅进行2 x 4更正。

不幸的是,除非传入实例,否则无法获取该实例。通过使用StackTrace,您可以找到调用您的方法的原因。

是我知道的唯一可行的方法。看看这门课。警告:这是一个相当大的问题,严重增加了体系结构的重量和复杂性,尤其是在构建时。

如果您愿意使用扩展方法,我可以让您半途而废。下面是一个例子:

public static void Bar(this IBob CallingIBob)
{
    int Id = CallingIBob.Id;
}
…和调用条():

是的,这不是你要找的确切案例,但功能相似。可以从任何bob调用Bar,它将有一个对调用bob的引用,而无需显式地传递实例

我知道您可能希望在您选择的另一个组件中调用Bar。也许Bar是在基类中定义的,您在子类中调用它的特定实现。没关系,使用extension方法获取有关您试图访问的特定条的信息,并相应地进行路由


如果您想要更具体的解决方案,请用更具体的问题定义更新您的帖子。

对此根本不感兴趣,因此我重新调整了解决方案,以便OtherAssemblyClass方法Bar()可以接受IBob的参数。这样做会更有意义。感谢您的所有时间/投入。这很理想-比您的其他备选方案要好得多。问题的措辞有些混乱-最后不是“程序集实例”,而是“调用对象”。您无法真正做到这一点,原因与您无法从较早的堆栈帧中获取本地数据相同——在运行时无法找到它,因为它可能根本不存在(它可以存储在一个寄存器中,然后被重用,可以完全优化掉,等等)。PostSharp可能会有所帮助,但前提是您控制调用代码。
public static void Bar(this IBob CallingIBob)
{
    int Id = CallingIBob.Id;
}
public class Bob : IBob
{

    #region IBob Members

    public void Foo()
    {
        this.Bar();
    }

    public int  Id
    {
        get { throw new NotImplementedException(); }
    }

    #endregion
}