2

我正在从 StructureMap 2.x 迁移到 3.x。一个主要变化是使用ObjectFactory导致以下警告:

'StructureMap.ObjectFactory' 已过时:'ObjectFactory 将在 StructureMap 的未来 4.0 版本中删除。支持在未来的工作中使用 Container 类'

IContainer所以在大多数情况下,解决方法相当简单:作为构造函数传递。不幸的是,这对于 ASMX Web 服务或属性是不可行的,它们都需要默认构造函数。这意味着我可能会坚持使用服务定位器模式、属性注入或编写自己的 ObjectFactory 实现

处理这个不幸问题的首选方法是什么?

编辑:值得一提的是,我的容器进行了组装扫描。

4

2 回答 2

2

每杰里米米勒,他自己

装配扫描并不便宜,而且您(几乎?)总是想缓存结果。所以,是的,在这种情况下,您将不得不编写自己的 ObjectFactory。总有一天,所有糟糕的旧 MS 技术都会消失。

所以在这种情况下,这个实现是应该做的。

于 2015-03-16T14:43:31.630 回答
1

我见过的最简洁的处理方法是使用 .NET 路由来控制入口点,然后制作一个PageHandlerFactory将 DI 容器作为依赖项的自定义实现。

然后,自定义页面处理程序工厂将在实例化之后但在调用其任何事件之前属性注入页面/服务。

IControllerFactory这与在 MVC 中使用 DI 的方式几乎完全相同。在 MVC 中,容器在应用程序启动时被注入到自定义IControllerFactory实现中,这有效地使其成为应用程序组合根的一部分。在 ASP.NET 的情况下,IRouteHandler将有效地成为组合根的一部分。

我找不到指向我最初看到该实现的源的链接。但这一个非常接近。主要区别在于尝试使用构造函数注入,但缺点是它需要完全信任才能做到。我相信如果你坚持使用属性注入,你可以在部分信任的情况下做到这一点。

于 2015-03-14T05:02:35.440 回答