Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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# IDependencyResolver是反模式吗?_C#_Asp.net Mvc_Dependency Injection_Service Locator - Fatal编程技术网

C# IDependencyResolver是反模式吗?

C# IDependencyResolver是反模式吗?,c#,asp.net-mvc,dependency-injection,service-locator,C#,Asp.net Mvc,Dependency Injection,Service Locator,我正在设计一些对传统ASP.NET应用程序的架构更改。我模拟ASP.NET MVC的IDependencyResolver原型化了一些依赖项解析类。我不会发帖,因为它是几乎相同的界面,但使用其他自然语言 我发现它可能被认为是服务位置,而服务位置通常(在某些情况下不是完全)被谴责为依赖注入。尽管如此,我找不到任何反对使用ASP.NETMVC依赖项解析实现的建议 ASP.NET MVC的IDependencyResolver是否被视为反模式?这是件坏事吗?我不这么认为。。。您可以将任何想要的IoC注

我正在设计一些对传统ASP.NET应用程序的架构更改。我模拟ASP.NET MVC的IDependencyResolver原型化了一些依赖项解析类。我不会发帖,因为它是几乎相同的界面,但使用其他自然语言

我发现它可能被认为是服务位置,而服务位置通常(在某些情况下不是完全)被谴责为依赖注入。尽管如此,我找不到任何反对使用ASP.NETMVC依赖项解析实现的建议


ASP.NET MVC的IDependencyResolver是否被视为反模式?这是件坏事吗?

我不这么认为。。。您可以将任何想要的IoC注入ASP.NETMVC,这对我来说似乎是一个很好的模式

关于注入ASP.NET MVC 3。

如果您使用其他名称查看。我考虑了关系的传递性,所以我认为<强>依赖型分解器是反模式< /强>


除此之外,接口也是。

它看起来像IDepedencyResolver实现了服务位置。问题是:是吗?为什么这个实现比其他服务定位器更好?@michelpm:@michelpm的目的是创建一个公共接口,这样您就可以使用一个IOC容器来处理MVC控制器的对象图构造,这种方式对容器来说是完全不可知的。接口创建契约,以便MVC实现可以遵循“magic give me things”方法。如果没有这个模式,您将需要构建自己的基础框架来进行依赖倒置。然而,无论您尝试什么,您的应用程序中必须至少有某个地方使用服务定位器(anti)模式,因为我们需要以某种方式解析实例。在MVC中,他们通过让框架本身解析根对象(控制器)有效地解决了这个问题。为此,我们需要为MVC提供一个容器,
IDependencyResolver
被定义为此的抽象。因此,
idependencysolver
是一件坏事,因为它是服务定位器吗?我不这么认为。但是,ASP.NETMVC从1.0开始就有了IControllerFactory来实现这个目的,而且它已经达到了令人钦佩的目的。这是一个抽象工厂,所以大部分是无害的。也许我们对如何使用IDependencyResolver有分歧。我绝不会鼓励人们在他们的代码中包含IDR.Resolve(),除非它位于应用程序的顶部。这就是使用IDR时的假设吗,我所有的类都在向它索取东西?不!我大力提倡构造函数注入。我不得不同意史蒂文的观点,那就是即使是IControllerFactory也必须在某处解决。该框架最初是手动完成的,现在它使用IDR对其进行抽象,IDR还用于框架中硬编码的其他内容。在回答这个问题时,也许应该区分在组合根目录中实现服务定位器和在代码中到处引用服务定位器。。。这些都是基于共享状态的可怕设计的例子!在猪身上涂口红并不能证明服务定位器是一种很好的模式。总是有更好的方法来解决这样的问题;它是如何使用的模式。将其与服务定位器模式等同起来过于简单。不要从代码中引用它,而要坚持构造函数注入。