我要做的是以下内容:
1)我有以下WCF服务合同:
[ServiceContract]
public interface IUploadService
{
[OperationContract]
ServiceData Upload(Request request);
}
[DataContract]
public class Request
{
[DataMember]
public long AbnNumber;
[DataMember]
public string Email;
}
2)这份合同是这样实施的。
public class UploadService : IUploadService
{
public bool Upload(Request request)
{
// Some code
}
}
在“Some code”部分中,我想调用验证类来验证客户端请求,如下所示:
var result = validation.ValidateRequest(request);
所以我的问题是:在Upload
方法中创建验证类的实例是不是一个坏主意?像这样:
public class UploadService : IUploadService
{
public bool Upload(Request request)
{
var validation = new Validation();
var result = validation.ValidateRequest(request);
}
}
我知道你可以通过创建一个构造函数来解决这个问题,但据我所知你不能在WCF服务实现类中创建一个构造函数,或者我错了吗?
我是WCF的新手,所以如果我完全走向错误的方向,请告诉我。
由于
答案 0 :(得分:1)
我个人认为我的服务方法尽可能少。我会有一个单独的项目来处理上传。这样,您就可以更轻松地重用此代码,并在不创建服务的情况下测试功能。
至于你是否应该像这样创建验证,它实际上取决于它的作用,但通常我会确保Validation类实现一个包含ValidateRequest(Request)的接口,然后注入它。如果需要,您可以在测试中模拟它。
所以你的服务代码看起来像是
public class UploadService : IUploadService
{
private readonly IUploadHandler _uploadHandler;
public UploadService(IUploadHandler uploadHandler)
{
_uploadHandler = uploadHandler;
}
public bool Upload(Request request)
{
//would possibly do some mapping here to create a different type of object to pass to the handler
_uploadHandler.Upload(request);
}
}
并且不同项目中的处理程序看起来像
public class UploadHandler : IUploadHandler
{
private readonly IValidation _validator;
public UploadHandler(IValidation validator)
{
_validator = validator;
}
public bool Upload(Request request)
{
return _validator.ValidateRequest(request);
}
}
答案 1 :(得分:0)
所以我的问题是:在Upload方法中创建验证类的实例是不是一个坏主意?
归结为您是使用Singleton还是Per Call服务。通常最好为每个请求创建一个新的Service实例,在这种情况下,可以在您的操作中创建所有实例。
有关此主题的有趣讨论Should WCF service typically be singleton or not?
如果您决定不为每个请求创建Validation类,则有两个选项: