2

如果问题有点不清楚,我很抱歉。请随时清理/概括这个问题。我英语不够好,不能自己做

我需要使用 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)
    .....
}

有数百种方法。

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

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;
    }
}

对于所有数百种方法,我都需要这种模式。

有没有一种技术可以创建这样一个外观对象,而无需实际编写 100 个具有相同功能的函数?(只有第一个参数相同)其他可能不同

4

1 回答 1

1

你可能想和Reflection.Emit. 可以在此站点上找到一个不错但可能有点过时的教程。也看看 MSDN - 他们有很棒的文档!

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

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

请记住,有一些替代方法可以发出代码,但我不太了解它们,所以我无法提供任何建议 - 但它很容易谷歌搜索。

Reflection.Emit单独使用 IL 本身就很麻烦,但它确实可以让您更多地了解 C# 代码中发生的事情。

于 2012-11-21T08:10:59.873 回答