Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用反射为类字段赋值_C#_Reflection - Fatal编程技术网

C# 使用反射为类字段赋值

C# 使用反射为类字段赋值,c#,reflection,C#,Reflection,我正在调用单个web服务的多个方法。对于每种方法,我都需要创建一个唯一的请求,并且每次都必须传递站点凭据和用户凭据,这是一项非常重复的任务。请在下面查找代码 ClientService.AddOrUpdateClientsRequest clientRequest = new ClientService.AddOrUpdateClientsRequest(); // Create and fill credentials clientRequest.SourceC

我正在调用单个web服务的多个方法。对于每种方法,我都需要创建一个唯一的请求,并且每次都必须传递站点凭据和用户凭据,这是一项非常重复的任务。请在下面查找代码

ClientService.AddOrUpdateClientsRequest clientRequest = new ClientService.AddOrUpdateClientsRequest();
        // Create and fill credentials
        clientRequest.SourceCredentials = new ClientService.SourceCredentials();
        clientRequest.SourceCredentials.SourceName = sourcename;
        clientRequest.SourceCredentials.Password = password;
        clientRequest.SourceCredentials.SiteIDs = siteIDs;


        clientRequest.UserCredentials = new ClientService.UserCredentials();
        clientRequest.UserCredentials.Username = "Siteowner";
        clientRequest.UserCredentials.Password = "apitest1234";
        clientRequest.UserCredentials.SiteIDs = siteIDs;


 ClientService.AddOrUpdateClientsRequest updateClientRequest = new ClientService.AddOrUpdateClientsRequest();
            // Create and fill credentials
            updateClientRequest.SourceCredentials = new ClientService.SourceCredentials();
            updateClientRequest.SourceCredentials.SourceName = sourcename;
            updateClientRequest.SourceCredentials.Password = password;
            updateClientRequest.SourceCredentials.SiteIDs = siteIDs;


            updateClientRequest.UserCredentials = new ClientService.UserCredentials();
            updateClientRequest.UserCredentials.Username = "Siteowner";
            updateClientRequest.UserCredentials.Password = "apitest1234";
            updateClientRequest.UserCredentials.SiteIDs = siteIDs;

 ClientService.UploadClientDocumentRequest uploadRequest = new ClientService.UploadClientDocumentRequest();
//为UploadClientDocumentRequest对象分配凭据


如何创建一个通用函数,将值分配给相同的凭据字段但不同类型的对象。我正在考虑使用反射,但没有在网上得到任何东西

没有必要使用反射。WCF代理类作为部分生成,因此您可以创建一个接口以应用于包含以下属性的所有DTO:

public interface IAuthorizedRequest
{
    SourceCredentials SourceCredentials { get; set; }
    UserCredentials UserCredentials { get; set; }
}
然后在新文件或同一文件中,将此接口应用于所有这些DTO类:

// Merely apply the interface, the other partial contains the properties
public partial class AddOrUpdateClientsRequest : IAuthorizedRequest { }
public partial class SomeOtherRequest : IAuthorizedRequest { }
然后,您可以创建一个方法,将凭据应用于任何
IAuthorizedRequest

public void ApplyCredentials(IAuthorizedRequest request) 
{
    request.SourceCredentials = new ClientService.SourceCredentials();
    request.SourceCredentials.SourceName = sourcename;
    request.SourceCredentials.Password = password;
    request.SourceCredentials.SiteIDs = siteIDs;

    request.UserCredentials = new ClientService.UserCredentials();
    request.UserCredentials.Username = "Siteowner";
    request.UserCredentials.Password = "apitest1234";
    request.UserCredentials.SiteIDs = siteIDs;
}
然后这样称呼它:

var request = new AddOrUpdateClientsRequest();
ApplyCredentials(request);

没有必要使用反射。WCF代理类作为部分生成,因此您可以创建一个接口以应用于包含以下属性的所有DTO:

public interface IAuthorizedRequest
{
    SourceCredentials SourceCredentials { get; set; }
    UserCredentials UserCredentials { get; set; }
}
然后在新文件或同一文件中,将此接口应用于所有这些DTO类:

// Merely apply the interface, the other partial contains the properties
public partial class AddOrUpdateClientsRequest : IAuthorizedRequest { }
public partial class SomeOtherRequest : IAuthorizedRequest { }
然后,您可以创建一个方法,将凭据应用于任何
IAuthorizedRequest

public void ApplyCredentials(IAuthorizedRequest request) 
{
    request.SourceCredentials = new ClientService.SourceCredentials();
    request.SourceCredentials.SourceName = sourcename;
    request.SourceCredentials.Password = password;
    request.SourceCredentials.SiteIDs = siteIDs;

    request.UserCredentials = new ClientService.UserCredentials();
    request.UserCredentials.Username = "Siteowner";
    request.UserCredentials.Password = "apitest1234";
    request.UserCredentials.SiteIDs = siteIDs;
}
然后这样称呼它:

var request = new AddOrUpdateClientsRequest();
ApplyCredentials(request);

你可以简单地编写一个正确的方法。!获取一个带有默认值的新clientrequest对象。!客户端请求对象的类型不同。一个是AddorUpdate对象,另一个是UploadDocumentObject,有更多不同的对象,但它们都要求相同的凭据。您只需编写一个正确的方法即可。!获取一个带有默认值的新clientrequest对象。!客户端请求对象的类型不同。一个是AddorUpdate对象,另一个是UploadDocumentObject,有更多不同的对象,但它们都要求相同的凭据。非常感谢提供有关如何设计类的有用信息。我还在学习这门艺术。再次感谢。非常感谢你提供了关于如何设计我的课程的有用信息。我还在学习这门艺术。再次感谢。