[英]How to pass a class to a method where the methods parameter is a generic
下面的这个方法已经在我的项目中使用不同的界面编写了 12 次
ChannelFactory<interface>
和不同的“用户”。
var user = new SomeWebServiceReference.User();
下面的例子。
所以我想在一个类(不确定我需要什么)中创建一个通用的类或一个通用方法,它传入“WebServiceAWI”接口和任何其他接口(例如 WebServiceBW、WebServiceAWA)和一个“用户”,但我不知道该怎么做。
// file 1
public void TestSomething(string url)
{
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
EndpointAddress endpoint = new EndpointAddress(url);
var channelFactory = new ChannelFactory<WebServiceAWI>(binding, endpoint);
var webservice = channelFactory.CreateChannel();
var user = new User(); // from ServiceReferenceARM
user.UserName = webservice.EncryptValue("someone");
user.Password = webservice.EncryptValue("password");
WebServiceResult result = webservice.AttorneysGet(user);
}
// file 2
public void TestSomething(string url)
{
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
EndpointAddress endpoint = new EndpointAddress(url);
var channelFactory = new ChannelFactory<WebServiceBW>(binding, endpoint);
var webservice = channelFactory.CreateChannel();
var user = new User(); // from ServiceReferenceBW
user.UserName = webservice.EncryptValue("someone");
user.Password = webservice.EncryptValue("password");
WebServiceResult result = webservice.AttorneysGet(user);
}
我认为我在界面上走在正确的轨道上,但我不确定如何传入一个类,然后它就像一个泛型一样。
这是我到目前为止所拥有的。
这样称呼
TestTOSomething<WebServiceAWI, WebServicesTO.ServiceReferenceARM.User>(new ServiceReferenceARM.User(), url);
然后像这样实施它,但我知道这是错误的。
public void TestTOSomething<T, K>(K newUser, string url)
{
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
EndpointAddress endpoint = new EndpointAddress(url);
var channelFactory = new ChannelFactory<T>(binding, endpoint);
var webservice = channelFactory.CreateChannel();
var user = newUser;
user.UserName = webservice.EncryptValue("someone");
user.Password = webservice.EncryptValue("password");
WebServiceResult result = webservice.AttorneysGet(user);
}
您可以为这些创建接口,然后在您的方法中引用它们。 如果没有使用newUser
的泛型类型,则不需要包含它,只需直接在参数中使用它即可。
对于 WebServiceAWI,您需要使用where
关键字定义该类型。
public void TestTOSomething<T>(IUser newUser, string url) where T : IWebServiceAWI
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.