0

假设我有一个 DLL 程序集,其中包含一个具有两种方法的自动生成类:

public class AutoGeneratedClass
{
    public int DoSomething(bool forReal) { ??? }
    public void DoSomethingElse(string whatever) { ??? }
}

方法可以是任何东西,真的。以上只是一个说明。

我需要生成什么样的代码来代替??? 上面让它自动打包调用的参数并将它们发送到另一个类上的单个泛型方法,然后实际处理调用并返回结果?

public class GenericClass
{
    public ??? GenericHandler(???) { ??? }
}

我想我正在寻找与Expression<Func<...>>LINQ 类似的东西,它编译成可以发送到任何地方并在那里拆开的数据结构。

不过,我想保持原始方法原型与正常的本地实现方法相同,以保持 AutoGeneratedClass 的调用者不明智。

如果这无法实现,我有什么选择?

谢谢!

4

2 回答 2

1

一定要上课吗?使用接口生活会容易得多 - 然后您可以使用System.Runtime.Remoting.Proxies.RealProxy或者可能根据需要创建一个新类型。我相信Rhino.Mocks是后者(使用库来完成繁重的工作)——如果你可以使用接口,那么看看 Rhino.Mocks 是如何实现的可能是一个很好的起点。

于 2009-01-17T11:48:31.473 回答
0

我将在这里暗中尝试,因为我不确定您的所有限制是什么。这听起来像是 AutoGenerated 类的部分方法/部分类的好例子。(注意我没有通过编译器运行得这么好,所以它可能需要一些清理。)

public partial class AutoGenerated
{
    public partial int ProcessDoSomething(bool forReal);
    public int DoSomething(bool forReal)
    {
        //some generated code against error conditions??
        return ProcessDoSomething(forReal)
    }

    .....
}

public partial class AutoGenerated
{
    public partial int ProcessDoSomething(bool forReal)
    {
        //call the generic handler...
    }
}

我将远离通用处理程序的类似 LINQ 的表达式部分,因为我仍在研究 grokking Expressions。然而,需要考虑的是,如果您采用类似 LINQ 的表达式路径,您的 GenericClass 维护起来有多难/容易?

我的经验是,相当多的开发人员对委托和 Lamba 表达式不满意。在查看使用表达式的代码时,他们会畏缩(字面意思)。

于 2009-01-17T13:28:56.403 回答