对不起,如果问题有点不清楚。请随意澄清/发现这个问题。我自己也不懂英语
我需要使用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个具有相同功能的函数? (只有第一个参数相同)其他参数可能不同
答案 0 :(得分:1)
您可能希望使用Reflection.Emit
。可以在this site找到一个很好但可能有点过时的教程。另请查看MSDN - 他们有精彩文档!
您通常要做的是使用属性标记每个方法(或整个类),并为每个具有属性的方法/类创建包装方法,并替换代码。你可以让它在应用程序初始化或第一次调用这个类/方法时运行,设计由你决定。
这不是一件容易的事,但实际上我们在项目中遇到了相同的情况,事实证明这是一个很好的解决方案。这是因为具有给定属性的每个方法都需要类似的处理。
请记住,代码发出有一些替代方法,但我不太了解它们,因此我无法提供任何建议 - 但它很容易被发送。
IL本身的{p>Reflection.Emit
非常麻烦,但当然它可以让你更多地了解你的c#代码中的内容。