如何将依赖项注入asmx webservice webmethod?

时间:2014-06-09 15:29:37

标签: c# asmx

我有一个使用此方法的asmx webserice

[WebMethod]
double GetBookPrice(int bookID)
{
    //instantiates a DiscountService,DeliveryService and a couple of other services

    //uses various methods of these services to calculate the price
    //e.g. DiscountService.CalculateDiscount(book)

}

有4种服务是此方法的依赖项。

现在如何测试此方法?我需要注入这些依赖项?或者我应该这样做?客户只是发送一个int来检查价格。

由于

1 个答案:

答案 0 :(得分:5)

如果所有GetBookPrice方法正在执行int并将其传递给另一个方法,然后返回这些结果,我说测试服务方法具有可疑价值。它没有伤害来测试它,如果你想在GetBookPrice方法中扩展功能,它可能有价值。

一般来说,如果你想测试你的服务,你可以通过构造函数注入和构造函数链来做标准的IOC:

public class FooWebService
{
    private readonly ISomeDependency dependency;
    public FooWebService(ISomeDependency dependency)
    {
        //this is what you call during your testing
        this.dependency = dependency;
    }
    public FooWebService() : this(new ConcreteDependencyImplementation())
    {
    }
}

当您进行测试时,您会传入您的依赖项(或依赖项!)的实例。当您不进行测试时,将通过调用无参数构造函数自动创建和提供依赖项。