Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET Web应用程序';s对ASMX web服务的依赖性_C#_Asp.net_.net_Web Services_Dependency Injection - Fatal编程技术网

C# ASP.NET Web应用程序';s对ASMX web服务的依赖性

C# ASP.NET Web应用程序';s对ASMX web服务的依赖性,c#,asp.net,.net,web-services,dependency-injection,C#,Asp.net,.net,Web Services,Dependency Injection,我在一个解决方案中有两个项目。ASP.NET Web应用程序和ASMX Web服务应用程序。ASP.NET Web应用程序中引用了ASMX Web服务(作为Web引用) 在aspx页面中,我们创建一个Web服务对象,并对其调用如下方法 MyWebService myWebService = new MyWebService(); UserDetail userDetail = myWebService.GetUserDetail(25); 这意味着我的aspx页面取决于MyWebService

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

在aspx页面中,我们创建一个Web服务对象,并对其调用如下方法

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

如何删除此依赖项

在谷歌上,我看到了以下文章,这些文章与我要找的内容相似,但并不完全相同

所有这些文章都解释了如何将依赖项注入asmx web服务,而不是将asmx web服务依赖项注入asp.net web应用程序

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


请帮助我理解这一困惑。

为什么要在网页上编写此代码?您可以编写一个层来处理此类调用,并让该层决定如何执行该操作

这将允许您:-

1) 松散耦合的功能


2) 删除冗余。

您可以使用注入的工厂

例如:

    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);
var service=Locator.Resolve();
UserDetail UserDetail=service.GetUserDetail(25);
注意,您需要在全局ascx中使用依赖关系注入器。你可以使用ninject或ms unity或任何注射器