Eli*_*nor 53 c# wsdl overriding web-services partial-classes
我不认为这是可能的,但如果是,那么我需要它:)
我有一个由Visual Studio 2008从wsdl.exe命令行工具自动生成的代理文件.
代理输出是部分类.我想覆盖生成的默认构造函数.我宁愿不修改代码,因为它是自动生成的.
我尝试制作另一个部分类并重新定义默认构造函数,但这不起作用.然后我尝试使用覆盖和新关键字,但这不起作用.
我知道我可以继承部分类,但这意味着我必须将所有源代码更改为指向新的父类.我宁愿不必这样做.
任何想法,解决方法或黑客?
//Auto-generated class
namespace MyNamespace {
public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
public MyWebService() {
string myString = "auto-generated constructor";
//other code...
}
}
}
//Manually created class in order to override the default constructor
namespace MyNamespace {
public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
public override MyWebService() { //this doesn't work
string myString = "overridden constructor";
//other code...
}
}
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*ler 68
我有一个类似的问题,我生成的代码是由dbml文件创建的(我使用的是Linq-to-SQL类).
在生成的类中,它在构造函数的末尾调用一个名为OnCreated()的部分void.
长话短说,如果你想保留的重要构造的东西生成的类为你做(这你应该做的),然后在局部类创建以下文件:
partial void OnCreated()
{
// Do the extra stuff here;
}
Run Code Online (Sandbox Code Playgroud)
小智 13
嗯,我认为一个优雅的解决方案如下:
//* AutogenCls.cs file
//* Let say the file is auto-generated ==> it will be overridden each time when
//* auto-generation will be triggered.
//*
//* Auto-generated class, let say via xsd.exe
//*
partial class AutogenCls
{
public AutogenCls(...)
{
}
}
//* AutogenCls_Cunstomization.cs file
//* The file keeps customization code completely separated from
//* auto-generated AutogenCls.cs file.
//*
partial class AutogenCls
{
//* The following line ensures execution at the construction time
MyCustomization m_MyCustomizationInstance = new MyCustomization ();
//* The following inner&private implementation class implements customization.
class MyCustomization
{
MyCustomization ()
{
//* IMPLEMENT HERE WHATEVER YOU WANT TO EXECUTE DURING CONSTRUCTION TIME
}
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法有一些缺点(如一切):
目前尚不清楚何时在AutogenCls类的整个构建过程中将完全执行MyCustomization内部类的构造函数.
如果有必要为MyCustomization类实现IDiposable接口以正确处理MyCustomization类的非托管资源,我还不知道如何在不触及AutogenCls.cs文件的情况下触发MyCustomization.Dispose()方法......(但正如我告诉'还':)
但是这种方法与自动生成的代码有很大的区别 - 整个定制在不同的src代码文件中分开.
请享用 :)
归档时间: |
|
查看次数: |
47159 次 |
最近记录: |