0

我在一个解决方案中有两个项目。一个 ASP.NET Web 应用程序和 ASMX Web 服务应用程序。ASMX Web 服务在 ASP.NET Web 应用程序(作为 Web 引用)中被引用。

在 aspx 页面中,我们创建一个 Web Service 对象并在其上调用方法,如下所示。

MyWebService myWebService = new MyWebService();
UserDetail userDetail = myWebService.GetUserDetail(25);

这意味着我的 aspx 页面依赖于 MyWebService 的具体实现。根据依赖倒置原则(DIP),代码应该依赖于抽象,而不是具体的实现,并且这些抽象不应该依赖于细节;细节应该取决于抽象。

我如何删除这种依赖关系?

在谷歌上,我遇到了以下文章,这些文章与我正在寻找的内容相似但不完全一样。

所有这些文章都解释了将依赖项注入到 asmx Web 服务中,而不是将 asmx Web 服务依赖项注入到 asmx Web 应用程序中。

我是术语依赖注入的新手,我可能想错了方向,走错了方向。

请帮助我理解这种困惑。

4

2 回答 2

2

为什么要在网页上写这段代码?,你可以写一个层来处理这样的调用,让那个层决定如何执行操作。

这将允许您:-

1)松散耦合的功能。

2)去除冗余。

于 2013-09-04T04:00:28.893 回答
0

您可以使用注入的工厂。

例如:

    interface IWebServiceFactory
    {
        MyWebService client();
    }

    public class WebServiceFactory
    {
        public MyWebService client()
        {
             return new MyWebService();
        }
    }

在您的 asp.net Web 应用程序中。

var service = Locator.Resolve<IWebServiceFactory>();
UserDetail userDetail = service .GetUserDetail(25);

请注意,您需要全局 ascx 中的依赖注入器。您可以使用 ninject 或 ms unity 或任何注射器。

于 2014-04-04T16:21:19.303 回答