我的界面看起来是这样的:
public interface UserHandler
{
CheckUsernameResponse CheckUsername(CheckUsernameRequest request);
}
在签名的请求和响应类型是抽象类,给人的类似用法:
var fooHandler = new FooUserHandler();
var fooResponse = fooHandler.CheckUsername( new FooRequest { id = 1, FooProperty = "abc" });
要么
var barHandler = new BarUserHandler();
var barResponse = barHandler.CheckUserName( new BarRequest { id = 2, BarProperty = true });
什么我最终要做的是必须有多个UserHandler实现的能力,每一个都有自己的请求/响应类型具有不同属性的版本,但有一个共同的基本类型。 我这样做是为了避免不得不进行更改消费WCF服务的情况下,外部用户提供的变化和新的供应商需要在方法调用不同的属性。
铭记有可能通过任何类型从抽象类继承,也就是说我可以通过一个BarRequest成FooHandler,我怎么能保证只有正确/预期的类型作为参数传递,而不诉诸:
public CheckUsernameResponse CheckUsername(CheckUsernameRequest request)
if (request.GetType() != typeOf(FooRequest))
throw new ArgumentException("Wrong type!");
var fooRequest = request as FooRequest;
这种感觉错了,所以我会很感激的任何反馈到具体的问题,一般的方法。
我真正想要的是一个方法签名:
public FooResponse CheckUsername(FooRequest request)
但如果我这样做,我没有实现的接口。