繁体   English   中英

使用反射将值分配给类字段

[英]Using reflection to assign value to class fields

我正在调用单个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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM