C# 类似对象的智能封装

C# 类似对象的智能封装,c#,soap,reflection,derived-class,C#,Soap,Reflection,Derived Class,我有几个Soap请求,它们的开头都一样: 第一项请求: var client = new Conn.Team.z_proj_team_spQueryPortClient(); client.Endpoint.Address = EndPoint; var query = new Conn.Team.z_proj_team_spQuery { Filter = new Conn.Team.z_proj_team_spFilter { param_code = pro

我有几个Soap请求,它们的开头都一样: 第一项请求:

var client = new Conn.Team.z_proj_team_spQueryPortClient();
client.Endpoint.Address = EndPoint;
var query = new Conn.Team.z_proj_team_spQuery
{
    Filter = new Conn.Team.z_proj_team_spFilter
    {
        param_code = projectCode
    }
};
var auth = new Conn.Team.Auth { Username = _username, Password = _password };
var records = client.Query(auth, query).Records;
第二项请求:

var client = new Conn.Task.z_proj_Task_spQueryPortClient();
client.Endpoint.Address = EndPoint;
var query = new Conn.Task.z_proj_Task_spQuery
{
    Filter = new Conn.Task.z_proj_Task_spFilter
    {
        param_code = projectCode
    }
};
var auth = new Conn.Task.Auth { Username = _username, Password = _password };
var records = client.Query(auth, query).Records;
如您所见,代码看起来几乎相同,但它们是完全不同的对象(不共享基类),但使用相同的属性名称

因为我有大约10个这样的调用,有没有一个好的方法来包装这些函数?你甚至会建议这样做,还是简单的反思会让它变得“更邪恶”

(顺便说一句:)我不确定什么是一个好标签将是我的问题。请随意将其更改为更好的

通过以下“反射/动态”方式解决了此问题。如果您有更好的解决方案,请随时发布

private object Connect(Type clientType, Type queryType, Type filterType, Type authType, string code)
{
    dynamic client = Activator.CreateInstance(clientType);
    client.Endpoint.Address = EndPoint;

    dynamic query = Activator.CreateInstance(queryType);
    dynamic filter = Activator.CreateInstance(filterType);
    filter.param_code = code;
    query.Filter = filter;

    dynamic auth = Activator.CreateInstance(authType);
    auth.Username = _username;
    auth.Password = _password;

    return client.Query(auth, query).Records;
}