asp.net - 如何在 ASP.NET Web 服务中使用依赖注入(inject)和存储库模式?

标签 asp.net web-services dependency-injection inversion-of-control

对于常规的 ASP.NET MVC 页面,存储库被传递给控件的构造函数。然后测试可以实例化传入模拟存储库的 Controller 。

如何使用 Web 服务做到这一点?我看到的问题是我们没有对应的 ControllerBuilder.SetControllerFactory。

让我的 IoC 框架 (CaSTLe) 使用正确的存储库实现来实例化我的 Web 服务的最佳实践是什么?

我认为可能有一种方法可以扩展 HttpHandler 并改变 Web 服务的实际实例化方式。我相信这就是 MVC 框架的工作方式。

最佳答案

这是一个很好的问题。我也有同样的问题。我认为如果您使用 .asmx 文件创建 Web 服务,则不可能使用构造函数注入(inject)。如果您使用 WCF 来实现 Web 服务,那么我认为这是可能的。

在我的 .asmx Web 服务中,我让 DI 容器通过设置属性来设置依赖项。因为我的应用程序也是一个 web 表单 asp.net 应用程序,所以我必须这样做,因为我也不能在 web 表单上使用构造函数注入(inject)。但我使用的是 StructureMap,它有一个 BuildUp可以设置已创建对象的属性的函数。不像构造函数注入(inject)那么干净,但是一个很好的折衷方案。

但是 Web 服务与 Web 表单不同,因为我可以将构建放在 Web 表单之外,在 Application_PostMapRequestHandler 中。事件。但是我还没有发现在创建 Web 服务类之后触发的事件。因此,在我的 Web 服务的构造函数中,我有以下代码

ObjectFactory.BuildUp(this);

这是一种反模式。由 DI 容器初始化的类不应该知道 DI 容器本身。但是我还没有找到更好的解决方案。

关于asp.net - 如何在 ASP.NET Web 服务中使用依赖注入(inject)和存储库模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1449870/

相关文章:

c# - WCF Windows服务权限问题

android - 从 android 调用 wcf 服务 POST

java - 如何在 Spring MVC 4 中的 Servlet 中注入(inject)依赖?

c# - 数据列表问题

c# - 如何获取两个 T 类型变量之间的所有值?

javascript - visual studio 提示变量未声明

asp.net - ASP.NET WebApi 中异步调用的本地化

jquery - 在所有浏览器中缓存 jQuery REST Ajax 响应

java - 对象池、IoC 和工厂 : When and Where?

jakarta-ee - 如何在Java中@Inject第三方类