c#中object []的当前方法参数

时间:2010-01-07 17:49:00

标签: c# .net .net-3.5

我正在改变这个问题,因为它看起来很模糊。

我有一个强制实现n个方法的接口。每种方法都有不同的参数。我使用了2个实现,一个在DMZ中,一个在我的应用服务器中。称它们为Communicator和Handler,一个发送它,另一个实现它。

根据它们运行的​​环境或应用程序注入接口。我基本上想通过线路传递参数,因此我可以完全按照在DMZ端调用的方法调用该方法。

无论调用哪种方法,我如何能够始终如一地序列化所有参数并通过线路传递它们,以便在我可以实际执行它们的环境中调用它?

4 个答案:

答案 0 :(得分:3)

您可以更改TestMethod以接收params数组:

public string TestMethod(params object[] args) 
{
    // do stuff
}

答案 1 :(得分:0)

你的问题有点令人困惑,但我想我可能知道你在追求什么......

您可以使用像Ninject这样的工具使用依赖注入/反转控制。您仍然需要向注射系统询问物体的实例,但只要您正确设置了绑定,DI系统就会为您处理所有连接。

查看wiki for Ninject,了解其确切运作方式。值得注意的是,那里有很多DI / IoC框架,所以你可能想做一些研究来决定哪一个最适合你。我能想到的少数几个是:

答案 2 :(得分:0)

我认为使用其编译时名称访问本地变量没有安全的运行时方式。

答案 3 :(得分:0)

就序列化而言,您可以使用

    static Type[] MyMethod(int a, string b, DateTime c, object d)
    {
        var myParams = MethodBase.GetCurrentMethod().GetParameters();
        return myParams.Select(p => p.ParameterType).ToArray();
    }

该示例显示了您需要告诉您正在处理的序列化程序的类型。 显然我的示例有点偏离,因为您不希望您的方法返回Type[] ...这是出于我自己的测试目的,但它向您展示了如何获取当前方法的类型。

除了获取实际值之外,似乎没有办法做到这一点,除非你使用params(如上所述)或某种dynamic proxy(从未玩过它,不是正面的它将满足您的需求)。否则,在运行时,数据将无法访问。有关说明,请参阅herehere