C# 如何将Structuremap 3与非';对构造函数注入不友好?

C# 如何将Structuremap 3与非';对构造函数注入不友好?,c#,dependency-injection,ioc-container,structuremap,structuremap3,C#,Dependency Injection,Ioc Container,Structuremap,Structuremap3,我正在从StructureMap 2.x迁移到3.x。一个主要变化是使用ObjectFactory会导致以下警告: “StructureMap.ObjectFactory”已过时:“ObjectFactory” 将在StructureMap的未来4.0版本中删除。偏袒 容器类在将来的使用 工作 因此,在大多数情况下,解析相当简单:作为构造函数传递IContainer。不幸的是,这对于ASMX web服务或属性是不可行的,它们都需要默认构造函数。这意味着我可能会被财产注入,或者 处理这个不幸问题的

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

“StructureMap.ObjectFactory”已过时:“ObjectFactory” 将在StructureMap的未来4.0版本中删除。偏袒 容器类在将来的使用 工作

因此,在大多数情况下,解析相当简单:作为构造函数传递
IContainer
。不幸的是,这对于ASMX web服务或属性是不可行的,它们都需要默认构造函数。这意味着我可能会被财产注入,或者

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


编辑:值得一提的是,我的容器执行程序集扫描。

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

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

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

我无法找到指向我最初看到该实现的源代码的链接。但距离很近。主要的区别是尝试使用构造函数注入,但缺点是它需要完全信任。我相信如果你坚持财产注入,你可以通过部分信任来实现。

:

程序集扫描并不便宜,而且您(几乎?)总是希望缓存 结果。所以,是的,那样的话你就得写你的 拥有自己的对象工厂。总有一天,所有糟糕的微软技术都会消失


因此,在这种情况下,我们应该做些什么。

感谢您回来分享答案,我经常想知道杰里米·米勒对此持何立场。