很多具有相同参数的函数?

时间:2012-11-21 08:02:59

标签: c# design-patterns facade

对不起,如果问题有点不清楚。请随意澄清/发现这个问题。我自己也不懂英语

我需要使用Web服务将Web服务的所有方法作为第一个参数作为身份验证对象

class webservice{
    e_webservice_return_value method1(object authentication,object param1,object param2,object param32)
    e_webservice_return_value method2(object authentication,object param1,object param2)
    .....
}

有数百种方法。

我想创建一个提供所有方法的提供者类 现在我可以为每个方法创建一个名为provider的类并编写

class provider{
    object _auth;
    e_webservice_return_value method1(object param1,object param2,object param3)
    {
        var res= method1(_auth,param1,param2,param3);
        if(res=bad auth)
        {
            ReAuth(auth);
        }
        return res;
    }

    e_webservice_return_value method2(object param1,object param2)
    {
        var res =return e_webservice_return_value method2(_auth,param1,param2);
        if(res=bad auth)
        {
            ReAuth(auth);
        }
        return res;
    }
}

我需要这种模式用于所有数百种方法。

是否有一种技术来创建这样的Facade对象而不实际编写100个具有相同功能的函数? (只有第一个参数相同)其他参数可能不同

1 个答案:

答案 0 :(得分:1)

您可能希望使用Reflection.Emit。可以在this site找到一个很好但可能有点过时的教程。另请查看MSDN - 他们有精彩文档!

您通常要做的是使用属性标记每个方法(或整个类),并为每个具有属性的方法/类创建包装方法,并替换代码。你可以让它在应用程序初始化或第一次调用这个类/方法时运行,设计由你决定。

这不是一件容易的事,但实际上我们在项目中遇到了相同的情况,事实证明这是一个很好的解决方案。这是因为具有给定属性的每个方法都需要类似的处理。

请记住,代码发出有一些替代方法,但我不太了解它们,因此我无法提供任何建议 - 但它很容易被发送。

IL本身的{p> Reflection.Emit非常麻烦,但当然它可以让你更多地了解你的c#代码中的内容。